Przekierowania ICMP a trasy VPN: co naprawdę się zmienia
Przekierowanie to sugestia routera, a nie zmiana trasy. To, czy host jej posłucha, zależy od polityki na interfejs, która różni się między IPv4 i IPv6.
Przepływ, który powinien przejść przez tunel, wybiera inny następny skok, a ktoś znajduje przekierowanie ICMP w przechwyconym ruchu. To hipoteza, nie diagnoza. Przekierowanie to sugestia routera dotycząca lepszego następnego skoku, a to, czy host na nią zareaguje, zależy od ustawień, które różnią się w zależności od platformy, interfejsu i rodziny adresów.
Przekierowanie to sugestia od routera
Przekierowania ICMP IPv4 mają własny typ komunikatu i wąski zestaw warunków: router wysyła pakiet przez ten interfejs, którym przyszedł, i zna na tym samym łączu następny skok bliższy celowi. Następnie mówi nadawcy, aby użył tego skoku bezpośrednio. Komunikat podaje nową bramę i zawiera część oryginalnego pakietu, aby nadawca mógł go dopasować do przepływu. To uprzejmy komunikat o lokalnej topologii i zakłada, że nadawca dzieli łącze z sugerowaną bramą.
Nadawca może go zignorować. Protokół nie wymaga, aby host zmieniał swoją tablicę, a przechwycone przekierowanie dowodzi tylko, że router je wysłał.
Właśnie na tym rozróżnieniu myli się większość dochodzeń dotyczących przekierowań.
IPv4 i IPv6 dostarczają je inaczej
IPv6 ma analogiczny mechanizm w wykrywaniu sąsiadów, a nie w ICMPv4, z innymi formatami komunikatów i innymi regułami walidacji. Pojęcia się rymują, pakiety nie. Filtr przechwytywania napisany dla typu ICMP 5 nic nie pokaże w sieci IPv6, co czasem bywa czytane jako dowód, że żadne przekierowanie nie wystąpiło.
Parametry polityki też są osobne, więc host może akceptować przekierowania IPv4 i ignorować IPv6, albo odwrotnie.
Sprawdź obie rodziny, jeśli dany przepływ może używać którejkolwiek.
Akceptacja to polityka hosta, nie fakt sieci
W Linuksie akceptacja przekierowań jest kontrolowana na interfejs i globalnie, a wartości domyślne różnią się między rolą hosta i routera. Interfejs tunelu, który akceptuje przekierowania, to dziwny projekt, bo w tunelu punkt-do-punkt nie ma sensownego alternatywnego następnego skoku na tym samym łączu. Dlatego to ustawienie warto przeczytać, a nie zakładać.
Ustawienia bezpiecznych przekierowań dodatkowo ograniczają, którym bramom można wierzyć.
Jeśli zaostrzasz hosta, to właśnie te parametry trzeba przejrzeć, i one są też powodem, dla którego dwie maszyny w tej samej sieci mogą zachowywać się różnie. Zmieniaj je jako politykę, a nie jako skrót do debugowania.
Czego przekierowanie nie wyjaśni
Konkretne trasy, reguły routingu politycznego i lokalne interfejsy wyjaśniają większość nieoczekiwanych ścieżek bez żadnego przekierowania. Bardziej konkretny prefiks, reguła pasująca do adresu źródłowego albo druga trasa domyślna w innej tablicy każdy z nich nadpisze trasę, której oczekiwałeś. Sprawdź je najpierw, bo są deterministyczne i widoczne.
Nieaktualne przechwycenie to druga pułapka, bo klient, który zmienił sieć, ma inną lokalną bramę.
Stare przekierowanie z poprzedniego połączenia nic nie wyjaśnia o obecnej ścieżce, więc zapisz, który interfejs odbiera teraz ruch kontrolny.
Sprawdź trasę, zanim obwinisz tunel
Zapytaj jądro, której trasy użyłoby dla celu, a potem porównaj ją z tablicą, którą miałeś na myśli. Jeśli odpowiedź zgadza się z tablicą, żadne przekierowanie niczego nie zmieniło i dochodzenie należy gdzie indziej. Jeśli się nie zgadza, zanim uznasz, że winny jest tunel, poszukaj buforowanego przekierowania, reguły polityki albo drugiej tablicy. Wyszukanie trasy jest prawdą, a wszystko inne to opowieść o tym, jak do tego doszło.
Przekierowanie nigdy nie powinno być powodem, dla którego chroniona ścieżka po cichu staje się niechroniona, dlatego polityka akceptacji należy do przeglądu projektu. Definicja w RFC 792 pozostaje odniesieniem do tego, co może powiedzieć komunikat IPv4.
Zapisz razem wynik wyszukania trasy i znacznik czasu przechwycenia, a następna osoba odtworzy twój wniosek.