Ping przez VPN: dlaczego reguły odpowiedzi echa mijają drogę powrotną
Odpowiedź echa zmienia typ ICMP, a nie port usługi. Prześledź wewnętrzny pakiet przez przekazywanie, NAT i filtr stanowy, zanim otworzysz porty.
Wyślij ping do hosta przez VPN, a żądanie wychodzi z jednym typem ICMP i wraca z innym, co wystarczy, by zdezorientować każdą regułę napisaną w kategoriach portów. W wymianie echa nie ma portu usługi docelowej, który można by skopiować do reguły powrotnej, a filtr oczekujący symetrii odrzuci odpowiedź, podczas gdy żądanie przejdzie bez przeszkód. Naprawa zaczyna się od odczytania pakietu takim, jaki jest naprawdę, a następnie od ustalenia, która granica na ścieżce podejmuje decyzję. Zwykle pracują dwie warstwy, a trzecia po cichu odrzuca odpowiedź. Poniższe sekcje rozdzielają je w kolejności, w jakiej pakiet je napotyka.
Pakiet zmienia typ, nie port
Żądanie echa to ICMP typu 8, kodu 0, i niesie identyfikator oraz numer sekwencji. Odpowiedź to typ 0, kod 0, z tym samym identyfikatorem i sekwencją, a końce IP są zamienione. Te pola definiuje RFC 792, i to właśnie identyfikator pozwala nadawcy dopasować odpowiedzi do własnych żądań.
To, czego brakuje, jest równie ważne: nie ma nagłówka TCP ani UDP, więc nie ma portu do zezwolenia. Reguła, która wskazuje port dla odpowiedzi echa, opisuje pakiet, który nigdy nie powstanie. To najczęstszy błąd w zgłoszeniach ping przez VPN. Reguła wygląda konkretnie, nie dotyczy niczego i zostawia usterkę dokładnie tam, gdzie była.
O pakiecie decydują trzy konteksty
Jeśli ping celuje w hosta w odległej sieci LAN, żądanie musi być przekazane przez bramę. Jeśli celuje w adres należący do samej bramy, kończy się w lokalnej ścieżce wejściowej. Jeśli ping inicjuje sama brama, pakiet zaczyna się w jej własnej ścieżce wyjściowej i w ogóle nie przechodzi przez decyzję przekazywania.
Te trzy konteksty mają różne łańcuchy reguł i różne liczniki, a traktowanie ich jako jednego jest powodem, dla którego „zapora zezwala na ICMP” wciąż może dawać nieudany ping. Zewnętrzny tunel to czwarty kontekst: zezwolenie dla nasłuchu VPN nie zezwala automatycznie na odszyfrowane wewnętrzne żądanie, a wewnętrzne zezwolenie nic nie mówi o tym, czy tunel zewnętrzny jest aktywny.
Filtry stanowe i bezstanowe obsługują odpowiedź inaczej
Zapora stanowa, która widziała wychodzące żądanie, może przypisać odpowiedź do tego przepływu i wpuścić ją bez drugiej reguły. Filtr bezstanowy nie ma takiej pamięci, więc kierunek powrotny potrzebuje własnego wyraźnego zezwolenia, ze zamienionymi źródłem i celem.
Zanim cokolwiek napiszesz, sprawdź, który model produkt rzeczywiście implementuje. Reguła dla żądania echa nie musi obejmować odpowiedzi echa, a produkt śledzący zapytania ICMP wciąż może stosować inną politykę do odpowiedzi przychodzących na inny interfejs.
Ogranicz to, na co zezwalasz. Zezwolenie na każdą odpowiedź echa z dowolnego miejsca nie jest tym samym co dokończenie powiązania stanowego, a numer typu nie uwierzytelnia nadawcy.
Tłumaczenie zmienia też identyfikator
Jeśli tłumaczenie źródła jest zamierzone, krotka na odległym końcu nie odpowiada tej wysłanej przez klienta. NAT może przetłumaczyć identyfikator zapytania ICMP razem z adresami, więc upieranie się przy tym samym numerze po obu stronach tworzy fałszywą niezgodność.
Zamiast tego skoreluj mapowanie raportowane przez translator. Translator, który przepisuje identyfikator, nie zachowa numeru zapisanego przez klienta, więc traktuj mapowanie jako tożsamość, a nie numer. Następnie prześledź jedno rozpoznawalne żądanie przez ścieżkę: potwierdź, że dociera do celu z oczekiwanym źródłem, potwierdź, że cel wysłał odpowiedź, prześledź trasę tej odpowiedzi z powrotem, i potwierdź, że klient ją odebrał, a nie tylko patrzyłeś, jak rośnie licznik bramy.
Nie włączaj błędów ICMP do polityki echa
Komunikat „wymagana fragmentacja”, używany przez wykrywanie MTU ścieżki, nie jest odpowiedzią echa, a jego ładunek cytuje pakiet, który go wywołał. Zezwolenie tylko na echo, które po cichu odrzuca te błędy, zamienia problem rozmiaru w zawieszone połączenie, co jest przeciwieństwem przydatności.
Ta sama ostrożność dotyczy rodzin adresów. ICMPv6 używa innych typów komunikatów i niesie istotne funkcje, których IPv4 nie ma, więc kopiowanie tych numerów do reguły IPv6 jest po prostu błędem.
Gdy wymiana echa działa, przetestuj rzeczywistą aplikację osobno. Udany ping dowodzi drogi tam i z powrotem jednego protokołu, przy jednym rozmiarze, do jednego celu, i nie jest licencją na założenie, że HTTPS, SMB lub jakikolwiek inny przepływ jest dozwolony.