Podsieć po stronie odbiorczej a VPN desktopowy: wyklucz tranzyt, nie aplikacje
Obejście dla pojedynczej aplikacji klasyfikuje tylko lokalne wyjście. Urządzenia za stacją roboczą potrzebują własnej polityki wejścia, przekazywania i drogi powrotnej.
Jeden komputer, dwa zadania, jedna zapora: łącze Wi-Fi w górę, mała podsieć Ethernet za nim i klient VPN na pulpicie, który zakłada, że wszystko wychodzące z komputera jest lokalne. Aplikacje uruchomione lokalnie wychodzą lokalną ścieżką wyjścia. Urządzenia za stacją roboczą przychodzą na port Ethernet i wymagają decyzji o przekazywaniu. Wyjątek napisany dla pierwszej ścieżki nigdy nie widzi drugiej, i dlatego przeglądarka omija tunel, a urządzenia nie.
Dwie ścieżki pakietów, jedna polityka
| Origin | Path | Decision owner |
|---|---|---|
| Application on the workstation | OUTPUT then egress | The VPN app's routing policy |
| Device behind the workstation | PREROUTING then FORWARD | The workstation's own forwarding policy |
Pierwszy wiersz to to, co opisuje większość poradników split-tunneling. Drugi to konfiguracja routera, która przypadkiem mieszka na tym samym komputerze. Stopienie ich w jeden model mentalny jest błędem; dzielą jądro, ale nie politykę. Narysuj obie ścieżki, zanim zmienisz jakąkolwiek regułę, a reszta projektu wynika z tego, której ścieżki brakuje.
Tabela wyjaśnia też, dlaczego jeden komputer może przejść jeden test, a inny oblać. Przeglądarka na stacji roboczej dowodzi ścieżki lokalnej; laptop podłączony do portu Ethernet dowodzi ścieżki przekazywania. Weryfikuj każdą zmianę obiema, inaczej druga pozostanie niesprawdzona, ilekroć odświeżysz przeglądarkę.
Co faktycznie klasyfikuje wyjątek aplikacji
Wyjątek dla pojedynczej aplikacji zwykle działa tak, że oznacza pakiety procesu lub użytkownika, a następnie kieruje oznaczony ruch poza tunel. To konstrukcja lokalnego wyjścia. Pakiet z urządzenia po stronie odbiorczej nie ma procesu lokalnego, więc nigdy nie pasuje do selektora, jakikolwiek by on był.
Jakikolwiek byłby selektor, obie listy nie są tą samą listą, i o to chodzi. Poradnik Mullvad dla Linuxa opisuje znaczniki zużywane przez jego zaporę i politykę routingu, a jego przykłady dotyczą lokalnego wyjścia; nie są obsługiwanym opisem routera po stronie odbiorczej. Ich skopiowanie daje komputer, który wierzy, że ma wyjątek, a jednocześnie przekazuje wszystko do tunelu.
Napisz kontrakt tranzytu
Nazwij razem prefiks źródłowy po stronie odbiorczej i interfejs wejściowy, a następnie ogranicz ten prefiks na wejściu. Bez ograniczenia każde urządzenie, które dotrze do portu, może zgłosić wykluczony adres i wyjść przez obejście. Traktuj to jako dwa pytania: czy te hosty mogą w ogóle używać tego łącza, i czy mogą dotrzeć do stacji roboczej lub prywatnych zakresów tunelu? To dodatkowe uprawnienia, a nie skutki uboczne wyboru łącza.
Zezwól na przekazywanie, a potem je filtruj. Brama Linux potrzebuje włączonego przekazywania, reguł zezwalających na zamierzony ruch w obu kierunkach oraz albo trasy powrotnej w górę, albo celowo zawężonego tłumaczenia źródła. Sam NAT nie wybiera łącza i nie daje przejścia przez filtr; przepisuje adres dopiero po tych decyzjach.
Klasyfikacja dla tranzytu musi nastąpić przed decyzją o trasie przekazywania, czyli na etapie prerouting, a nie output. Reguła umieszczona po decyzji może jeszcze zmienić pakiet, ale nie może zmienić, dokąd został już wysłany.
Znaczniki należą do aplikacji, która je posiada
Wartości znaczników, numery tabel i priorytety łańcuchów są częścią polityki aplikacji VPN, a nie wiecznymi stałymi. Sieć, która zależy od wstawienia reguły do tabeli odtwarzanej przez inny program, zepsuje się przy następnej aktualizacji, zwykle podczas ponownego połączenia, a nie w dogodnym momencie.
Dodanie drugiego łańcucha bazowego z werdyktem accept nie zawsze unieważnia drop późniejszego łańcucha. Łańcuchy bazowe mają haki i priorytety, a pierwszy werdykt w kolejności wygrywa; accept w jednym łańcuchu nie anuluje drop, do którego inny łańcuch dociera wcześniej. Patrz na cały zestaw reguł i kolejność polityki routingu, a nie na jeden licznik, który wzrósł. Licznik dowodzi, że reguła zadziałała, nigdy że to jej werdykt został zastosowany.
Zintegruj albo przenieś podsieć
Oba projekty różnią się tym, kto posiada obejście. Projekt zintegrowany utrzymuje jeden komputer i jedną politykę, kosztem zależności od cyklu życia tabel aplikacji VPN i od zestawu znaczników, które jej dokumentacja może zmienić. Dedykowany router dla sieci po stronie odbiorczej usuwa tę zależność całkowicie: podsieć ma własne łącze w górę, a stacja robocza pozostaje klientem bez roli przekazywania.
Wybierz drugi, gdy sieć po stronie odbiorczej musi działać przez aktualizacje VPN, albo gdy nikt nie może testować zintegrowanej polityki po każdym wydaniu. Wybierz pierwszy tylko wtedy, gdy integracja jest udokumentowana i ktoś za nią odpowiada.
Sprawdź granicę w czterech stanach: połączono, ponowne łączenie, celowo zablokowano i zatrzymano. Sprawdź rozwiązywanie nazw i obie rodziny adresów w każdym z nich, bo obejście, które wycieka DNS, nie jest wyjątkiem, który zaprojektowałeś. Test powinien dowieść dokładnej granicy, a nie tylko tego, że jedna strona się wczytała.