Prosljeđivanje porta na WireGuard peer iza NAT-a: DNAT plus SNAT
DNAT dostavlja zahtjev, ali odgovor izlazi s pogrešne adrese. Dodajte odgovarajuće SNAT pravilo i smjestite oba nakon što je tunel konfiguriran.
Preglednik traži https://203.0.113.10:8443, proxy prihvaća vezu, a usluga na WireGuard peeru nikada ne odgovori. DNAT pravilo obavlja svoj posao; odgovor je dio koji podbacuje. Pratite paket kroz oba prijevoda i pravilo koje nedostaje postaje očigledno. Ispravak je još jedna NAT naredba u pravom hooku, a ne novi tunel.
Pratite jedan zahtjev od početka do kraja
Zahtjev stiže na javno sučelje proxyja, s javnom adresom klijenta kao izvorom i adresom proxyja kao odredištem. U nat PREROUTING DNAT pravilo prepisuje odredište na adresu tunela peera, 10.90.0.2. Zatim usmjeravanje šalje paket van kroz wg0 i put prosljeđivanja je dovršen.
Na peeru paket sada nosi izvornu javnu adresu izvora jer ga ništa nije prepisalo. Usluga prihvaća vezu i šalje svoj odgovor na svoj zadani gateway, a to je kućni usmjerivač ispred peera. Taj usmjerivač nema stanje za tok koji nikad nije vidio pa ili odbacuje paket ili ga prevodi na svoju javnu adresu, što klijent neće prihvatiti.
Asimetrija je cijeli problem: zahtjev prolazi kroz proxy, a odgovor pokušava ići izravno. Praćenje veza na proxyju pomaže samo ako se odgovor vraća kroz proxy, a tamo se ne može vratiti dok adresa izvora još pokazuje na izvornog klijenta.
Dodajte povratni prijevod
Prepišite izvor proslijeđenog toka na adresu tunela proxyja prije nego što krene prema peeru. Zatim usluga odgovara na 10.90.0.1, proxy to prima i praćenje veza preokreće oba prijevoda prije nego što se paket vrati klijentu.
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 pravilo namjerno je usko: podudara se s prevedenim odredištem i sučeljem tunela pa ne prepisuje nepovezani promet koji slučajno izlazi kroz wg0. Široko masquerade pravilo također bi sakrilo adresu klijenta, ali bi to učinilo za svaki tok i otežalo reviziju NAT tablice.
Smjestite pravila tamo gdje tunel postoji
Pravila koja upućuju na adresu ili sučelje tunela moraju se izvršavati nakon što ih wg-quick konfigurira. Sučelje se stvara prije PreUp, ali adrese, MTU, DNS i rute primjenjuju se poslije, a PostUp se pokreće kad je sve to na mjestu. Stavite dodavanja u PostUp, a brisanja u 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 moraju odgovarati dodavanjima token po token, uključujući podudaranja multiport i sučelja. Brisanje koje se razlikuje u jednom podudaranju ne uklanja ništa, a sljedeće ponovno povezivanje dodaje drugu kopiju pravila. Nakon nekoliko ponovnih povezivanja tablica sadrži duplikate koje je teško pripisati retku konfiguracije.
Provjerite rezultat pomoću iptables -t nat -S nakon ponovnog povezivanja. Ako se isto pravilo pojavi dvaput, redak PreDown se ne podudara i čišćenje tiho ne uspijeva.
Prosljeđivanje, filtriranje i drugi NAT
Trajno omogućite prosljeđivanje IPv4, zatim dopustite proslijeđeni tok u tablici filtra. DNAT se događa prije FORWARD lanca pa se pravilo filtra podudara s prevedenim odredištem, a ne s javnom adresom. Ako UFW upravlja vatrozidom, izrazite dopuštenje kao pravilo rute; obično pravilo hosta ne pokriva proslijeđeni promet.
Dva druga NAT sloja još mogu slomiti put čak i kad su pravila proxyja ispravna. Na kućnoj vezi javna adresa pripada usmjerivaču i otvaranje porta u njegovu vatrozidu nije isto što i stvaranje unosa za prosljeđivanje porta koji taj port šalje na proxy. Port koji izvana izgleda otvoren dok ništa ne odgovara često nema upravo to mapiranje.
Na NAT VPS-u pružatelj mapira javni port na privatnu adresu. Mapiranje se mora slagati s portom koji oglašavate, a nesklad izgleda jednako kao pokvaren tunel. Potvrdite mapiranje pružatelja prije nego što promijenite WireGuard konfiguraciju.
Provjerite povratni put i prihvatite cijenu
Povežite se s mreže koja nije LAN proxyja, zatim pregledajte par prijevoda dok je veza otvorena:
conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080conntrack unos trebao bi pokazati izvorni tuple, prevedeni tuple i smjer odgovora. Ako odgovor nedostaje, peer ne šalje kroz tunel, što obično znači da SNAT pravilo nije primijenjeno ili je peerov vlastiti vatrozid odbacio tok.
Jednom ponovno pokrenite sustav da dokažete da PostUp ponovno primjenjuje pravila, zatim zaustavite tunel i potvrdite da ih je PreDown uklonio. Mrtva pravila koja prežive prekid veze razlog su zašto se kasnija promjena ponaša nepredvidivo.
Na kraju, prihvatite što SNAT stoji. Usluga vidi svaki zahtjev kao da dolazi s proxyja pa pristupni zapisi, ograničenja brzine po klijentu i popisi dopuštenih adresa više ne razlikuju korisnike. Slučaj hairpin treba vlastiti prijevod izvora za klijente na LAN-u proxyja. Ako peeru trebaju stvarne adrese klijenata, alternativa je povratna ruta do klijentske mreže, što je više posla ali čuva informaciju.