Įdėkite gaudymą abiejose VPN tarpinės pusėse ir vienas srautas gali parodyti keturis skirtingus adresus. Šaltinio NAT perrašo, iš kur paketas teigia ateinąs; paskirties NAT perrašo, kur jis eina. Masquerade nėra trečia kryptis, tai šaltinio NAT taisyklė, kuri adresą ima iš išeinančios sąsajos, o ne iš fiksuotos reikšmės. Įvardykite, kurios iš trijų iš tikrųjų reikia, ir dauguma „VPN sulūžo“ bilietų susitraukia iki klausimo apie grįžimo kelią.

Ką perrašo kiekviena taisyklė

Šaltinio NAT, paprastai rašomas SNAT, keičia srauto šaltinio adresą, kai jis palieka maršrutizatorių ar tarpinę. Priimanti paslauga atsako į išverstą adresą, o verčianti dėžė atšaukia pakeitimą naudodama būseną, kurią laikė tam ryšiui. Linux ši būsena gyvena conntrack, todėl conntrack -L spausdina pradinę ir atsakymo poras greta.

Paskirties NAT, DNAT, vietoj to keičia paskirtį. Paketas, adresuotas viešajam adresui UDP 51820, gali būti perrašytas į vidinį WireGuard serverį adresu 10.8.0.2:51820. Taip namų maršrutizatorius ar debesų apkrovos balansuotojas paskelbia VPN klausytoją, ir tai nieko nesako apie tai, ką tunelis gali nešti vėliau.

Masquerade priklauso SNAT šeimai. Taisyklė neįvardija jokio adreso; ji naudoja tą, kurį išeinanti sąsaja turi paketui išvykstant. Linux suteikia jai savo tikslą, ir tai įprastas pasirinkimas WAN sąsajoje, kuri adresą gauna iš DHCP arba PPPoE.

Kur gyvena susiejimas, ten nustatomas gedimas

Užrašykite porą kiekvienoje riboje: prieš tunelį, jo viduje ir viešojoje sąsajoje. Gaudymas tunelio viduje teisėtai skiriasi nuo esančio lauke, ir kas lygina abu nežinodamas, kur vyksta vertimas, vysis ne tą mazgą.

Grįžtamasis srautas turi praeiti per įrenginį, kuris laiko susiejimą. Jei atsakymas pasirenka kitą maršrutą, antrą viršutinę jungtį, politikos maršrutą ar teikėją, kuris niekada negirdėjo apie jūsų privatų diapazoną, būsenos atvirkštinis vertimas niekada neįvyksta ir klientas mato vienkryptį srautą. Daugiau šaltinio NAT retai pataiso trūkstamą grįžimo maršrutą; jis gali paslėpti simptomą viename sraute ir sulaužyti adresais pagrįstą politiką visur kitur.

Kita dažna klaida – tikėtis, kad tunelis sukurs maršrutizuojamumą. Privatus klientas, kurio paketai išeina į internetą, turi turėti galiojančią išėjimo tvarką: numatytąjį maršrutą, persiunčiančią tarpinę ir paprastai šaltinio vertimą į viešąjį adresą. Vien šifravimas nepadaro privataus adreso pasiekiamo.

Masquerade ar aiškus SNAT

Palyginkite juos pagal tai, ką jie žada. Masquerade pasirenka išėjimo adresą, aiškus SNAT jį užfiksuoja. Tarpinėje su stabiliu viešuoju adresu užfiksavimas duoda žurnalams ir partnerių leidimų sąrašams vieną nuspėjamą reikšmę. Dinaminėje WAN jungtyje užfiksuotas SNAT adresas tampa klaidingas tą akimirką, kai pasikeičia nuoma, ir būtent tam atvejui Masquerade buvo sukurtas.

Aprėptis svarbi tiek pat, kiek pasirinkimas. Masquerade taisyklė, atitinkanti kiekvieną paketą, paliekantį tarpinę, be šaltinio ar paskirties apribojimo, verčia ir srautą, kurį norėjote palikti nepaliestą, įskaitant srautą į kitus privačius tinklus. Apribokite taisyklę klientų diapazonu, numatyta paskirtimi ir sąsaja.

Politika pagrįstas IPsec čia kanda stipriausiai. strongSwan persiuntimo vadovas eina per IP persiuntimo įjungimą ir šaltinio NAT taisyklės klientams pridėjimą, o ta pati dokumentacija apima srauto, kuris turi išlaikyti savo pradinį adresą, išskyrimą. Išverskite šaltinį prieš jam suveikiant saugumo politikai, ir tunelis gali pakilti, o srautas vis tiek kris, nes paketas nebeatrodys kaip suderintas selektorius.

