NAT taisyklė, kuri turėjo vienam VPN klientų telkiniui duoti jo paties viešą adresą, stovi prie nulio paketų, o tas pats telkinys toliau išeina su neteisingu šaltiniu. Taisyklė paprastai neklysta dėl adreso; ji klysta dėl sąsajos. -o eth0:0 nurodo įrenginį, kurio nėra, nes eth0:0 yra žymė, pridėta prie adreso, esančio eth0. Skaitiklių stebėjimas yra greičiausias būdas tai patvirtinti, o pataisa mažesnė, nei tyrimas leidžia manyti.

Patikrinkite, kaip branduolys vadina įrenginį

Prieš ką nors keisdami perskaitykite abu vaizdus atskirai:

ip link show
ip address show dev eth0
ip route get 203.0.113.20

Nuorodų sąrašas rodo sąsajas. Adresų sąrašas gali rodyti antrą IPv4 adresą, turintį žymę eth0:0, o to adreso įrenginys vis dar eth0. iproute2 adresų vadovas žymę laiko adreso vardu, o ne antrąja nuoroda, ir būtent šis skirtumas yra visos problemos pagrindas.

Istorija paaiškina painiavą. Sena ifconfig eth0:0 sintaksė tikrai atrodė kaip nauja sąsaja, o to laikotarpio scenarijai vis dar į ją nurodo. Šiuolaikinėje sistemoje alias yra žymė ant adreso, ir niekas maršrutizavimo ar netfilter kelyje nelaiko jo atskiru išėjimo tašku.

Patikrinkite, prie ko taisyklė iš tikrųjų prisitaikė

Skaitiklius skaitykite kartu su taisyklių sąrašu, o ne iš atminties:

iptables -t nat -L POSTROUTING -v -n --line-numbers

Taisyklė, kurios paketų skaitiklis lieka nulyje, kol teka atitinkamas srautas, nėra vertinama, o išėjimo sąsajos sąlyga, nurodanti eth0:0 yra dažna priežastis. Maršruto pasirinktas išėjimo įrenginys yra eth0, todėl sąlyga, ieškanti kito vardo, niekada netaps teisinga, nesvarbu, kokį šaltinio adresą branduolys pasirinko.

Pakeiskite sąlygą į tikrą įrenginį ir palikite žymę už jos ribų. Jei reikia atskirti du klientų telkinius, kurie dalijasi tuo įrenginiu, atskirkite juos šaltinio priešdėliu, o ne sąsajos vardu, kurio negali būti. Dvi taisyklės su nesikertančiais -s atitikimais yra skaitomos ir tikrinamos; viena taisyklė su išgalvotu įrenginiu nėra nei viena, nei kita. Kiekvienai taisyklei pridėkite komentarą, nurodantį telkinį, nes po pusmečio vien priešdėlis niekam nepasakys, kodėl ji ten stovi.

Patikrinkite maršrutą, kuris pasirinko įrenginį

Postrouting NAT veikia po to, kai maršrutas jau pasirinko išėjimo sąsają, todėl taisyklėje esanti sąsaja turi būti ta, kurią pasirinko maršrutas. Klauskite branduolio tiesiogiai su ip route get reprezentatyviam kliento adresui ir perskaitykite ir įrenginį, ir nurodytą šaltinį.

Jei atsakymas nurodo eth0, taisyklės sąsajos dalis išspręsta. Jei jis nurodo tunelio įrenginį, paketas niekada nepasiekia taisyklės, kurią redaguojate, ir paieška persikelia į maršrutizavimo lentelę bei jos prioritetus. Taisyklė, kuri niekada neatitinka, nes paketas išėjo kitur, skaitiklių išvestyje atrodo taip pat, kaip taisyklė su neteisingai parašytu įrenginiu. Prieš ką nors redaguodami patvirtinkite, kuris iš dviejų atvejų yra jūsų, nes antrajam reikia maršrutizavimo, o ne teksto pakeitimo.

Sąmoningai pasirinkite verčiamą šaltinį

Kai įrenginys teisingas, šaltinio adresas yra atskiras sprendimas. Tai tik iliustracinis IPv4 telkinys ir pavyzdinis adresas:

iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
  -j SNAT --to-source 203.0.113.20

Adreso įrašymas į --to-source nepriverčia nieko jo maršrutizuoti atgal pas jus. Aukštesnio lygio tiekėjas ar adreso savininkas turi pristatyti to adreso atsakymus šiam hostui, o adresas turi būti toks, kurį jums leista naudoti. Jei ne, taisyklė atitiks ir išvers, o atsakymai vis tiek eis kitur.

Šaltinio adreso keitimas nėra tas pats, kas aukštesnės grandies keitimas. Kai tikrasis reikalavimas yra kitas fizinis kelias, maršrutizavimo politika pirmiausia turi pasirinkti tą kelią; tada SNAT perrašo šaltinį tame įrenginyje, kurį pasirinko politika. Daugiau žymių eth0 nesuteikia nei maršruto, nei leidimo.

Patikrinkite ką tik atidarytu ryšiu

Atidarykite naują kliento ryšį, o ne naudokite iš naujo esamą. Ryšių sekimas išsaugo vertimą, kurį užrašė srauto pradžioje, todėl sena sesija gali toliau naudoti ankstesnį šaltinio adresą ir teisingą naują taisyklę padaryti panašią į sugedusią. Stebėkite, kaip skaitiklis auga, tada pažiūrėkite išverstą šaltinį laide arba tolimajame gale.

Kai keli telkiniai dalijasi viena sąsaja, duokite kiekvienam aiškų šaltinio atitikimą ir savo vertimo adresą, laikykite juos valdomoje ugniasienės konfigūracijoje ir užsirašykite, kokia tvarka jie vertinami. Tada užrašykite, ką patikrinote: įrenginį iš ip route get, skaitiklį, kuris pajudėjo, ir šaltinį, kurį matė tolimoji pusė. Tas įrašas atsakys į kitą ataskaitą nekartodamas alias painiavos.

Susiję straipsniai