eth0:0 je označení, ne zařízení: opravte shodu SNAT
Nulový čítač znamená, že pravidlo pojmenovává rozhraní, které nemůže existovat. Přečtěte si skutečné zařízení, opravte shodu -o a potom vědomě zvolte přeloženou adresu.
Pravidlo NAT, které mělo jednomu poolu klientů VPN dát jeho vlastní veřejnou adresu, stojí na nule paketů, zatímco stejný pool dál vychází pod špatným zdrojem. Pravidlo obvykle nechybuje v adrese; chybuje v rozhraní. -o eth0:0 odkazuje na zařízení, které neexistuje, protože eth0:0 je označení připojené k adrese a zařízením této adresy je eth0. Sledování čítačů je nejrychlejší způsob, jak to potvrdit, a oprava je menší, než vyšetřování naznačuje.
Zkontrolujte, jak jádro zařízení nazývá
Přečtěte si oba pohledy odděleně, než cokoli změníte:
ip link show
ip address show dev eth0
ip route get 203.0.113.20
Výpis odkazů zobrazuje rozhraní. Výpis adres může zobrazit druhou adresu IPv4 nesoucí označení: eth0:0, a zařízením této adresy je stále eth0. Manuál adres iproute2 považuje označení za název adresy, ne za druhý odkaz, a na tomto rozlišení stojí celý problém.
Historie vysvětluje zmatek. Stará syntaxe ifconfig eth0:0 skutečně vypadala jako nové rozhraní a skripty z té doby na něj dodnes odkazují. V současném systému je alias označení na adrese a nic v cestě směrování ani netfilter s ním nezachází jako se samostatným výstupním bodem.
Zkontrolujte, na co pravidlo skutečně dosáhlo
Čtěte čítače spolu s výpisem pravidel, ne z paměti:
iptables -t nat -L POSTROUTING -v -n --line-numbers
Pravidlo, jehož čítač paketů zůstává na nule, zatímco prochází odpovídající provoz, se nevyhodnocuje, a podmínka výstupního rozhraní, která uvádí eth0:0 je častou příčinou. Výstupní zařízení vybrané trasou je eth0, takže podmínka hledající jiné jméno nikdy neplatí, ať jádro vybralo jakoukoli zdrojovou adresu.
Změňte podmínku na skutečné zařízení a označení nechte stranou. Pokud potřebujete rozlišit dva pooly klientů, které to zařízení sdílejí, rozlišujte je podle prefixu zdroje, ne podle názvu rozhraní, které nemůže existovat. Dvě pravidla s nepřekrývajícími se -s shodami jsou čitelná a testovatelná; jedno pravidlo s vymyšleným zařízením není ani jedno. Dejte každému pravidlu komentář s názvem poolu, protože za půl roku samotný prefix nikomu neřekne, proč tam je.
Zkontrolujte trasu, která zařízení vybrala
Postrouting NAT běží poté, co trasa už vybrala výstupní rozhraní, takže rozhraní v pravidle musí být to, které trasa vybrala. Zeptejte se jádra přímo pomocí ip route get na reprezentativní adresu klienta a přečtěte si zařízení i zdroj, který hlásí.
Pokud odpověď uvádí eth0, je část s rozhraním vyřešená. Pokud uvádí tunelové zařízení, paket se k pravidlu, které upravujete, nikdy nedostane a hledání se přesune k směrovací tabulce a jejím prioritám. Pravidlo, které nikdy neodpovídá, protože paket odešel jinam, vypadá ve výstupu čítačů stejně jako pravidlo s překlepy v zařízení. Než cokoli upravíte, potvrďte, který z těch dvou případů máte, protože druhý vyžaduje změnu směrování, ne textu.
Zvolte přeložený zdroj vědomě
Když je zařízení správné, je zdrojová adresa samostatné rozhodnutí. Toto je ilustrativní pool IPv4 a pouze ukázková adresa:
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
-j SNAT --to-source 203.0.113.20
Zapsání adresy do --to-source nezpůsobí, že ji někdo bude směrovat zpět k vám. Poskytovatel výše nebo vlastník adresy musí doručovat odpovědi pro tuto adresu na tento hostitel a adresa musí být taková, kterou jste oprávněni používat. Pokud není, pravidlo bude odpovídat a překládat a odpovědi přesto půjdou jinam.
Změna zdrojové adresy není totéž jako změna přípojky. Když je skutečným požadavkem jiná fyzická cesta, musí směrovací politika nejprve zvolit tuto cestu; SNAT pak přepíše zdroj na zařízení, které politika zvolila. Přidání dalších označení k eth0 neposkytne ani trasu, ani oprávnění.
Ověřte to na připojení, které jste právě otevřeli
Otevřete nové klientské připojení místo opětovného použití existujícího. Sledování připojení si drží překlad zaznamenaný při začátku toku, takže stará relace může dál používat předchozí zdrojovou adresu a nechat správné nové pravidlo vypadat rozbité. Sledujte, jak čítač roste, a potom pozorujte přeložený zdroj na drátě nebo na vzdáleném konci.
Pro několik poolů sdílejících jedno rozhraní dejte každému výslovnou shodu zdroje a vlastní překladovou adresu, držte je ve spravované konfiguraci firewallu a poznamenejte pořadí, v jakém se vyhodnocují. Potom si zaznamenejte, co jste ověřili: zařízení z ip route get, čítač, který se pohnul, a zdroj, který vzdálená strana viděla. Takový záznam odpoví na příští hlášení, aniž by se opakovalo zmatení s aliasem.