Zverejnenie služby LAN na vlastnej adrese brány VPN
Prejdite presmerovaný port od klienta k zariadeniu a späť: vymedzte preklad cieľa, potom rozhodnite, či sa odpovede smerujú alebo prekladajú.
Zverejniť zariadenie LAN na jednej z vlastných tunelových adries brány vyžaduje jediný riadok NAT. Spojenie predsa zlyháva, pretože zariadenie, ktoré odpovedá, netuší, že adresa klienta je cez túto bránu dostupná. Prejdite paket od klienta dovnútra, potom prejdite odpoveď späť von, a chýbajúca polovica sa ukáže.
Začnite z pohľadu klienta
Klient v tomto príklade sídli vo fonde VPN 10.62.0.0/24 a pripája sa k 10.62.0.1 na porte 8080. Táto adresa patrí samotnej bráne, takže paket dorazí do jadra brány a nie k inému partnerovi. Za bránou je sieť LAN 172.21.4.0/24. Brána drží 172.21.4.10 a zariadenie, ktoré skutočne obsluhuje HTTP, je 172.21.4.40.
Adresa, ktorá patrí inému partnerovi VPN, nie je zameniteľná s adresou služby brány. Ak sa klient pripája k adrese partnera, žiadne pravidlo brány do hry nevstupuje a celý tento prechod je nesprávny prípad.
Vymedzte preklad cieľa zámerne
Úzka verzia zverejňuje jeden port a prepisuje len cieľ. Paket si zachováva protokol a zdroj, a práve to robí zvyšok prechodu zaují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á verzia: zachová akýkoľvek port, ktorý klient zvolil, a mení iba adresu. To je legitímne, keď sa má zverejniť celý hostiteľ, a nesprávne, keď bol zámerom jediná služba. Prečítajte pravidlo späť a potvrďte názov rozhrania. Pravidlo DNAT na nesprávnom rozhraní nezodpovedá ničomu, čo dáva rovnaký časový limit ako chýbajúce pravidlo a stráca hodinu hľadením na zariadenie.
Nech sa hranica presmerovania zhodne
Preklad mení hlavičku, ale nedáva oprávnenie. Pri predvolenej politike zahadzovania potrebuje presmerovaný tok vlastné povolenie a spätný smer potrebuje pravidlo pre nadviazané spojenie, ktoré vaša politika pravdepodobne 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
Bezpodmienečné povolenie pre každý tok DNAT je širšie než tento návrh a umožní aj mapovania, ktoré neskôr pridá niekto iný. Pomenujte cieľ a port a zvyšok nechajte zavretý. Ak počítadlá na pravidle presmerovania zostávajú na nule, kým počítadlá NAT rastú, paket sa zahadzuje pred vaším pravidlom. Čítajte poradie reťazcov, namiesto pridávania druhej kópie.
Zariadenie musí nejako odpovedať
Po preklade zariadenie vidí zdroj v 10.62.0.0/24. Jeho odpoveď ide na predvolenú bránu, ktorou je smerovač siete LAN, nie brána VPN, ak mu niečo nepovie inak. Dve usporiadania to riešia a nie sú rovnocenné. Trasa na zariadení alebo na smerovači LAN posiela 10.62.0.0/24 na 172.21.4.10 a zachováva zdroj klienta. Obmedzený preklad zdroja naopak skryje klienta za adresou LAN brány.
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 podľa toho, čo služba potrebuje. Politika pre jednotlivých klientov a zmysluplné záznamy chcú smerovanú podobu; zariadenie, ktorému nemožno dať trasu, alebo služba, ktorá jednoducho musí vidieť adresu LAN, ukazujú na preloženú podobu. Nesiahajte po globálnom pravidle masquerade, aby jediná odpoveď fungovala. Skryje každého klienta pred každým cieľom a potichu rozbíja politiky, ktoré závisia od zdrojových adries.
Netestujte z tej istej brány
Požiadavka vytvorená na bráne na 10.62.0.1 vychádza cez reťazec OUTPUT, nie cez vstupný PREROUTING. Jej zlyhanie alebo úspech nehovorí nič o pravidle obrátenom ku klientovi, a práve tak ľudia usúdia, že funkčné pravidlo je pokazené.
conntrack -L | grep 172.21.4.40
tcpdump -ni any 'port 8080 or port 80'
Spustite skutočnú klientsku požiadavku a prečítajte oboje. Záznam conntrack ukazuje použitý preklad a zachytené údaje ukazujú, či požiadavka prešla do siete LAN a či sa odpoveď vrátila k tunelu. Po zmene pravidiel použite nové spojenie, pretože existujúci stav si drží skoršie mapovanie a bude ďalej zlyhávať postarom. Potom potvrďte celú konverzáciu: adresa zariadenia, povolenie presmerovania a trasa odpovede opisujú ten istý tok.