Do podomrežja za končno točko tunela lahko pridete na tri načine, in minuta zbiranja dejstev običajno izloči dva. Dejstva so, ali morajo tamkajšnji strežniki razlikovati uporabnike, ali se bo kdo od tam kdaj povezal proti vašemu obsegu, in kdo lahko ureja usmerjevalnik na oddaljeni strani. Odgovorite na te tri in zasnova se izbere sama. Preostanek predpostavlja, da upravljate končno točko in lahko urejate njen požarni zid.

Tri možnosti in kaj vsaka resnično spremeni

Preslikava predpone, DNAT na gostitelja in usmerjena predpona vsi premikajo pakete med istima dvema obsegoma, a spreminjajo različne stvari. Preslikava si izmisli obseg vzdevkov in med letom aritmetično prepiše naslove. Pravila na gostitelja tudi prepisujejo, le da je vsak cilj imenovan ročno. Usmerjena predpona ne prepiše ničesar: paketi obdržijo resnične naslove in oba konca se strinjata, kje ti naslovi živijo.

What the far side needsPrefix mappingPer-host DNATRouted prefix
Users visible to its logsOnly without source NATSame conditionYes, unchanged
To start a connection toward youNo, alias is localNo, same reasonYes, both ends route
To absorb a new hostYes, arithmetic onlyNo, one rule per addressYes, it simply routes
To require no config changeYes, with source NATYes, same conditionNo, it needs a route back

Izločanje začnite na oddaljeni strani, kjer je omejitve najtežje spremeniti. Če strežnik tam zapisuje naslove odjemalcev v dnevnike, jih preverja na seznamu dovoljenih ali jih preda drugemu sistemu, prevajanje vira uniči njegov edini identifikator. Če se mora oddaljena stran tudi povezovati navznoter, je prevajanje popolnoma izključeno, ker tam nihče ne ve, da vzdevek obstaja. Šele ko se oddaljena stran le odziva na zahteve, postanejo cenejše možnosti varne.

Pari predpon in zakaj se morajo velikosti ujemati

NETMAP je cilj tabele nat, ki deluje na paru predpon enake dolžine. V notranjosti nima tabele za vsak naslov: odstrani predpono, obdrži bite gostitelja in jih ponovno pripne na novo predpono, zato se /24 preslika na /24 in nikoli na /25. Položaj določa smer: ujemanje cilja v PREROUTING prepiše, kam paket gre, ujemanje vira v POSTROUTING pa prepiše, od kod je prišel.

Gostitelj na 192.168.2.17 se vašim odjemalcem prikaže kot 10.50.1.17, zadnji oktet pa ni okras — to je ista številka na obeh straneh. Jutri dodajte gostitelja na 192.168.2.40 in njegov vzdevek je 10.50.1.40, brez pravila za urejanje.

Odjemalci še vedno potrebujejo pot za obseg vzdevkov, ki kaže na vašo škatlo, razen če vzdevek pade v podomrežje, ki ga že dosežejo. Prehod ne potrebuje poti za vzdevek, ker se prevajanje cilja izvaja v PREROUTING, pred iskanjem poti. Tudi posredovanje mora biti vklopljeno, sicer jedro paket po prepisu zavrže. Trije ukazi spodaj so cela konfiguracija na prehodu v slogu Debiana z odjemalci na br0, vzdevkom na 10.50.1.0/24 in tunelom na tun0.

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i br0 -d 10.50.1.0/24 -j NETMAP --to 192.168.2.0/24
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Odgovor si mora sam najti pot nazaj

Prepis cilja odloči le, kam bo paket dostavljen. Oddaljeni strežnik se mora še vedno odzvati na naslov, ki ga doseže, in to je mogoče urediti na dva načina. Prevedite vir, da se odgovori vrnejo na vašo škatlo, ali pustite vir in dajte oddaljeni strani pot za obseg odjemalcev.

