Dva VPN klijenta mogu izaći kroz dvije različite javne IPv4 adrese, a pravilo koje to čini kraće je nego što većina ljudi očekuje. Ono što ga čini djelotvornim nije sintaksa iptablesa, nego stanje paketa kada stigne do izlaznog lanca: izvorna adresa tamo još uvijek mora razlikovati klijente. Ako je raniji masquerade već spojio oba na jednu adresu, nijedno pravilo po klijentu ne može vratiti tu razliku. Prvo riješite to pitanje, pa napišite prijevod.

Koji identitet preživljava do pristupnika

Pravilo se podudara s izvornom adresom paketa, a ne s korisničkim imenom VPN-a ni s nazivom koji prikazuje klijentska aplikacija. Sve što prevede paket ranije na putu određuje što vaše pravilo još može vidjeti. Pokrenite tablicu nat po redu i pronađite točku u kojoj je izvor još uvijek zaseban za svakog klijenta.

iptables -t nat -S POSTROUTING

Pročitajte taj popis odozgo. Pravilo masquerade blizu vrha prepisuje izvor za svaki odgovarajući tok, a unosi po klijentu smješteni nakon njega podudaraju se s adresom koja više ne postoji. Kad dva LAN uređaja dijele jedan tunel i dolaze kao jedna unutarnja adresa, dizajn se mora promijeniti prije vatrozida: držite njihove izvorne raspone odvojenima ili svakome dajte vlastitu unutarnju adresu.

Vežite dodjelu unutarnje adrese uz autentificiranog klijenta. Predaja te adrese drugom uređaju predaje i izlaznu politiku, a prevođenje izvora samo po sebi nije dokaz identiteta.

Prevođenje ne može izmisliti adresu

Svaka javna adresa mora biti dodijeljena ili usmjerena na ovu izlaznu točku, a odgovori moraju pronaći put natrag do nje. Pravilo koje šalje promet s adrese na koju nitko ne usmjerava natrag odbacuje se na udaljenom kraju ili se odgovara hostu koji to nikada nije tražio. Instanca kod pružatelja oblaka obično prevede svoju javnu adresu u adresu privatnog sučelja prije nego paket izađe, pa SNAT izvor mora biti adresa koju će pružatelj prihvatiti, a ne vrijednost koju prikazuje konzola. Pročitajte model adresa pružatelja i slijedite ga umjesto da kopirate javnu vrijednost u svaki paket.

U praksi to znači provjeriti usmjerenu prefiks u konzoli pružatelja prije nego što dirnete vatrozid i koristiti adresu privatnog sučelja kao izvor prevođenja kada je preslikavanje jedan na jedan. Adrese korištene u primjerima u nastavku dolaze iz dokumentacijskih raspona, pa je prvo što treba zamijeniti sam tekst adrese.

Umetnite prije općeg masqueradea

Potvrdite izlazno sučelje i trenutačni lanac prije nego što bilo što dodate. Prvo određuje koje pakete pravilo može podudariti, a drugo pokazuje što već stoji ispred njega.

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

Prva naredba imenuje sučelje kroz koje paket prema internetu doista izlazi. Druga ispisuje lanac s brojevima redaka. Opći masquerade unos je redak iznad kojeg treba ostati.

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

Dva gornja pravila podudaraju se sa po jednom unutarnjom adresom, ograničavaju podudaranje na izlazno sučelje i izričito postavljaju izvor. Umetnite, a ne dodajte: na položaju 1 procjenjuju se prije retka masquerade. Redoslijed između njih nije važan jer se njihovi izvori razlikuju. Zamijenite ens3 onim što je naredba rute prijavila i držite druge upravitelje vatrozida podalje od istih kukica, jer dva alata koja pišu jednu tablicu uobičajen su razlog zašto ispravno pravilo nema učinka.

Dokažite izvor novim tokom

Stateful NAT veže prevođenje kada tok započne i ponovno ga koristi za kasnije pakete, pa sesija otvorena prije promjene zadržava svoj stari izvor nakon promjene. Samo novo pokrenuta veza dokazuje pravilo.

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

Pročitajte smjer odgovora tog unosa: njegovo odredište je adresa koju udaljeni kraj vidi kao izvor. Usporedite je s javnom adresom koju ste namjeravali i tretirajte unos sa starom adresom kao dokaz toka koji je počeo prerano, a ne kao pokvareno pravilo. Zamolite klijenta da otvori novu vezu, a zatim ponovite upit. Ispiranje cijele tablice praćenja da bi se test prisilio prekida svaku drugu sesiju na pristupniku.

Prevođenje još uvijek ne bira rutu, ne propušta tok kroz filtar i ne objavljuje ulaznu uslugu. Pogrešna ruta i nedostajuće pravilo dopuštanja nastavljaju ne uspijevati nakon savršenog SNAT pravila. Provjerite i IPv6 i svaki sekundarni izlazni put, zatim zabilježite parove unutarnje-prema-javnom u dokumentaciji vatrozida kako bi sljedeća promjena krenula od preslikavanja, a ne od teksta pravila.

Povezani članci