Aplikacja przypisuje się do adresu VPN, a połączenie i tak wychodzi zwykłą trasą domyślną. W przypisaniu nic nie zawiodło; zrobiło dokładnie to, co robi przypisanie. Przypisanie gniazda do adresu lokalnego wybiera adres źródłowy, który jądro umieszcza w nagłówku. Nie instaluje trasy i nie tworzy reguły polityki, która wysyłałaby pakiety z tym źródłem do konkretnego tunelu.

Reszta tego podręcznika to kolejność sprawdzeń, której używam, wraz z poleceniem dającym każde spostrzeżenie.

Co przypisanie naprawdę rozstrzyga

Przypisanie nadaje gniazdu adres lokalny. Następnie jądro wykonuje to samo wyszukiwanie trasy, które wykonałoby inaczej, chyba że reguła polityki zmieni, którą tabelę to wyszukiwanie czyta.

Dlatego pakiet może wyjść z adresem źródłowym VPN przez interfejs fizyczny. Po drugiej stronie przychodzi z zakresu prywatnego, którego sieć nigdy nie oczekiwała na tej drodze, ruch powrotny nie ma trasy z powrotem, a połączenie zawiesza się albo jest resetowane.

Dokumentacja gniazd IP w Linuksie opisuje semantykę przypisania. Połowa dotycząca routingu mieszka w ip-rule i ip-route, i to osobne podręczniki nie bez powodu.

Potwierdź, że adres należy do tej przestrzeni nazw

Adres, do którego można się przypisać, musi istnieć na interfejsie w przestrzeni nazw sieci, w której działa aplikacja. Adres partnera, adres bramy albo adres istniejący tylko w innej przestrzeni nazw nie da się przypisać, a wywołanie kończy się błędem EADDRNOTAVAIL.

ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>

Uruchom te trzy w tym samym kontekście co aplikację: ta sama przestrzeń nazw i, jeśli uda się je uzyskać, ten sam użytkownik. Stary schemat net30 nie jest dowodem, jaki adres obecna topologia przydzieliła klientowi. Czytaj interfejs, który jest rzeczywiście aktywny.

Przeczytaj wyszukiwanie dla tego źródła i celu

Jedno polecenie odpowiada na pytanie, na które przypisanie nie odpowiedziało:

ip route get 203.0.113.10 from 10.8.0.2
ip rule show

Pierwszy wiersz wypisuje trasę, którą przebyłby pakiet z tego źródła do tego celu, wraz z interfejsem wyjściowym i preferowanym źródłem. Jeśli wskazuje interfejs fizyczny, przypisanie i trasa są sprzeczne, a pakiet wyjdzie ze źródłem, do którego droga nie potrafi wrócić.

Następnie ip rule show mówi, czy jakakolwiek reguła wybrałaby inną tabelę. Priorytety mają tu znaczenie, bo wygrywa pierwsza pasująca reguła, a reguła przechwytująca wszystko powyżej twojej czyni twoją regułę niewidoczną.

Instaluj regułę polityki tylko wtedy, gdy taki jest projekt

Routing oparty na źródle to świadomy projekt, a nie naprawa dla jednej aplikacji. Jeśli właściciel polityki chce, aby ruch z podsieci tunelu korzystał z tunelu, reguła należy do jego konfiguracji, a nie do jednorazowego polecenia na twoim laptopie.

Działająca forma to osobna tabela z trasą domyślną przez tunel oraz reguła wysyłająca zakres źródłowy VPN do tej tabeli. Dodaj wyjątki, których wymaga projekt, bo tabela zawierająca tylko domyślną trasę tunelu przechwyci cele, które mają pozostać lokalne lub być osiągalne przez ścieżkę fizyczną.

ip route add default dev tun0 table 100
ip rule add from 10.8.0.2 table 100 priority 100
ip route get 203.0.113.10 from 10.8.0.2

Wycofaj to poleceniami ip rule del i ip route flush table 100. Wszystko dodane w ten sposób znika po restarcie, o ile nie zapisze tego menedżer, co jest jednocześnie właściwością bezpieczeństwa i powodem, by nie trzymać jedynej kopii w historii powłoki.

Zweryfikuj trzema obserwacjami

Zapisz źródło, o które poprosiła aplikacja, trasę wybraną przez wyszukiwanie i źródło, które serwer naprawdę zobaczył.

Te trzy mogą się nie zgadzać, a każda niezgodność wskazuje gdzie indziej. Przechwycenie na interfejsie tunelu dowodzi, że pakiet wyszedł z właściwym źródłem. Przechwycenie na interfejsie fizycznym dowodzi, że wyszedł złą drogą. Tylko widok po stronie serwera dowodzi ścieżki od końca do końca.

Jeśli aplikacja oferuje opcję przypisania do urządzenia lub tryb routingu dla poszczególnych aplikacji, traktuj to jako inny mechanizm z innymi ograniczeniami. Podobnie wyglądające ustawienia nie wszystkie prowadzą do tej samej decyzji jądra.

Powiązane artykuły