Pordi edastamine NAT-i taga olevale WireGuard-peerile: DNAT pluss SNAT
DNAT toimetab päringu kohale, aga vastus lahkub valelt aadressilt. Lisage sobiv SNAT-reegel ja asetage mõlemad pärast tunneli seadistamist.
Brauser pärib https://203.0.113.10:8443, puhverserver võtab ühenduse vastu ja WireGuard-peeri teenus ei vasta kunagi. DNAT-reegel teeb oma tööd; ebaõnnestub vastuse osa. Jälgige paketti mõlema tõlke kaudu ja puuduv reegel muutub ilmseks. Parandus on üks täiendav NAT-lause õiges hookis, mitte uus tunnel.
Jälgige üht päringut algusest lõpuni
Päring saabub puhverserveri avalikule liidesele, allikaks kliendi avalik aadress ja sihtkohaks puhverserveri aadress. Jaotises nat PREROUTING kirjutab DNAT-reegel sihtkoha ümber peeri tunneli aadressiks, 10.90.0.2. Seejärel saadab marsruutimisotsus paketi välja läbi wg0 ja edastustee on täielik.
Peeril kannab pakett nüüd algset avalikku allikaaadressi, sest miski ei ole seda ümber kirjutanud. Teenus võtab ühenduse vastu ja saadab oma vastuse oma vaikimisi lüüsile, milleks on peeri ees olev koduruuter. Sellel ruuteril pole olekut voo jaoks, mida ta kunagi ei näinud, ja see kas viskab paketi ära või tõlgib selle oma avalikuks aadressiks, mida klient ei aktsepteeri.
Asümmeetria on kogu probleem: päring läheb puhverserveri kaudu ja vastus üritab minna otse. Puhverserveri ühenduste jälgimine aitab ainult siis, kui vastus tuleb tagasi puhverserveri kaudu, ja sinna ei saa see tagasi tulla, kuni allikaaadress osutab veel algsele kliendile.
Lisage tagasitõlge
Kirjutage edastatava voo allikas ümber puhverserveri tunneli aadressiks, enne kui see peeri poole lahkub. Seejärel vastab teenus aadressile 10.90.0.1, puhverserver võtab selle vastu ja ühenduste jälgimine pöörab mõlemad tõlked tagasi, enne kui pakett kliendile naaseb.
iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1POSTROUTING-reegel on teadlikult kitsas: see sobib tõlgitud sihtkoha ja tunneli liidesega, seega ei kirjuta ümber kõrvalist liiklust, mis juhtumisi wg0 kaudu väljub. Lai masquerade-reegel varjaks samuti kliendi aadressi, kuid teeks seda iga voo puhul ja muudaks NAT-tabeli auditeerimise raskemaks.
Asetage reeglid sinna, kus tunnel eksisteerib
Reeglid, mis viitavad tunneli aadressile või liidesele, peavad käivituma pärast seda, kui wg-quick on selle seadistanud. Liides luuakse enne PreUp-i, kuid aadressid, MTU, DNS ja marsruudid rakendatakse hiljem ning PostUp käivitub, kui kõik see on paigas. Pange lisamised PostUp-i ja kustutamised PreDown-i.
PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PreDown = iptables -t nat -D POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1Kustutused peavad vastama lisamistele token-tokeni haaval, sealhulgas multiport- ja liidese-vasted. Kustutus, mis erineb ühe vastena, ei eemalda midagi ja järgmine taasühendus lisab reegli teise koopia. Pärast mõnda taasühendust sisaldab tabel duplikaate, mida on raske konfiguratsioonireale omistada.
Kontrollige tulemust iptables -t nat -S abil pärast taasühendust. Kui sama reegel ilmub kaks korda, ei vasta PreDown-rida ja puhastamine ebaõnnestub vaikselt.
Edastamine, filtreerimine ja teine NAT
Lubage IPv4-edastus püsivalt ja seejärel lubage edastatav voog filtrite tabelis. DNAT toimub enne FORWARD-ahelat, seega sobib filtrireegel tõlgitud sihtkohaga, mitte avaliku aadressiga. Kui UFW haldab tulemüüri, väljendage luba marsruudireeglina; tavaline hostireegel ei kata edastatavat liiklust.
Veel kaks NAT-kihti võivad tee ikka katki teha, isegi kui puhverserveri reeglid on õiged. Koduses ühenduses kuulub avalik aadress ruuterile ja selle tulemüüris pordi avamine ei ole sama, mis pordiedastuse kirje loomine, mis saadab selle pordi puhverserverile. Port, mis tundub väljast avatud, samal ajal kui miski ei vasta, jääb sageli just sellest vastendusest ilma.
NAT-VPS-is vastendab teenusepakkuja avaliku pordi privaatsele aadressile. Vastendus peab ühtima pordiga, mida te kuulutate, ja lahknevus näeb välja täpselt nagu katkine tunnel. Kinnitage teenusepakkuja vastendus enne WireGuardi konfiguratsiooni muutmist.
Kontrollige tagasiteed ja nõustuge kuluga
Ühenduge võrgust, mis ei ole puhverserveri LAN, ja seejärel uurige tõlkepaari, kui ühendus on avatud:
conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080conntrack-kirje peaks näitama algset korteeži, tõlgitud korteeži ja vastuse suunda. Kui vastus puudub, ei saada peer tunnelist, mis tavaliselt tähendab, et SNAT-reegel ei rakendunud või peeri enda tulemüür viskas voo ära.
Taaskäivitage üks kord, et tõestada, et PostUp rakendab reeglid uuesti, seejärel peatage tunnel ja kinnitage, et PreDown eemaldas need. Surnud reeglid, mis ühenduse katkemise üle elavad, on põhjus, miks hilisem muudatus käitub ettearvamatult.
Lõpuks nõustuge sellega, mida SNAT maksab. Teenus näeb iga päringut puhverserverilt tulevana, seega juurdepääsulogid, kliendipõhised kiiruspiirangud ja lubatud aadresside loendid ei erista enam kasutajaid. Hairpin-juhtum vajab oma allikatõlget puhverserveri LAN-is olevate klientide jaoks. Kui peer vajab tõelisi kliendiaadresse, on alternatiiviks tagasitee kliendivõrku, mis on rohkem tööd, kuid säilitab teabe.