Preusmerjanje vrat na peer WireGuard za NAT: DNAT in SNAT
DNAT dostavi zahtevo, vendar odgovor odide z napačnega naslova. Dodajte ustrezno pravilo SNAT in oba postavite po konfiguraciji tunela.
Brskalnik zahteva https://203.0.113.10:8443, proxy sprejme povezavo, storitev na peeru WireGuard pa nikoli ne odgovori. Pravilo DNAT opravlja svoje delo; odpove del z odgovorom. Sledite paketu skozi oba prevoda in manjkajoče pravilo postane očitno. Popravek je še ena izjava NAT v pravem hooku, ne nov tunel.
Sledite eni zahtevi od začetka do konca
Zahteva prispe na javni vmesnik proxyja, z javnim naslovom odjemalca kot virom in naslovom proxyja kot ciljem. V nat PREROUTING pravilo DNAT prepiše cilj na naslov tunela peera, 10.90.0.2. Nato usmerjanje pošlje paket ven skozi wg0 in pot posredovanja je končana.
Na peeru paket zdaj nosi prvotni javni naslov vira, ker ga nič ni prepisalo. Storitev sprejme povezavo in pošlje odgovor na svoj privzeti prehod, ki je domači usmerjevalnik pred peerom. Ta usmerjevalnik nima stanja za tok, ki ga ni nikoli videl, zato paket bodisi zavrže bodisi prevede na svoj javni naslov, česar odjemalec ne bo sprejel.
Asimetrija je celotna težava: zahteva gre skozi proxy, odgovor pa poskuša iti neposredno. Sledenje povezavam na proxyju pomaga le, če se odgovor vrača skozi proxy, in se tja ne more vrniti, dokler naslov vira še vedno kaže na prvotnega odjemalca.
Dodajte povratni prevod
Prepišite vir posredovanega toka na naslov tunela proxyja, preden odide k peeru. Storitev nato odgovori na 10.90.0.1, proxy to prejme in sledenje povezavam obrne oba prevoda, preden se paket vrne odjemalcu.
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.1Pravilo POSTROUTING je namerno ozko: ujema se s prevedenim ciljem in vmesnikom tunela, zato ne prepisuje nepovezanega prometa, ki slučajno odhaja skozi wg0. Široko pravilo masquerade bi prav tako skrilo naslov odjemalca, vendar bi to storilo za vsak tok in otežilo revizijo tabele NAT.
Pravila postavite tja, kjer tunel obstaja
Pravila, ki se sklicujejo na naslov ali vmesnik tunela, morajo delovati po tem, ko ga wg-quick konfigurira. Vmesnik se ustvari pred PreUp, naslovi, MTU, DNS in poti pa se uporabijo pozneje, PostUp pa se izvede, ko je vse to na mestu. Dodatke postavite v PostUp, brisanja pa v PreDown.
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.1Brisanja se morajo ujemati z dodatki žeton za žetonom, vključno z ujemanji multiport in vmesnika. Brisanje, ki se razlikuje v enem ujemanju, ne odstrani ničesar, naslednja ponovna povezava pa doda drugo kopijo pravila. Po nekaj ponovnih povezavah tabela vsebuje dvojnike, ki jih je težko pripisati vrstici konfiguracije.
Rezultat preverite z iptables -t nat -S po ponovni povezavi. Če se isto pravilo pojavi dvakrat, se vrstica PreDown ne ujema in čiščenje tiho ne uspe.
Posredovanje, filtriranje in drugi NAT
Trajno omogočite posredovanje IPv4, nato dovolite posredovani tok v tabeli filtra. DNAT se zgodi pred verigo FORWARD, zato se pravilo filtra ujema s prevedenim ciljem, ne z javnim naslovom. Če UFW upravlja požarni zid, izrazite dovoljenje kot pravilo poti; običajno pravilo gostitelja ne pokrije posredovanega prometa.
Dve drugi plasti NAT lahko še vedno prekineta pot, tudi ko so pravila proxyja pravilna. Pri domači povezavi javni naslov pripada usmerjevalniku in odpiranje vrat v njegovem požarnem zidu ni isto kot ustvarjanje vnosa za posredovanje vrat, ki ta vrata pošlje proxyju. Vrata, ki so od zunaj videti odprta, medtem ko nič ne odgovarja, pogosto nimajo prav tega preslikavanja.
Na NAT VPS ponudnik preslika javna vrata na zasebni naslov. Preslikava se mora ujemati z vrati, ki jih oglašujete, in neujemanje je videti enako kot pokvarjen tunel. Preden spremenite konfiguracijo WireGuard, potrdite preslikavo pri ponudniku.
Preverite povratno pot in sprejmite ceno
Povežite se iz omrežja, ki ni LAN proxyja, nato preglejte par prevodov, medtem ko je povezava odprta:
conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080Vnos conntrack bi moral prikazati izvirni tuple, prevedeni tuple in smer odgovora. Če odgovora ni, peer ne pošilja skozi tunel, kar običajno pomeni, da pravilo SNAT ni bilo uporabljeno ali da je lastni požarni zid peera tok zavrgel.
Enkrat znova zaženite, da dokažete, da PostUp znova uporabi pravila, nato ustavite tunel in potrdite, da jih je PreDown odstranil. Mrtva pravila, ki preživijo prekinitev, so razlog, da se poznejša sprememba obnaša nepredvidljivo.
Na koncu sprejmite, koliko stane SNAT. Storitev vidi vsako zahtevo kot da prihaja s proxyja, zato dnevniki dostopa, omejitve hitrosti na odjemalca in seznami dovoljenih naslovov ne razlikujejo več uporabnikov. Primer hairpin potrebuje lasten prevod vira za odjemalce v LAN proxyja. Če peer potrebuje prave naslove odjemalcev, je alternativa povratna pot v odjemalčevo omrežje, kar je več dela, a ohrani informacijo.