Хитрый killswitch на OpenVPN



  • Всем привет, на англоязычном форуме тишина, попробую спросить тут:

    Дано ТЗ: Когда к OpenVPN серверу подключен клиент, компьютеры из LAN имеют доступ в интернет (через основной шлюз, не через VPN), когда клиент отключается LAN остается без интернета.

    В Custom options на сервере прописано:

    script-security 3 system;
    client-connect /usr/local/sbin/up.sh;
    client-disconnect /usr/local/sbin/down.sh;
    

    up.sh:

    #!/bin/sh
    
    /usr/local/bin/easyrule unblock lan 192.168.56.0/24
    /sbin/pfctl -k 192.168.56.0/24
    

    down.sh:

    #!/bin/sh
    
    /usr/local/bin/easyrule block lan 192.168.56.0/24
    /sbin/pfctl -k 0.0.0.0/0
    /sbin/pfctl -k 192.168.56.0/24
    

    Все работает, но скрипт down.sh не закрывает активные стейты если его запускает openvpn. Т.е., например, с машины из LAN идет пинг на 8.8.8.8, отсоеденяем клиент, пинг продолжает идти (хотя новые соеденения открыть нельзя). Т.е. стейт не убился. НО, если тот же скрипт down.sh запустить из консоли пинг мгновенно прерывается, т.е. стейты умирают. Такое ощущение что pfctl в случае запуска через openvpn работает не так как надо, он работает (это видно по тому как отваливается SSH, например) но не убивает все стейты. OpenVPN работает под рутом, т.е. проблем с правами быть не должно. В чем может быть прикол? :)
    Версия: 2.3.4-RELEASE (amd64)