Byłem w stanie odmówić wszystkich połączeń z sieciami zewnętrznymi, chyba że moje połączenie OpenVPN jest aktywne przy użyciu pf.conf. Jednak tracę łączność Wi-Fi, jeśli połączenie zostanie zerwane przez zamknięcie i otwarcie pokrywy laptopa lub wyłączenie i ponowne włączenie Wi-Fi.
- Jestem w systemie Mac OS 10.8.1.
- Łączę się z Internetem przez Wi-Fi (z różnych lokalizacji, w tym z publicznej sieci Wi-Fi).
- Połączenie OpenVPN jest konfigurowane za pomocą Viscosity.
Mam skonfigurowane następujące reguły filtrowania pakietów /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
Uruchamiam usługę filtrowania pakietów za pomocą sudo pfctl -e
i ładuję nowe reguły za pomocą sudo pfctl -f /etc/pf.conf
.
Zredagowałem również /System/Library/LaunchDaemons/com.apple.pfctl.plist
i zmieniłem wiersz <string>-f</string>
do odczytu, <string>-ef</string>
aby filtr pakietów uruchamiał się przy uruchomieniu systemu.
Na początku wszystko wydaje się działać świetnie: aplikacje mogą łączyć się z Internetem tylko wtedy, gdy aktywne jest połączenie OpenVPN, więc nigdy nie wyciekam danych przez niepewne połączenie.
Ale jeśli zamknę i ponownie otworzę pokrywę laptopa lub wyłączę i ponownie włączę Wi-Fi, połączenie Wi-Fi zostanie utracone, a na pasku stanu zobaczysz wykrzyknik na ikonie Wi-Fi. Kliknięcie ikony Wi-Fi powoduje wyświetlenie komunikatu „Alert: Brak połączenia z Internetem”:
Aby odzyskać połączenie, muszę rozłączyć i ponownie połączyć Wi-Fi, czasami pięć lub sześć razy, zanim zniknie komunikat „Ostrzeżenie: brak połączenia z Internetem” i będę mógł ponownie otworzyć połączenie VPN. Innym razem alert Wi-Fi znika z własnej woli, wykrzyknik jest usuwany i mogę się połączyć ponownie. Tak czy inaczej, ponowne nawiązanie połączenia może potrwać pięć minut lub dłużej, co może być frustrujące.
Usunięcie linii block all
rozwiązuje problem (ale pozwala na niebezpieczne połączenia), więc wydaje się, że blokuję usługę wymaganą przez Apple w celu odzyskania i potwierdzenia połączenia Wi-Fi. Próbowałem:
- Włączanie icmp przez dodanie
pass on $wifi proto icmp all
do pf.conf - Włączanie rozpoznawania DNS poprzez dodanie
pass on $wifi proto udp from $wifi to any port 53
- Próbuję dowiedzieć się więcej, logując zablokowane pakiety (zmieniając
block all
nablock log all
), ale rejestracja wydaje się być wyłączona w OS X, ponieważ zrobienie tego,sudo tcpdump -n -e -ttt -i pflog0
aby zobaczyć dziennik, powoduje „tcpdump: pflog0: Nie ma takiego urządzenia”.
Nic z tego nie pomaga szybciej nawiązać połączenia Wi-Fi.
Co jeszcze mogę zrobić, aby określić, która usługa musi być dostępna, aby odzyskać łączność Wi-Fi, lub jaką zasadę należy dodać do pliku pf.conf, aby połączenia były bardziej niezawodne?