Pārlūkprogramma pieprasa https://203.0.113.10:8443, starpniekserveris pieņem savienojumu, un pakalpojums WireGuard peer nekad neatbild. DNAT noteikums dara savu darbu; neizdodas atbildes daļa. Izsekojiet paketi cauri abām tulkošanām, un trūkstošais noteikums kļūst acīmredzams. Labojums ir vēl viens NAT paziņojums pareizajā hook, nevis jauns tunelis.

Izsekojiet vienu pieprasījumu no sākuma līdz beigām

Pieprasījums nonāk starpniekservera publiskajā saskarnē, avots ir klienta publiskā adrese, bet galamērķis – starpniekservera adrese. nat PREROUTING DNAT noteikums pārraksta galamērķi uz peer tuneļa adresi, 10.90.0.2. Pēc tam maršrutēšanas lēmums nosūta paketi ārā pa wg0, un pāradresācijas ceļš ir pabeigts.

Uz peer pakete tagad nes sākotnējo publisko avota adresi, jo nekas to nav pārrakstījis. Pakalpojums pieņem savienojumu un nosūta atbildi uz savu noklusējuma vārteju, kas ir mājas maršrutētājs peer priekšā. Šim maršrutētājam nav stāvokļa plūsmai, kuru tas nekad nav redzējis, tāpēc tas vai nu izmet paketi, vai pārtulko to uz savu publisko adresi, ko klients nepieņems.

Asimetrija ir visa problēma: pieprasījums iet caur starpniekserveri, bet atbilde mēģina iet tieši. Starpniekservera savienojumu izsekošana palīdz tikai tad, ja atbilde atgriežas pa starpniekserveri, un tā nevar atgriezties tur, kamēr avota adrese joprojām norāda uz sākotnējo klientu.

Pievienojiet atgriezenisko tulkojumu

Pārrakstiet pāradresētās plūsmas avotu uz starpniekservera tuneļa adresi, pirms tā dodas pie peer. Tad pakalpojums atbild uz 10.90.0.1, starpniekserveris to saņem, un savienojumu izsekošana apgriež abas tulkošanas, pirms pakete atgriežas pie klienta.

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 noteikums ir apzināti šaurs: tas atbilst pārtulkotajam galamērķim un tuneļa saskarnei, tāpēc nepārraksta nesaistītu satiksmi, kas nejauši iziet pa wg0. Plašs masquerade noteikums arī paslēptu klienta adresi, bet tas darītu to katrai plūsmai un apgrūtinātu NAT tabulas auditu.

Ievietojiet noteikumus tur, kur eksistē tunelis

Noteikumi, kas atsaucas uz tuneļa adresi vai saskarni, jāizpilda pēc tam, kad wg-quick to konfigurējis. Saskarne tiek izveidota pirms PreUp, bet adreses, MTU, DNS un maršruti tiek piemēroti pēc tam, un PostUp darbojas, kad tas viss ir vietā. Papildinājumus ievietojiet PostUp, bet dzēšanas – 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

Dzēšanām jāatbilst papildinājumiem pa vienai pazīmei, tostarp multiport un saskarnes atbilstībām. Dzēšana, kas atšķiras ar vienu atbilstību, neko neizdzēš, un nākamā atkārtotā savienošana pievieno otru noteikuma kopiju. Pēc dažām atkārtotām savienošanām tabulā ir dublikāti, kurus grūti attiecināt uz konfigurācijas rindu.

Pārbaudiet rezultātu ar iptables -t nat -S pēc atkārtotas savienošanas. Ja tas pats noteikums parādās divreiz, PreDown rinda neatbilst un tīrīšana klusi neizdodas.

Pāradresācija, filtrēšana un otrais NAT

Iespējojiet IPv4 pāradresāciju pastāvīgi, pēc tam atļaujiet pāradresēto plūsmu filtra tabulā. DNAT notiek pirms FORWARD ķēdes, tāpēc filtra noteikums atbilst pārtulkotajam galamērķim, nevis publiskajai adresei. Ja UFW pārvalda ugunsmūri, izsakiet atļauju kā maršruta noteikumu; vienkāršs host noteikums neaptver pāradresēto satiksmi.

Vēl divi NAT slāņi joprojām var salauzt ceļu pat tad, ja starpniekservera noteikumi ir pareizi. Mājas savienojumā publiskā adrese pieder maršrutētājam, un porta atvēršana tā ugunsmūrī nav tas pats, kas porta pāradresācijas ieraksta izveide, kas nosūta šo portu uz starpniekserveri. Ports, kas no ārpuses izskatās atvērts, kamēr nekas neatbild, bieži vien trūkst tieši šīs kartēšanas.

NAT VPS pakalpojumu sniedzējs kartē publisko portu uz privātu adresi. Kartējumam jāatbilst izsludinātajam portam, un neatbilstība izskatās tieši tāpat kā bojāts tunelis. Pirms WireGuard konfigurācijas maiņas apstipriniet pakalpojumu sniedzēja kartējumu.

Pārbaudiet atgriešanās ceļu un pieņemiet izmaksas

Savienojieties no tīkla, kas nav starpniekservera LAN, pēc tam pārbaudiet tulkojumu pāri, kamēr savienojums ir atvērts:

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

conntrack ierakstam jāparāda sākotnējais tuple, pārtulkotais tuple un atbildes virziens. Ja atbildes nav, peer nesūta pa tuneli, kas parasti nozīmē, ka SNAT noteikums netika piemērots vai ka peer paša ugunsmūris izmeta plūsmu.

Restartējiet vienu reizi, lai pierādītu, ka PostUp atkal piemēro noteikumus, pēc tam apturiet tuneli un apstipriniet, ka PreDown tos noņēma. Mirušie noteikumi, kas pārdzīvo atvienošanu, ir iemesls, kāpēc vēlāka izmaiņa uzvedas neprognozējami.

Visbeidzot, pieņemiet, cik maksā SNAT. Pakalpojums katru pieprasījumu redz kā nākošu no starpniekservera, tāpēc piekļuves žurnāli, ātruma ierobežojumi katram klientam un atļauto adrešu saraksti vairs neatšķir lietotājus. Hairpin gadījumam nepieciešama sava avota tulkošana klientiem starpniekservera LAN. Ja peer nepieciešamas īstas klienta adreses, alternatīva ir atgriešanās maršruts uz klienta tīklu, kas ir vairāk darba, bet saglabā informāciju.

Saistītie raksti