Nuspręskite ir, ką turi matyti tolimasis galas. Po vertimo paslauga mato tarpinę, o ne atskirą klientą. Tai supaprastina grįžimo maršrutizavimą ir kartu išlygina žurnalus bei panaikina leidimų sąrašus pagal klientą. Jei klientų adresų išsaugojimas svarbus, planuokite maršrutizuotą grįžimo kelią, o ne slėpkite juos, kad testas praeitų.

Taisyklių skaitymas Linux tarpinėje

Nuotolinės prieigos tarpinė, kurios klientai yra 10.8.0.0/24 tinkle ir WAN sąsaja vadinasi eth0, turi turėti įjungtą persiuntimą ir filtravimo politiką, leidžiančią srautą, kad bet kuri NAT taisyklė galėtų padėti. iptables versija laiko abi kryptis nat lentelėje:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 51820 \
  -j DNAT --to-destination 10.8.0.2:51820

nftables forma naudoja tuos pačius du kabliukus su įvardinta sąsaja ir aiškia grandine:

nft add rule ip nat postrouting ip saddr 10.8.0.0/24 oifname "eth0" masquerade
nft add rule ip nat prerouting iifname "eth0" udp dport 51820 dnat to 10.8.0.2:51820

Abu fragmentai daro prielaidą, kad filtravimo grandinė jau priima persiųstą srautą. NAT nėra leidimo taisyklė, ir teisingai išverstas paketas vis tiek gali būti numestas viena lentele vėliau. Patvirtinkite gyvą susiejimą su conntrack -L, patvirtinkite, kas įkelta, su nft list ruleset arba iptables-save -t nat, tada gaukite abiejose sąsajose, kad pamatytumėte, jog adresas tikrai keičiasi.

Gedimų režimai, atrodantys kaip bloga taisyklė

Plaukų segtuko srautas yra klasika. Vidiniam klientui, kuris pasiekia vidinį serverį per serverio viešąjį adresą, reikia DNAT kelyje į vidų ir šaltinio vertimo kelyje atgal į lauką, kitaip serveris atsako tiesiai klientui ir atsakymas atmetamas. Sprendimas – antra, siauresnė taisyklė tam vidinio į viešąjį atvejui, o ne platesnė Masquerade taisyklė viskam.

Dvigubas vertimas yra tylusis. Klientas, jau esantis už operatoriaus lygio NAT, atvyksta į jūsų tarpinę su adresu, kurio negalite maršrutizuoti atgal, todėl verčiate dar kartą. Tai veikia, bet žurnaluose dabar du privataus adresavimo šuoliai, ir bet kuriam tyrimui reikia abiejų susiejimų. Politika pagrįstas IPsec prideda trečią posūkį: išverskite prieš politikos atitikimą ir gausite SA, kuris pakeltas be srauto, o tai skaitoma kaip ugniasienės, o ne NAT klaida.

Toliau yra testas, kuris praeina, ir diegimas, kuris žlunga. Rankinis NAT komandos paleidimas įrodo mechanizmą, ne konfigūraciją. Vykdymo metu pridėta taisyklė dingsta perkraunant arba kitame sąsajos įvykyje, o Masquerade taisyklė, susieta su sąsaja, kurios numeris keičiasi, gali tyliai pakeisti adresą, kurį mato tolimasis galas. Įdėkite taisyklę į ją valdančios ugniasienės konfigūraciją ir išbandykite iš naujo po prisijungimo.

Kontrolinis sąrašas prieš išsaugant taisyklę

Pirmiausia įvardykite kryptį: šaltinis, paskirtis ar abi. Tada nustatykite, kas turi laikyti būseną – tarpinė, aukštesnis maršrutizatorius ar IPsec partneris – ir patvirtinkite, kad atsakymo kelias grįžta per jį. Apribokite taisyklę klientų diapazonu, paskirtimi ir sąsaja, kurių tikrai ketinate, ir iš anksto nuspręskite, ar tolimasis galas turi matyti tarpinę, ar pradinį kliento adresą.

Bandykite iš kliento, o ne iš tarpinės. Naršyklė pačioje tarpinėje gali visiškai apeiti kliento vertimo taisyklę, todėl ten veikiantis puslapis nieko neįrodo apie tunelį. Nusiųskite vieną užklausą, kilusią iš kliento, stebėkite skaitiklius ir conntrack lentelę ir pakartokite po tunelio prisijungimo iš naujo bei WAN adreso pasikeitimo, jei bent viena iš to yra įmanoma jūsų darbo vietoje.

Susiję straipsniai