Masquerade na izhodu je krajša pot: eno pravilo v POSTROUTING in oddaljena stran vidi naslov vašega tunela, zato ne potrebuje lastne poti. Cena je, da se vsak uporabnik zloži v en naslov, dnevniki po uporabnikih pa izgubijo pomen. Če vir pustite nedotaknjen, se informacija ohrani, a potem mora oddaljena stran pošiljati odgovore za obseg odjemalcev nazaj skozi tunel.OpenVPN strežniku je to potisnjeno push "route 10.50.9.0 255.255.255.0", plus route 192.168.2.0 255.255.255.0 vrstica.

Draga napaka je narediti polovico vsakega. Če maskirate del prometa, medtem ko oddaljena stran nosi tudi povratno pot za drug promet, odgovori pridejo na vmesnik, kjer vnos sledenja povezave ni bil nikoli viden. Odjemalec poroča o časovni omejitvi za zahtevo, ki jo je strežnik zabeležil kot oskrbljeno. Obe smeri toka morata prečkati isto instanco netfilter: en prehod prevaja, ne dva požarna zidova zaporedno.

conntrack -L -d 10.50.1.17
iptables -t nat -L PREROUTING -v -n

Vnos preberite v obeh smereh: izvirni tuple obdrži vaš vzdevek na cilju, medtem ko tuple odgovora nosi resnični naslov. Če tuple odgovora manjka, je problem povratna pot, ne pravilo. Če se števci PREROUTING nikoli niso premaknili, paket ni nikoli dosegel tega hooka.

Trki in iskanje, ki se izvede prvo

Dva različna obsega lahko trčita in oba neuspeha izgledata kot pokvarjen tunel, ne kot slabo pravilo. Vzdevek, ki si ga izmislite, mora biti neuporabljen vzdolž celotne poti, resnični oddaljeni obseg pa ne sme že obstajati v vašem omrežju. Dvojnik povzroča občasni promet do napačnega gostitelja, kar je težje diagnosticirati kot zavrnjeno povezavo. Preden dodate pravilo, vprašajte usmerjevalno tabelo.

Na prehodu, ip route get 192.168.2.17 bi moralo navesti napravo tunela; lokalni bridge pomeni, da je oddaljeni obseg zasenčen in nobeno nat pravilo tega ne popravi. Če vaše omrežje že uporablja 192.168.2.0/24, preštevilčite oddaljeno mesto, namesto da bi kopičili preslikavo na trku.

Preizkušanje s pravega odjemalca in nato ohranitev

Preizkusite s stroja, ki bo vzdevek resnično uporabljal, ne s prehoda, ker lokalno ustvarjen promet nikoli ne prečka PREROUTING na enak način. Odprite povezavo do enega gostitelja z vzdevkom in opazujte, kako se števci in vnos conntrack pojavijo skupaj, nato jo zaprite in potrdite, da vnos izgine. Zastarel vnos kaže na napol odprto povezavo, kar običajno pomeni, da se odgovor ni nikoli vrnil.

curl -sv http://10.50.1.17/ -o /dev/null
ss -tn dst 10.50.1.17
conntrack -L -d 10.50.1.17

Dve ali tri uspešne povezave dokažejo aritmetiko, a ne povedo nič o trajnosti ali o naslednjem inženirju. Pravila shranite tam, kjer jih bere zagonski proces, kar v Debianu in Ubuntu pomeni iptables-save > /etc/iptables/rules.v4 z omogočenim netfilter-persistent. Preslikava, ki po ponovnem zagonu izgine, je slabša od nobene, ker izpad pride brez nedavne spremembe, ki bi jo lahko krivili.

Ob pravilih pustite opombo: obseg vzdevkov, resnični obseg, razlog za par in katera stran lahko začne. Ta opomba loči zasnovo od kupa pravil, ki si jih nihče ne upa izbrisati. Reši tudi poznejše vprašanje, ko oddaljeno mesto doda gostitelja in naslov, ki ga nihče ni nastavil, že odgovarja. Če opomba pravi, da oddaljena stran potrebuje povratno pot, naslednja oseba ve, da odstranitev pravila masquerade prekine povezljivost. Dokumentacija je tu poceni; ponovno odkrivanje odvisnosti od NAT ob treh zjutraj ni.

Sorodni članki