Я был в состоянии запретить все подключения к внешним сетям, если мое подключение 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 более надежным?