Nastavení MSS pro TCP na linuxové bráně IPsec: co to řeší
Malé požadavky fungují a velké odpovědi se zaseknou. Ověřte, zda je pravidlo MSS na vnitřní cestě TCP správná oprava a kde musí být.
Ping funguje, SSH funguje, malá stránka se načte, a pak každá velká odpověď visí, dokud nevyprší časový limit. Klasický vzorec ukazuje na velikost paketu, ne na dostupnost: cesta unese handshake a prvních několik kilobajtů, pak plnohodnotný segment zmizí. Na linuxové bráně IPsec je pravidlo TCP MSS často řešením, ale jen když rozumíte tomu, co mění a kde se paket, kterého se dotýká, skutečně nachází. Pořadí níže sleduje paket od symptomu k umístění pravidla, takže můžete přestat, jakmile vysvětlení přestane sedět.
Symptom, který ukazuje na MSS
TCP si při handshake sjednává maximální velikost segmentu. Pokud je tato hodnota větší, než co cesta po zapouzdření unese, odesílatel dál vytváří segmenty, které nikdy nedorazí, a spojení se po prvním kole zasekne. Malé odpovědi projdou; velké ne.
Zpětná vazba ICMP může spojení zachránit pomocí objevování MTU cesty, a firewall, který tyto zprávy zahazuje, promění zaseknutí v tichou černou díru. Proto stejný tunel funguje pro jednu aplikaci a selhává pro jinou bez zjevného rozdílu v konfiguraci.
Co pravidlo TCPMSS dělá a co ne
Pravidlo přepisuje volbu MSS v handshake paketech TCP, když procházejí. Nenastavuje MTU tunelového rozhraní, nemění politiku IPsec a na současných jádrech pouze snižuje oznámenou hodnotu, místo aby zvyšovalo už menší. Dotýká se také jen TCP; užitečná zatížení UDP, chování DNS a sjednané selektory provozu jsou mimo jeho dosah.
Protože se změna odehrává během handshake, existující spojení navázané před pravidlem si ponechá starou hodnotu. Testujte novým spojením a očekávejte, že první pokus po změně bude ten, který vám něco řekne. Nic v pravidle nedosáhne na spojení, které je už otevřené. Proto oprava použitá uprostřed incidentu může vypadat, jako by neudělala vůbec nic.
Umístěte pravidlo na vnitřní cestu TCP
Na linuxové bráně založené na politikách vypadá předávaný paket pro firewall pořád jako obyčejné TCP. Politika IPsec rozhoduje, že paket bude chráněn; firewall nevidí pro vnitřní tok hlavičku ESP, takže porovnávání s ESP zde popisuje úplně jiný paket. Právě tento nesoulad je důvod, proč některá pravidla vypadají správně a nikdy se neshodují.
V termínech iptables patří pravidlo do tabulky mangle na cestě předávání, omezené na handshake pakety: iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1270. Číslo je příklad, ne univerzální konstanta; odvoďte ho z režie zapouzdření a skutečného MTU cesty. Ekvivalent pro nftables nastavuje maximální velikost segmentu v řetězu forward nebo postrouting.
Držte vnější pravidla pro naslouchání IKE a ESP odděleně od vnitřních pravidel předávání. Jediné pravidlo, které se snaží autorizovat tok aplikace i vnější protokol zároveň, nakonec spolehlivě neodpovídá ani jednomu.
Respektujte vlastníka firewallu a pořadí NAT
Pokud firewall hostitele spravuje UFW, přidejte změny mangle a předávání přes jeho podporovanou trvalou konfiguraci, místo abyste napsali příkaz, který při příštím načtení zmizí. Pravidlo vložené do špatné tabulky nebo za koncové pravidlo nemá žádný účinek a živá tabulka to před vámi skrývá.
Překlad zdroje je samostatné rozhodnutí, které s tímto často souvisí. Výjimka umístěná před obecným pravidlem masquerade brání tomu, aby chráněný provoz ztratil zdroj, který jeho politika vyžaduje; neopravuje problém s velikostí a pravidlo velikosti neopravuje problém s překladem.
Ověřujte úzce, pak přestaňte
Otevřete nové spojení k selhávající službě a sledujte aplikaci i počítadla pravidla. Pokud zaseknutí zmizí, máte důkaz o této cestě TCP s tímto zapouzdřením. Nemáte důkaz, že sedí každý protokol VPN, že je opravená každá aplikace UDP nebo že původní příčinou byla konkrétní služba výše.
Nechte zpětnou vazbu o velikosti přes ICMP fungovat tam, kde to politika dovolí, a k automatickému omezování podle MTU trasy přistupujte opatrně, když vnější cestu IPsec nereprezentuje vnitřní trasa. Čím užší je závěr, tím snazší je diagnostikovat příští incident.