Мені вдалося відхилити всі з'єднання із зовнішніми мережами, якщо моє з'єднання 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), але журнал, здається, вимкнено в ОС X, тому що для того,sudo tcpdump -n -e -ttt -i pflog0щоб побачити результати журналу в "tcpdump: pflog0: Такого пристрою не існує".
Ніщо з цього не допомагає швидше встановити з’єднання Wi-Fi.
Що ще я можу зробити, щоб визначити, яка послуга повинна бути доступною для відновлення підключення до Wi-Fi, або яке правило слід додати до pf.conf, щоб зробити з'єднання Wi-Fi надійнішими?