Мені вдалося відхилити всі з'єднання із зовнішніми мережами, якщо моє з'єднання 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 надійнішими?