Zveřejněte službu LAN na vlastní adrese brány VPN
Projděte přesměrovaný port od klienta k zařízení a zpět: vymezte překlad cíle, potom rozhodněte, zda se odpovědi směrují, nebo překládají.
Zveřejnit zařízení LAN na jedné z vlastních adres tunelu brány vyžaduje jediný řádek NAT. Spojení přesto selhává, protože zařízení, které odpovídá, netuší, že adresa klienta je přes tuto bránu dostupná. Projděte paket od klienta dovnitř, potom projděte odpověď zpět ven a chybějící polovina se ukáže.
Začněte z pohledu klienta
Klient v tomto příkladu sídlí ve fondu VPN 10.62.0.0/24 a připojuje se k 10.62.0.1 na portu 8080. Tato adresa patří samotné bráně, takže paket dorazí do jádra brány, a ne k jinému protějšku. Za bránou je síť LAN 172.21.4.0/24. Brána drží 172.21.4.10 a zařízení, které skutečně obsluhuje HTTP, je 172.21.4.40.
Adresa, která patří jinému protějšku VPN, není zaměnitelná s adresou služby brány. Pokud se klient připojuje k adrese protějšku, žádné pravidlo brány do hry nevstupuje a celý tento průchod je špatný případ.
Vymezte překlad cíle záměrně
Úzká verze zveřejňuje jeden port a přepisuje jen cíl. Paket si zachovává protokol i zdroj, a právě to dělá zbytek průchodu zajímavým.
iptables -t nat -A PREROUTING -i tun0 -s 10.62.0.0/24 -d 10.62.0.1 -p tcp --dport 8080 -j DNAT --to-destination 172.21.4.40:80
Pravidlo bez kritérií protokolu a portu je široká verze: zachová jakýkoli port, který klient zvolil, a mění pouze adresu. To je legitimní, když se má zveřejnit celý hostitel, a chybné, když byl záměrem jediná služba. Přečtěte pravidlo zpět a potvrďte název rozhraní. Pravidlo DNAT na špatném rozhraní neodpovídá ničemu, což dává stejný časový limit jako chybějící pravidlo a ztrácí hodinu hleděním na zařízení.
Ať se hranice přesměrování shodne
Překlad mění hlavičku, ale nedává oprávnění. Při výchozí politice zahazování potřebuje přesměrovaný tok vlastní povolení a zpětný směr potřebuje pravidlo pro navázané spojení, které vaše politika pravděpodobně už má.
iptables -A FORWARD -i tun0 -o lan0 -d 172.21.4.40 -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Bezpodmínečné povolení pro každý tok DNAT je širší než tento návrh a umožní i mapování, která později přidá někdo jiný. Pojmenujte cíl a port a zbytek nechte zavřený. Pokud počítadla na pravidle přesměrování zůstávají na nule, zatímco počítadla NAT rostou, paket se zahazuje před vaším pravidlem. Čtěte pořadí řetězců, místo abyste přidávali druhou kopii.
Zařízení musí nějak odpovědět
Po překladu zařízení vidí zdroj v 10.62.0.0/24. Jeho odpověď jde na výchozí bránu, kterou je směrovač sítě LAN, nikoli brána VPN, pokud mu něco neřekne jinak. Dvě uspořádání to řeší a nejsou rovnocenná. Trasa na zařízení nebo na směrovači LAN posílá 10.62.0.0/24 na 172.21.4.10 a zachovává zdroj klienta. Omezený překlad zdroje místo toho schová klienta za adresu brány v síti LAN.
ip route add 10.62.0.0/24 via 172.21.4.10 dev eth1
iptables -t nat -A POSTROUTING -s 10.62.0.0/24 -d 172.21.4.40 -o lan0 -p tcp --dport 80 -j SNAT --to-source 172.21.4.10
Vyberte podle toho, co služba potřebuje. Politika pro jednotlivé klienty a smysluplné záznamy chtějí směrovanou podobu; zařízení, kterému nelze dát trasu, nebo služba, která prostě musí vidět adresu LAN, ukazují na přeloženou podobu. Nesahajte po globálním pravidle masquerade, aby fungovala jediná odpověď. Skryje každého klienta před každým cílem a tiše rozbíjí politiky, které závisí na zdrojových adresách.
Netestujte ze samotné brány
Požadavek vytvořený na bráně na 10.62.0.1 vychází řetězcem OUTPUT, nikoli vstupním PREROUTING. Jeho selhání nebo úspěch neříká nic o pravidle obráceném ke klientovi, a právě tak lidé usoudí, že funkční pravidlo je rozbité.
conntrack -L | grep 172.21.4.40
tcpdump -ni any 'port 8080 or port 80'
Spusťte skutečný klientský požadavek a přečtěte obojí. Záznam conntrack ukazuje použitý překlad a zachycená data ukazují, zda požadavek přešel do sítě LAN a zda se odpověď vrátila k tunelu. Po změně pravidel použijte nové spojení, protože existující stav si drží dřívější mapování a bude dál selhávat postaru. Potom potvrďte celou konverzaci: adresa zařízení, povolení přesměrování i trasa odpovědi popisují stejný tok.