Jedna /24 dla drukarki laboratoryjnej znika między dwoma wywołaniami ip route show, a dziennik klienta mówi tylko, że sieć się zmieniła. Nic nie było nie tak z poleceniem, prefiksem ani Twoimi uprawnieniami. Korporacyjny klient, który posiada model routingu hosta, ponownie narzuca ten model za każdym razem, gdy ktoś inny go edytuje, więc dodany przez Ciebie wpis jest usuwany jako intruz. Walka z nim w tej samej tabeli to przegrana pozycja. Rozwiązaniem jest całkowite zaprzestanie rywalizacji o tę tabelę i umieszczenie wyjątku tam, gdzie monitor nigdy nie zagląda.

Monitor wyjaśnia brakującą trasę

Pokaż to, zanim cokolwiek przeprojektujesz: odczytaj tabelę, dodaj prefiks, odczekaj kilka sekund, odczytaj ponownie. Jeśli wpisu nie ma, a nic nie wpisałeś, aby go usunąć, czuwa jakiś agent. Znajdź proces, który odpowiada za to zachowanie, i przeczytaj jego dziennik wokół momentu, w którym trasa znika, ponieważ ta sama usługa zwykle utrzymuje tunel, filtry pakietów i konfigurację resolvera. Zabicie go, aby trasa została, to wymiana, której pożałujesz przy następnym ponownym połączeniu.

ip route show
ip route add 192.168.2.0/24 dev enp0s31f6
sleep 5; ip route show

Prefiks i interfejs powyżej to placeholdery. Kopiowanie nazwy interfejsu z działającego przykładu na innej maszynie to najczęstszy powód, dla którego ta demonstracja nie daje zupełnie nic.

Druga tabela jest niewidoczna dla monitora

Agent odbudowuje tylko tabelę, którą posiada. Daj wyjątkowi własną tabelę oraz regułę, która wysyła do niej pasujące cele, a główna tabela nigdy się nie zmienia, więc agent nie ma czego poprawiać. To cała idea: jedna przestrzeń nazw tras utrzymywana przez kogoś innego i druga, której dotykasz tylko Ty.

Wymianą jest utrzymanie. Dwa obiekty mogą się rozjechać, a pozycja reguły na liście ma takie samo znaczenie jak trasa w tabeli, którą wybiera.

Zbuduj wyjątek, a potem spraw, by wygrał

Utwórz tabelę, zainstaluj trasę i dodaj regułę, która wybiera tabelę dla tego celu. Priorytet decyduje, czy Twoja reguła jest sprawdzana przed regułami wstawionymi przez klienta, czy po nich, a reguła sortowana później nigdy nie jest osiągana, więc liczba jest częścią projektu, a nie ozdobą. Następnie zapytaj jądro, co naprawdę by zrobiło, co jest innym pytaniem niż to, co skonfigurowałeś.

ip rule add to 192.168.2.0/24 table 110 pref 30010
ip route add 192.168.2.0/24 dev enp0s31f6 table 110
ip route get 192.168.2.50

ip route get rozwiązuje trasę, której użyłoby jądro, wraz z urządzeniem i adresem źródłowym. Nie wypisuje identyfikatora tabeli, więc połącz je z ip rule show, gdy musisz potwierdzić, która tabela wygrała. Razem odpowiadają na jedyne ważne pytanie: czy ruch do tego adresu wychodzi tam, gdzie zamierzałeś?

Inne formy tej samej idei

Wzorzec uogólnia się, gdy przestajesz myśleć celami. Lokalna podsieć może pozostać osiągalna, podczas gdy tunel zachowuje trasę domyślną. Odpowiedzi z serwera SSH podłączonego do sieci LAN mogą wychodzić przez interfejs, którym przyszły, zamiast znikać w tunelu. A reguła oparta na interfejsie może wepchnąć do tunelu wszystko, co przychodzi przez interfejs bezprzewodowy, podczas gdy ruch generowany przez sam host pozostaje w Ethernet:

ip rule add iif wlan0 table 10
ip route add default dev tun0 table 10

Ten ostatni przypadek dopasowuje interfejs wejściowy, a nie cel, co jest innym typem reguły i innym modelem myślowym. Ruch przekazywany dalej wymaga też włączonego net.ipv4.ip_forward, a drugi koniec musi odesłać zakres źródłowy z powrotem lub go przetłumaczyć; reguła na jednej maszynie nigdy nie tworzy drugiej połowy ścieżki.

Traktuj regułę jako jednorazową

Reguły i trasy tabel żyją w pamięci. Po ponownym połączeniu urządzenie tunelu może zostać przemianowane, przypisany adres może się przesunąć, a reguła ze starą wartością po cichu przestaje pasować. Zastosuj całą zmianę ponownie z jednego skryptu, który nią zarządza, a następnie ponownie sprawdź ip rule show, bieżącą nazwę urządzenia i świeży ip route get wobec rzeczywistego celu, zanim zaufasz wyjątkowi.

Dwie granice przetrwają każdą staranność. Klient nadal kontroluje własne reguły filtrowania i konfigurację resolvera, a wyjątek routingu nie zastępuje żadnej z nich. Jeśli klient usunie także Twoją regułę polityki, obsługiwanymi drogami są jego własna polityka tunelu dzielonego lub klient, który pozwala zarządzać trasami, na przykład OpenConnect; łatanie binarnego pliku dostawcy, aby uciszyć jego monitor, to zobowiązanie utrzymaniowe z dołączoną kontrolą integralności.

Zapisz numer tabeli, priorytet i cel w notatce obok skryptu. Inaczej następna osoba znajdzie regułę, która nadrzędnie steruje tunelem, i nie będzie miała jak dowiedzieć się dlaczego.

Powiązane artykuły