Как сделать VPN kill-switch для Mac OS X
Я хочу полностью отключить интернет-соединение при обрыве VPN-соединения. Я подключаюсь к своему VPN (privatevpn.com) через Visidity.
Я перепробовал все в книге. Я пытался использовать сценарии отключения в Visidity, но они никогда не запускаются и не запускаются непоследовательно и оставляют уязвимым мое соединение. Я также пробовал трюки с маршрутизацией в Visidity, но он тоже не работает.
На моих машинах с Ubuntu у меня есть решение, которое работает отлично, я использую правила ufw для управления брандмауэром. Чтобы подключиться к VPN, мне нужно отключить UFW, а затем, после подключения VPN, я включаю UFW, и он защищает соединение от утечки.
На Mac есть нечто, называемое pf. Я мог бы настроить pf так же, как работают мои правила ufw, но я не понимаю, как его настроить.
Вот мои правила UFW, которые я также хотел бы запустить на Mac, может, кто-нибудь может помочь мне настроить pf на использование тех же правил?
Статус: активный Ведение журнала: включено (низкое) По умолчанию: отказать (входящий, отказать (исходящий), отключено (направлено) Новые профили: пропустить
К действиям из любого места, разрешенным в 193.180.119.0/24 из любого места, разрешенным к 193.180.119.0/24
2 ответа
Лучшее, что я нашел, это использовать PF, доступный на Mac OS X, после подключения к вашему провайдеру VPN просто нужно изменить IP.
Создать файл ~/killswitch/pf.conf
содержащий это
# Options
set block-policy drop
set ruleset-optimization basic
set skip on lo0
# Interfaces
wifi = "en1"
vpn = "utun1"
# Block everything
block out all
block in all
# Outbound: Allow only VPN
pass out on $wifi proto {tcp, udp} from any to 81.171.71.XX
# Allow traffic for VPN
pass out on $vpn all
Дважды проверьте ваши интерфейсы, в моем случае en1
это WiFi и uten1
VPN-туннель.
+ Изменить 81.171.71.XX
на IP, который вы получаете при подключении.
включить пф
$ sudo pfctl -e
Загрузите правила:
$ sudo pfctl -Fa -f /path/to/pf.conf
Отключить pf:
$ sudo pfctl -d
Я должен был реализовать это из-за проблемы с ipvanish, главным образом из-за сбоя приложения, что приводило к падению VPN, и трафик возвращался к стандартному, без зашифрованного маршрута.
Обновить
Вы можете попробовать убить, он может сделать все это для вас автоматически.
Может ли этот скрипт добиться цели?
#!/bin/bash
while true
do
result=$(scutil --nc list | grep Connected)
if [ -z "$result" ]; then
killall Transmission
exit
fi
done