Preglednik traži https://203.0.113.10:8443, proxy prihvata vezu, a usluga na WireGuard peeru nikad ne odgovara. DNAT pravilo radi svoj posao; odgovor je dio koji ne uspijeva. Pratite paket kroz oba prevođenja i pravilo koje nedostaje postaje očito. Popravka je još jedna NAT izjava u pravom hooku, a ne novi tunel.

Pratite jedan zahtjev od početka do kraja

Zahtjev stiže na javni interfejs proxyja, s javnom adresom klijenta kao izvorom i adresom proxyja kao odredištem. U nat PREROUTING DNAT pravilo prepisuje odredište na tunelsku adresu peera, 10.90.0.2. Rutiranje zatim šalje paket kroz wg0 i put prosljeđivanja je završen.

Na peeru paket sada nosi originalnu javnu adresu izvora, jer ga ništa nije prepisalo. Usluga prihvata vezu i šalje odgovor na svoj podrazumijevani gateway, a to je kućni ruter ispred peera. Taj ruter nema stanje za tok koji nikada nije vidio i ili odbacuje paket ili ga prevodi na svoju javnu adresu, što klijent neće prihvatiti.

Asimetrija je cijeli problem: zahtjev ide kroz proxy, a odgovor pokušava ići direktno. Praćenje veza na proxyju pomaže samo ako se odgovor vraća kroz proxy, a on se tamo ne može vratiti dok adresa izvora još pokazuje na originalnog klijenta.

Dodajte povratno prevođenje

Prepišite izvor proslijeđenog toka na tunelsku adresu proxyja prije nego što krene prema peeru. Usluga zatim odgovara na 10.90.0.1, proxy to prima, a praćenje veza poništava oba prevođenja 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.1

POSTROUTING pravilo je namjerno usko: poklapa se s prevedenim odredištem i interfejsom tunela, pa ne prepisuje nepovezani saobraćaj koji slučajno izlazi kroz wg0. Široko masquerade pravilo također bi sakrilo adresu klijenta, ali bi to uradilo za svaki tok i otežalo reviziju NAT tabele.

Postavite pravila tamo gdje tunel postoji

Pravila koja referenciraju tunelsku adresu ili interfejs moraju se izvršavati nakon što ih wg-quick konfiguriše. Interfejs se kreira prije PreUp, ali adrese, MTU, DNS i rute se primjenjuju poslije, a PostUp se pokreće kad je sve to na mjestu. Dodavanja stavite 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.1

Brisanja moraju odgovarati dodavanjima token po token, uključujući podudaranja multiport i interfejsa. Brisanje koje se razlikuje u jednom podudaranju ne uklanja ništa, a sljedeće ponovno povezivanje dodaje drugu kopiju pravila. Nakon nekoliko ponovnih povezivanja tabela sadrži duplikate koje je teško pripisati liniji konfiguracije.

Provjerite rezultat pomoću iptables -t nat -S nakon ponovnog povezivanja. Ako se isto pravilo pojavi dva puta, linija PreDown se ne poklapa i čišćenje tiho ne uspijeva.

Prosljeđivanje, filtriranje i drugi NAT

Uključite IPv4 prosljeđivanje trajno, zatim dozvolite proslijeđeni tok u tabeli filtera. DNAT se dešava prije FORWARD lanca, pa se pravilo filtera poklapa s prevedenim odredištem, a ne s javnom adresom. Ako UFW upravlja firewallom, izrazite dozvolu kao rutno pravilo; obično host pravilo ne pokriva proslijeđeni saobraćaj.

Dva druga NAT sloja i dalje mogu slomiti put čak i kad su proxy pravila ispravna. Na kućnoj vezi javna adresa pripada ruteru, a otvaranje porta u njegovom firewallu nije isto kao stvaranje unosa za prosljeđivanje porta koji taj port šalje na proxy. Port koji izgleda otvoren izvana dok ništa ne odgovara često nema upravo to mapiranje.

Na NAT VPS-u provajder mapira javni port na privatnu adresu. Mapiranje se mora slagati s portom koji oglašavate, a nesklad izgleda identično kao pokvaren tunel. Potvrdite provajderovo mapiranje 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 prevođenja dok je veza otvorena:

conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080

conntrack unos bi trebao pokazati originalni 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 firewall odbacio tok.

Ponovo pokrenite sistem jednom da dokažete da PostUp ponovo 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 šta SNAT košta. Usluga vidi svaki zahtjev kao da dolazi s proxyja, pa pristupni logovi, ograničenja brzine po klijentu i liste dozvoljenih adresa više ne razlikuju korisnike. Slučaj hairpin zahtijeva vlastito prevođenje 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.

Povezani članci