Jo kinne in subnet efter in tunnel-einpunt op trije manieren berikke, en in minút feiten sammelje slút meast twa út. De feiten binne oft de servers dêr brûkers ûnderskiede moatte, oft immen dêr ea nei jo berik skilje sil, en wa't de router oan 'e fiere ein bewurkje mei. Beäntwurdzje dy trije en it ûntwerp kiest himsels. De rest giet derfan út dat jo it einpunt beheare en syn firewall bewurkje meie.

Trije opsjes, en wat elk echt feroaret

Prefiksmapping, DNAT per host en in rûte prefiks ferpleatse allegear pakketten tusken deselde twa berikken, mar se feroarje ferskillende dingen. Mapping betinkt in alias-berik en skriuwt adressen arithmetysk oer ûnderweis. Regels per host skriuwe ek oer, allinnich wurdt elke bestimming mei de hân neamd. In rûte prefiks skriuwt neat oer: pakketten hâlde de echte adressen en beide kanten iens binne oer wêr't dy adressen wenje.

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

Begjin de eliminaasje oan 'e fiere kant, dêr't de beheiningen it minst maklik te feroarjen binne. As in server dêr klantadressen yn logs skriuwt, se tsjin in tastiene list kontrolearret of se oan in oar systeem jout, fernielt it oersetten fan 'e boarne syn iennichste identifikaasje. As de fiere kant ek skilje moat, falt oersetting hielendal ôf, want nimmen dêr wit dat it alias bestiet. Pas as de fiere kant gewoan op fersiken antwurdet, wurde de goedkeapere opsjes feilich.

Prefiksparen, en wêrom't de grutten lyk wêze moatte

NETMAP is in doel fan 'e nat-tabel dat op in pear prefiksen fan deselde lingte wurket. It hat gjin tabel per adres fan binnen: it hellet it prefiks fuort, hâldt de host-bits en heakket se wer oan it nije prefiks, dêrom wurdt in /24 op in /24 mapt en nea op in /25. De posysje beslút de rjochting: in bestimmingsoerienkomst yn PREROUTING skriuwt oer wêr't in pakket hinne giet, en in boarne-oerienkomst yn POSTROUTING skriuwt oer wêr't it wei kaam.

In host op 192.168.2.17 ferskynt by jo klanten as 10.50.1.17, en it lêste okte is net dekoraasje — it is itselde getal oan beide kanten. Foegje moarn in host op 192.168.2.40 ta en syn alias is 10.50.1.40, sûnder regel om te bewurkjen.

Klanten hawwe noch hieltyd in rûte nedich foar it alias-berik dy't nei jo bak wiist, útsein as it alias yn in subnet falt dat se al berikke. De gateway hat gjin rûte foar it alias nedich, want bestimmingsoersetting rint yn PREROUTING, foar de rûtesykjen. Trochstjoeren moat ek oan wêze, oars smyt de kernel it pakket nei it oerskriuwen fuort. De trije kommando's hjirûnder binne de hiele opset op in gateway yn Debian-styl mei klanten op br0, it alias op 10.50.1.0/24 en de tunnel op 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

It antwurd moat syn eigen wei werom fine

It oerskriuwen fan 'e bestimming beslút allinnich wêr't in pakket besoarge wurdt. De server oan 'e fiere kant moat noch hieltyd antwurdzje op in adres dat er berikke kin, en dêr binne twa manieren foar. Oerset de boarne sadat antwurden nei jo bak weromkomme, of lit de boarne gewurde en jou de fiere kant in rûte foar it klantberik.

Masquerade op 'e útgong is it koartste paad: ien regel yn POSTROUTING en de fiere kant sjocht jo tunneladres, dus hy hat gjin eigen rûte nedich. De priis is dat alle brûkers yn ien adres gearfalle, en logs per brûker ophâlde wat te betsjutten. De boarne ûnoantaast litte hâldt dy ynformaasje, mar dan moat it fiere plak de antwurden foar it klantberik weromstjoere troch de tunnel. Op in OpenVPN server is dat in stjoerde push "route 10.50.9.0 255.255.255.0", plus in rigel route 192.168.2.0 255.255.255.0.

De djoere flater is fan elk de helte dwaan. As jo in part fan it ferkear masquerade litte wylst de fiere kant ek in weromrûte foar oar ferkear draacht, komme antwurden op in ynterface dêr't de ferbiningsspoar-yngong nea sjoen is. De klant rapportearret in time-out foar in fersyk dat de server as betsjinne logde. Beide rjochtingen fan in stream moatte deselde netfilter-eksimplaar passearje: ien gateway dy't oerset, net twa firewalls efterinoar.

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

Lês de yngong yn beide rjochtingen: de orizjinele tuple hâldt jo alias op 'e bestimming, wylst de antwurd-tuple it echte adres draacht. As de antwurd-tuple ûntbrekt, is it werompaad it probleem en net de regel. As de PREROUTING-tellers nea bewegen, kaam it pakket nea by dy heak.

Botsingen en de syktocht dy't earst rint

Twa ferskillende berikken kinne botsen en beide flaters lykje op in brutsen tunnel en net op in minne regel. It alias dat jo betinke, moat ûnbrûkt wêze oer it hiele paad, en it echte fiere berik mei net al op jo netwurk bestean. In duplikaat jout tuskenskoftich ferkear nei de ferkearde host, wat dreech te diagnostisearjen is as in wegere ferbining. Freegje de rûtetabel foardat jo in regel tafoegje.

Op 'e gateway soe ip route get 192.168.2.17 it tunnelapparaat neame moatte; in pleatslike brêge betsjut dat it fiere berik yn it skaad leit en gjin nat-regel dat reparearret. As jo eigen netwurk al 192.168.2.0/24 brûkt, nûmerje it fiere plak dan opnij yn stee fan in mapping op 'e botsing te stapeljen.

Teste fan in echte klant, en dan hâlde

Test fan in masine dy't it alias echt brûke sil, net fan 'e gateway, want pleatslik oanmakke ferkear giet nea op deselde wize troch PREROUTING. Iepenje in ferbining nei ien alias-host en sjoch de tellers en de conntrack-yngong tegearre ferskine, slút it dan en befêstigje dat de yngong fuortgiet. In ferâldere yngong wiist op in healiepen ferbining, wat meast betsjut dat it antwurd nea weromkaam.

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

Twa of trije slagge ferbiningen bewiisje de arithmetyk, mar se sizze neat oer duorsumens of oer de folgjende yngenieur. Bewarje de regels dêr't it opstartproses se lêst, wat op Debian en Ubuntu iptables-save > /etc/iptables/rules.v4 betsjut mei netfilter-persistent oan. In mapping dy't by in werstart ferdwynt is slimmer as gjin, want de steuring komt sûnder resinte feroaring om te beskuldigjen.

Lit in notysje by de regels: it alias-berik, it echte berik, de reden fan it pear en hokker kant begjinne mei. Dy notysje skiedt in ûntwerp fan in heap regels dy't nimmen doar te wiskjen. It besljochtet ek de lettere fraach, as it fiere plak in host tafoeget en in adres dat nimmen konfigurearre al antwurdet. As de notysje seit dat de fiere kant in weromrûte nedich hat, wit de folgjende persoan dat it fuortheljen fan 'e masquerade-regel ferbining brekt. Dokumintaasje is hjir goedkeap; in NAT-ôfhinklikens om trije oere nachts op 'e nij ûntdekke is dat net.

Relatearre artikelen