Du VPN klientai gali išeiti per du skirtingus viešuosius IPv4 adresus, o tai daranti taisyklė trumpesnė, nei dauguma tikisi. Ją veikti leidžia ne iptables sintaksė, o paketo būsena, kai jis pasiekia išėjimo grandinę: šaltinio adresas ten dar turi atskirti klientus. Jei ankstesnis masquerade jau sujungė abu į vieną adresą, jokia taisyklė atskirai klientui negali atkurti skirtumo. Pirmiausia išspręskite šį klausimą, tada rašykite vertimą.

Kokia tapatybė išlieka iki tinklų sietuvo

Taisyklė atitinka paketo šaltinio adresą, o ne VPN vartotojo vardą ir ne vardą, kurį rodo kliento programa. Viskas, kas paketą anksčiau kelyje išverčia, nustato, ką jūsų taisyklė dar gali matyti. Paleiskite nat lentelę iš eilės ir raskite tašką, kuriame šaltinis dar atskiras kiekvienam klientui.

iptables -t nat -S POSTROUTING

Skaitykite tą sąrašą iš viršaus. Netoli viršaus esanti masquerade taisyklė perrašo šaltinį kiekvienam atitinkančiam srautui, o po jos esantys įrašai atskiriems klientams atitinka adresą, kurio jau nebėra. Kai du LAN įrenginiai dalijasi vienu tuneliu ir atvyksta kaip vienas vidinis adresas, projektas turi pasikeisti anksčiau nei užkarda: laikykite jų šaltinio diapazonus atskirai arba duokite kiekvienam savo vidinį adresą.

Susiekite vidinio adreso priskyrimą su autentifikuotu klientu. Perdavus tą adresą kitam įrenginiui, perduodama ir išėjimo politika, o šaltinio vertimas pats savaime nėra tapatybės įrodymas.

Vertimas negali išrasti adreso

Kiekvienas viešasis adresas turi būti priskirtas arba maršrutizuotas į šį išėjimo tašką, o atsakymai turi rasti kelią atgal. Taisyklė, siunčianti srautą iš adreso, į kurį niekas nemaršrutizuoja atgal, atmetama tolimajame gale arba atsakoma hostui, kuris niekada to neprašė. Debesų teikėjo egzemplioriaus viešasis adresas paprastai prieš paketui išeinant paverčiamas privataus sąsajos adresu, todėl SNAT šaltinis turi būti adresas, kurį teikėjas priims, o ne reikšmė, kurią rodo konsolė. Skaitykite teikėjo adresų modelį ir vadovaukitės juo, o ne kopijuokite viešąją reikšmę į kiekvieną paketą.

Praktiškai tai reiškia, kad prieš liesdami užkardą patikrinkite maršrutizuotą prefiksą teikėjo konsolėje ir, kai atitikimas vienas su vienu, naudokite privatų sąsajos adresą kaip vertimo šaltinį. Pavyzdžiuose naudojami adresai paimti iš dokumentacijos diapazonų, todėl pirmiausia keistinas pats adreso tekstas.

Įterpkite prieš bendrą masquerade

Prieš ką nors pridėdami patvirtinkite išėjimo sąsają ir dabartinę grandinę. Pirmoji nulemia, kuriuos paketus taisyklė gali atitikti, o antroji parodo, kas jau stovi prieš ją.

ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers

Pirmoji komanda įvardija sąsają, per kurią paketas į internetą iš tikrųjų išeina. Antroji išspausdina grandinę su eilučių numeriais. Bendra masquerade eilutė yra ta, virš kurios reikia likti.

iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78

Dvi aukščiau pateiktos taisyklės atitinka po vieną vidinį adresą, apriboja atitikimą išėjimo sąsaja ir aiškiai nustato šaltinį. Įterpkite, o ne pridėkite: 1 pozicijoje jos vertinamos prieš masquerade eilutę. Tvarka tarp jų nesvarbi, nes jų šaltiniai skiriasi. Pakeiskite ens3 tuo, ką pranešė maršruto komanda, ir laikykite kitus užkardos tvarkytuvus atokiau nuo tų pačių kabliukų, nes du įrankiai, rašantys vieną lentelę, yra įprasta priežastis, kodėl teisinga taisyklė neveikia.

Įrodykite šaltinį nauju srautu

Stateful NAT susieja vertimą srautui prasidėjus ir naudoja jį vėlesniems paketams, todėl sesija, atidaryta prieš pakeitimą, po pakeitimo išlaiko seną šaltinį. Taisyklę įrodo tik naujai inicijuotas ryšys.

conntrack -L -s 10.88.4.20 -p tcp --dport 443

Skaitykite to įrašo atsakymo kryptį: jo paskirties vieta yra adresas, kurį tolimas galas mato kaip šaltinį. Palyginkite jį su numatytu viešuoju adresu ir įrašą su senu adresu laikykite per anksti prasidėjusio srauto įrodymu, o ne sugedusia taisykle. Paprašykite kliento atidaryti naują ryšį, tada pakartokite užklausą. Visos sekimo lentelės išvalymas bandymui priversti pertraukia kiekvieną kitą sesiją tinklų sietuvo.

Vertimas vis dar nepasirenka maršruto, nepraleidžia srauto per filtrą ir neskelbia įeinančios paslaugos. Neteisingas maršrutas ir trūkstama leidimo taisyklė toliau nepavyksta net po tobulos SNAT taisyklės. Patikrinkite ir IPv6, ir bet kurį antrinį išėjimo kelią, tada užrašykite vidinio ir viešojo poras užkardos dokumentacijoje, kad kitas pakeitimas prasidėtų nuo atitikmens, o ne nuo taisyklės teksto.

Susiję straipsniai