Doi clienți VPN pot ieși prin două adrese IPv4 publice diferite, iar regula care face asta este mai scurtă decât se așteaptă majoritatea. Ceea ce o face să funcționeze nu este sintaxa iptables, ci starea pachetului când ajunge în lanțul de ieșire: adresa sursă de acolo trebuie să mai poată distinge clienții. Dacă un masquerade anterior a unit deja ambele pe o singură adresă, nicio regulă pe client nu poate recupera distincția. Rezolvați mai întâi această problemă, apoi scrieți traducerea.

Ce identitate ajunge la gateway

Regula se potrivește cu adresa sursă a pachetului, nu cu un nume de utilizator VPN și nu cu numele afișat de o aplicație client. Tot ce traduce pachetul mai devreme pe traseu decide ce mai poate vedea regula dumneavoastră. Rulați tabelul nat în ordine și găsiți punctul în care sursa este încă separată pentru fiecare client.

iptables -t nat -S POSTROUTING

Citiți acea listă de sus. O regulă masquerade aproape de vârf rescrie sursa pentru fiecare flux potrivit, iar intrările pe client plasate după ea se potrivesc cu o adresă care nu mai există. Când două dispozitive LAN partajează un tunel și sosesc ca o singură adresă internă, proiectarea trebuie schimbată înaintea firewall-ului: păstrați intervalele lor de sursă separate sau dați fiecăruia propria adresă internă.

Legați alocarea adresei interne de clientul autentificat. Predarea acelei adrese altui dispozitiv predă și politica de ieșire, iar traducerea sursei nu este în sine o dovadă de identitate.

Traducerea nu poate inventa o adresă

Fiecare adresă publică trebuie alocată sau rutată către acest punct de ieșire, iar răspunsurile trebuie să găsească drumul înapoi. O regulă care trimite trafic de la o adresă către care nimeni nu rutează înapoi este aruncată la capătul îndepărtat sau i se răspunde unui host care nu a cerut-o niciodată. O instanță a unui furnizor de cloud are de obicei adresa publică tradusă într-o adresă de interfață privată înainte ca pachetul să plece, așa că sursa SNAT trebuie să fie adresa pe care furnizorul o va accepta, nu valoarea afișată de consolă. Citiți modelul de adrese al furnizorului și urmați-l în loc să copiați valoarea publică în fiecare pachet.

În practică, aceasta înseamnă să verificați prefixul rutat în consola furnizorului înainte de a atinge firewall-ul și să folosiți adresa de interfață privată ca sursă de traducere când maparea este unu la unu. Adresele din exemplele de mai jos provin din intervalele de documentație, așa că primul lucru de înlocuit este textul adresei în sine.

Introduceți înainte de masquerade-ul generic

Confirmați interfața de ieșire și lanțul curent înainte de a adăuga ceva. Prima decide ce pachete poate potrivi regula, iar al doilea arată ce stă deja în fața ei.

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

Prima comandă numește interfața prin care un pachet spre internet chiar iese. A doua tipărește lanțul cu numere de linie. Intrarea masquerade generică este linia sub care trebuie să rămâneți.

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

Cele două reguli de mai sus se potrivesc fiecare cu o adresă internă, limitează potrivirea la interfața de ieșire și stabilesc sursa explicit. Introduceți, nu adăugați: la poziția 1 sunt evaluate înaintea liniei masquerade. Ordinea dintre ele nu contează pentru că sursele lor diferă. Înlocuiți ens3 cu ce a raportat comanda de rută, și țineți alți manageri de firewall departe de aceleași hooks, deoarece două instrumente care scriu un singur tabel este motivul obișnuit pentru care o regulă corectă nu are efect.

Dovediți sursa cu un flux nou

NAT cu stare leagă o traducere când începe un flux și o reutilizează pentru pachetele ulterioare, așa că o sesiune deschisă înainte de modificare își păstrează sursa veche după modificare. Doar o conexiune nou inițiată dovedește regula.

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

Citiți direcția de răspuns a acelei intrări: destinația ei este adresa pe care capătul îndepărtat o vede ca sursă. Comparați-o cu adresa publică pe care intenționați să o folosiți și tratați o intrare care poartă adresa veche ca dovadă a unui flux început prea devreme, nu a unei reguli defecte. Rugați clientul să deschidă o conexiune nouă, apoi repetați interogarea. Golirea întregului tabel de urmărire pentru a forța testul întrerupe orice altă sesiune de pe gateway.

Traducerea tot nu alege ruta, nu lasă fluxul prin filtru și nu publică un serviciu de intrare. O rută greșită și o regulă de permisiune lipsă continuă să eșueze după o regulă SNAT perfectă. Verificați și IPv6 și orice cale de ieșire secundară, apoi notați perechile intern-către-public în documentația firewall-ului, astfel încât următoarea modificare să pornească de la mapare, nu de la textul regulii.

Articole similare