Pane Krčmáři, díky za pěkný tutoriál. Zarazilo mě tvrzení o rozdílu mezi SNAT a MASQUERADE. Podle manpage nft je rozdíl v tom, že v masquerade se nemusí psát adresa a automaticky se použije adresa odchozího rozhraní. Tabulka aktivních spojení (conntrack) se používá v obou případech stejně, protože je potřeba přepisovat cílovou adresu příchozích paketů.
Máte pravdu, je to pořád stavový NAT, takže lookup v conntrack tabulce se samozřejmě provádí úplně stejně jako u masquerade. Jediné, co se ušetří, je route lookup v okamžiku, kdy se překládá první paket (ten, který způsobí vytvoření položky v conntrack tabulce), protože místo "adresa odchozího rozhraní" by přesněji mělo být "stejná zdrojová adresa, jako by se použila, kdybychom ten paket posílali sami". Pro další pakety už je to pak úplně stejné.
Dá se udělat i bezstavový NAT, ale je to trochu komplikovanější (viz příklad na konci) a je potřeba se pak postarat i o překlad paketů v opačném směru.