Odpověď odchází přes LAN, ne tunelem: proč a jak
Požadavek přicházející tunelem neznamená, že odpověď odejde stejnou cestou. Linux hledá cíl a místní podsíť obvykle vyhraje.
Služba publikovaná přes bránu funguje z většiny internetu a selhává z jedné kanceláře. Někdo zkontroluje tunel, uvidí přicházet požadavek a usoudí, že odpověď musí jít stejnou cestou zpět. Linux tak nefunguje a žádné zkoumání tunelu na tom nic nezmění. Odpověď se směruje podle cíle a ten jediný nefunkční volající sedí v podsíti, kterou hostitel už dosahuje přímo.
Co skutečně rozhoduje o odchozím paketu
Jádro vyhledá trasu pro cíl paketu, projde pravidla zásad v pořadí priority a poté tabulku, kterou vybere odpovídající pravidlo. Rozhraní, kterým paket přišel, nehraje žádnou roli, pokud k tomu nebylo napsáno pravidlo nebo značka. To je fakt o směrování tohoto hostitele, ne závada tunelu.
Požadavek přijatý tunelem proto může vytvořit odpověď, která odejde fyzickým rozhraním, a tok se stane jednosměrným, aniž by jakékoli zařízení hlásilo chybu. Než uděláte závěr o tunelu, zkontrolujte oba směry. Odpověď, která odejde špatným směrem, zmizí z čítačů tunelu, a proto se oba konce neshodnou, zda bylo něco odesláno. Než se dotknete pravidla, všimněte si, který čítač se pohnul.
Proč vyhrává místní podsíť
Hostitel s adresou v místní síti má v hlavní tabulce připojenou trasu pro tento prefix a připojená trasa je přímá shoda. Když volající přijde ze stejné podsítě, vyhledávání najde místní spojení dřív, než se tunel vůbec zváží.
Právě asymetrie dělá diagnózu matoucí. Volající ze širšího internetu fungují, protože neodpovídají žádné místní trase, zatímco jediný volající, který sdílí kancelářský prefix, selhává, a to je přesně ten volající, se kterým někdo testuje.
Pokrytí peerů není totéž jako nainstalované trasy
Na straně tunelu povolené rozsahy peeru popisují, co se smí posílat do tunelu a které zdroje se z něj přijímají. Nic neříkají o tom, kam místní směrovací tabulka paket pošle.
Pokud nástroj tunelu nainstaluje na hostitele výchozí trasu, může do tunelu zatáhnout nesouvisející provoz jako vedlejší škodu. Tam, kde má rozhodnutí místo toho vlastnit pravidlo zásad, existuje volba instalace tras právě proto, aby tomu nástroj zabránil, a adresy, klíče a nastavení koncového bodu zůstanou přesně tak, jak byly. Výchozí trasa přidaná pro pohodlí je častý způsob, jak hostitel ztratí vlastní místní síť.
Vyberte tabulku podle zdrojové adresy
Pravidlo založené na zdroji posílá odpovědi z adresy služby do soukromé tabulky, jejíž výchozí hodnotou je tunel, zatímco vše ostatní dál používá hlavní tabulku. Vyberte čísla tabulky a priority, která se místně nepoužívají, a před vložením čehokoli si přečtěte existující pravidla. Čtěte živá pravidla, ne uložený soubor, protože se obě mohou po restartu lišit.
ip -6 route add default dev wg0 table 200
ip -6 rule add priority 32000 from 2001:db8:aa::20/128 lookup 200
ip -6 rule add priority 32001 from 2001:db8:aa::20/128 unreachablePoslední řádek způsobí, že chybějící trasa viditelně selže, místo aby se vrátila na místní spojení. Zdroj musí být hostiteli skutečně přidělen a běžná místní a hlavní vyhledávání musí zůstat na svých dřívějších pozicích. Pravidlo vybírá tabulku podle zdroje; neporovnává délky prefixů mezi tabulkami.
Potvrďte cestu, pak službu
Zeptejte se jádra, co by udělalo, místo abyste usuzovali ze zachytávky, s adresou služby jako selektorem zdroje. Špatná odpověď zde ušetří celé trasování paketů.
ip -6 route get 2001:db8:bb::30 from 2001:db8:aa::20Výstup by měl pojmenovat tunel. Potom otestujte zdroj, kterého jste se nedotkli, a potvrďte, že stále jde přes místní spojení, takže změna zůstala omezena na jednu adresu. Širší selektor by o původní stížnosti nic nedokázal.
Co tohle neopraví
Nechte přesměrování, pravidla firewallu a chování ICMPv6 na bráně tak, jak byla, protože trasa podle zdroje nenahrazuje nic z toho. Chybějící zpráva Packet Too Big stále rozbíjí velké odpovědi bez ohledu na to, která tabulka vyhledávání vyhrála. Opravte to před přidáním směrovacích pravidel, jinak příznak změnu přežije.
Před použitím čehokoli z toho potvrďte model publikace. Reverzní proxy, která otevírá vlastní spojení k backendu, představuje vlastní zdroj a nezachovává volajícího, takže v takovém návrhu k této závadě nemůže dojít. Použití pravidla tam by přidalo směrovací výjimku, která nic neřeší a skrývá skutečnou příčinu.
Nakonec zapište čísla pravidel a tabulku do správy konfigurace hostitele. Pravidlo zásad přidané ručně zmizí při příštím přestavění a kancelářský volající se vrátí se stejnou stížností.