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

OriginPathDecision owner
Application on the workstationOUTPUT then egressThe VPN app's routing policy
Device behind the workstationPREROUTING then FORWARDThe 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.

Powiązane artykuły