NAT

Asymetrická cesta

Jak SNAT tak DNAT v Linuxu s pomocí conntracku závisí na tom, že přes Linux, který NAT provádí, prochází oba směry komunikace, protože v obou případech dochází k jednomu překladu adresy v jednom směru a k inverznímu překladu v druhém směru. Dejme tomu, že toto pravidlo nebude splněno pro DNAT, protože server ve vnitřní síti 192.168.1.10 bude mít default GW směřující do Internetu přes jiný router 192.168.1.254. Pokud bude tento router také Linux a dejme tomu, že bude mít nastaven SNAT pro packety z vnitřní sítě, podobně jako v předcházejícím odstavci. Pro TCP tento router stejně žádný SNAT neudělá, protože neuvidí začátek spojení - TCP segment s flagem SYN=1 a spojení bude tedy rovnou ve stavu invalid.

DNAT asymetric routing 1

Dejme tomu, že ale bude provoz UDP nebo zkrátka z nějakého důvodu přes NAT na routeru 192.168.1.254 projde. Výsledkem bude jen to, že k původnímu odesílateli požadavku 217.31.205.25 dojde odpověď z jiné adresy, než na kterou poslal požadavek a proto bude odpověď zahozena, protože nebude odpovídat žádnému spojení nebo socketu, jak ukazuje následující obrázek.

DNAT asymetric routing 2

Toto pravidlo je obecné: Pokud máme Linuxový router se stavovým firewallem, musíme zajistit, aby přes něj chodily oba směry provozu, jinak nebude conntrack fungovat.

Mimochodem: K NATu může dojít víckrát za sebou na více různých routerech v cestě. Zkuste si to rozmyslet, že normálnímu spojení od klienta k serveru a odpovědím nazpět to vůbec nevadí. Jen je potřeba mít stále na paměti, že nesmí nastat asymetrická cesta a že tedy odpovědi musí jít zpět vždy přes ty samé NATující routery, jako dotazy.