Я был в состоянии запретить все подключения к внешним сетям, если мое подключение OpenVPN не активно с использованием pf.conf. Однако я теряю соединение Wi-Fi, если оно разрывается при закрытии и открытии крышки ноутбука или при выключении и включении Wi-Fi.
- Я на Mac OS 10.8.1.
- Я подключаюсь к сети через Wi-Fi (из разных мест, включая общедоступный Wi-Fi).
- Соединение OpenVPN настроено с Вязкостью.
У меня есть следующие правила фильтрации пакетов, установленные в /etc/pf.conf
# Deny all packets unless they pass through the OpenVPN connection
wifi=en1
vpn=tun0
block all
set skip on lo
pass on $wifi proto udp to [OpenVPN server IP address] port 443
pass on $vpn
Я запускаю службу фильтрации пакетов с sudo pfctl -e
и загружаю новые правила с sudo pfctl -f /etc/pf.conf
.
Я также отредактировал /System/Library/LaunchDaemons/com.apple.pfctl.plist
и изменил строку <string>-f</string>
для чтения, <string>-ef</string>
чтобы фильтр пакетов запускался при запуске системы.
На первый взгляд все это прекрасно работает: приложения могут подключаться к Интернету только при активном соединении OpenVPN, поэтому я никогда не пропускаю данные через небезопасное соединение.
Но если я закрою и снова открою крышку ноутбука или выключу и снова включу Wi-Fi, соединение Wi-Fi будет потеряно, и я вижу восклицательный знак на значке Wi-Fi в строке состояния. Если щелкнуть значок Wi-Fi, появится сообщение «Предупреждение: нет подключения к Интернету»:
Чтобы восстановить соединение, мне нужно отключить и снова подключить Wi-Fi, иногда пять или шесть раз, прежде чем исчезнет сообщение «Оповещение: нет подключения к Интернету», и я смогу снова открыть подключение VPN. В других случаях предупреждение Wi-Fi исчезает само по себе, восклицательный знак очищается, и я могу подключиться снова. В любом случае, для восстановления соединения может потребоваться пять минут или более, что может быть неприятно.
Удаление линии block all
решает проблему (но допускает небезопасные соединения), поэтому кажется, что есть служба, которую я блокирую, которая требуется Apple для восстановления и подтверждения соединения Wi-Fi. Я пытался:
- Включение icmp путем добавления
pass on $wifi proto icmp all
в pf.conf - Включение разрешения DNS путем добавления
pass on $wifi proto udp from $wifi to any port 53
- Попытка узнать больше, регистрируя заблокированные пакеты (изменяя
block all
наblock log all
), но журналирование кажется отключенным в OS X, потому что выполнение,sudo tcpdump -n -e -ttt -i pflog0
чтобы увидеть журнал, приводит к «tcpdump: pflog0: такого устройства не существует».
Ничто из этого не помогает восстановить соединение Wi-Fi быстрее.
Что еще я могу сделать, чтобы определить, какая служба должна быть доступна для восстановления подключения к Wi-Fi, или какое правило я должен добавить в pf.conf, чтобы сделать подключение Wi-Fi более надежным?