Dostrajanie MSS TCP na bramie Linux IPsec: co to naprawia
Małe żądania działają, a duże odpowiedzi się zawieszają. Sprawdź, czy reguła MSS na wewnętrznej ścieżce TCP jest właściwym rozwiązaniem i gdzie musi się znajdować.
Ping działa, SSH działa, mała strona się ładuje, a potem każda duża odpowiedź wisi, aż upłynie limit czasu. Klasyczny wzorzec wskazuje na rozmiar pakietu, a nie na osiągalność: ścieżka przenosi uścisk dłoni i pierwsze kilkanaście kilobajtów, potem pełnowymiarowy segment znika. Na bramie Linux IPsec reguła TCP MSS często jest rozwiązaniem, ale tylko jeśli rozumiesz, co zmienia i gdzie faktycznie znajduje się pakiet, którego dotyka. Kolejność poniżej śledzi pakiet od objawu do umieszczenia reguły, więc możesz przestać, gdy tylko wyjaśnienie przestanie pasować.
Objaw, który sugeruje MSS
TCP negocjuje maksymalny rozmiar segmentu podczas uścisku dłoni. Jeśli ta wartość jest większa niż to, co ścieżka może przenieść po enkapsulacji, nadawca dalej tworzy segmenty, które nigdy nie docierają, a połączenie zawiesza się po pierwszej rundzie. Małe odpowiedzi się mieszczą; duże nie.
Informacja zwrotna ICMP może uratować połączenie dzięki wykrywaniu MTU ścieżki, a zapora, która odrzuca te komunikaty, zamienia zawieszenie w cichą czarną dziurę. Dlatego ten sam tunel działa dla jednej aplikacji, a zawodzi dla innej bez żadnej widocznej różnicy w konfiguracji.
Co robi reguła TCPMSS, a czego nie robi
Reguła przepisuje opcję MSS w pakietach uścisku dłoni TCP, gdy przechodzą. Nie ustawia MTU interfejsu tunelu, nie zmienia polityki IPsec, a na obecnych jądrach tylko obniża ogłoszoną wartość, zamiast podnosić już mniejszą. Dotyka też wyłącznie TCP; ładunki UDP, zachowanie DNS i wynegocjowane selektory ruchu są poza jej zasięgiem.
Ponieważ zmiana następuje podczas uścisku dłoni, istniejące połączenie nawiązane przed regułą zachowuje starą wartość. Testuj nowym połączeniem i oczekuj, że pierwsza próba po zmianie będzie tą, która coś ci powie. Nic w regule nie dociera do połączenia, które jest już otwarte. Dlatego poprawka zastosowana w środku incydentu może wyglądać, jakby nie zrobiła zupełnie nic.
Umieść regułę na wewnętrznej ścieżce TCP
Na bramie Linux opartej na politykach przekazywany pakiet nadal wygląda jak zwykły TCP, gdy widzi go zapora. Polityka IPsec decyduje, że pakiet będzie chroniony; zapora nie widzi nagłówka ESP dla przepływu wewnętrznego, więc dopasowanie do ESP opisuje tutaj zupełnie inny pakiet. Ta niezgodność jest powodem, dla którego niektóre reguły wyglądają poprawnie i nigdy nie pasują.
W terminach iptables reguła należy do tabeli mangle na ścieżce przekazywania, ograniczona do pakietów uścisku dłoni: iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1270. Liczba jest przykładem, a nie uniwersalną stałą; wyprowadź ją z narzutu enkapsulacji i rzeczywistego MTU ścieżki. Odpowiednik nftables ustawia maksymalny rozmiar segmentu w łańcuchu forward lub postrouting.
Trzymaj zewnętrzne reguły nasłuchu dla IKE i ESP oddzielnie od wewnętrznych reguł przekazywania. Jedna reguła, która próbuje autoryzować zarówno przepływ aplikacji, jak i protokół zewnętrzny, ostatecznie nie pasuje niezawodnie do żadnego z nich.
Szanuj właściciela zapory i kolejność NAT
Jeśli UFW zarządza zaporą hosta, dodawaj zmiany mangle i przekazywania przez jego obsługiwaną trwałą konfigurację, zamiast wpisywać polecenie, które zniknie przy następnym przeładowaniu. Reguła wstawiona do niewłaściwej tabeli lub po regule końcowej nie ma żadnego efektu, a aktywna tabela to przed tobą ukrywa.
Tłumaczenie źródła to osobna decyzja, która często współgra z tą. Wyjątek umieszczony przed ogólną regułą masquerade nie pozwala chronionemu ruchowi utracić źródła wymaganego przez jego politykę; nie naprawia problemu rozmiaru, a reguła rozmiaru nie naprawia problemu tłumaczenia.
Weryfikuj wąsko, a potem przestań
Otwórz nowe połączenie do usługi, która zawodzi, i obserwuj zarówno aplikację, jak i liczniki reguły. Jeśli zawieszenie ustąpi, masz dowód dotyczący tej ścieżki TCP z tą enkapsulacją. Nie masz dowodu, że pasuje każdy protokół VPN, że naprawiono każdą aplikację UDP ani że konkretna usługa wyżej była pierwotną przyczyną.
Pozwól, by informacja zwrotna o rozmiarze ICMP działała tam, gdzie polityka na to pozwala, i ostrożnie traktuj automatyczne ograniczanie oparte na MTU trasy, gdy zewnętrzna ścieżka IPsec nie jest odwzorowana przez trasę wewnętrzną. Im węższy wniosek, tym łatwiej zdiagnozować następny incydent.