VPN bezero baten zerbitzura iristea: alderantzizko tunela edo DNAT
OpenVPN bezero baten zerbitzura iristea portu-birbidalketarik gabe: alderatu alderantzizko SSH tunela zerbitzariko DNATarekin eta aukera egiten duten hiru baldintzekin.
Operadorearen NAT atzean dagoen ordenagailu eramangarri batek ere lagun bati zerbitza diezaioke, VPN zerbitzaria topagune gisa aritzen bada. Horra iristeko bi mekanismo daude: bezeroak kanpora deitu eta zerbitzariari entzuteko portu bat eusteko eskatzen dio, edo zerbitzariak portu bat argitaratu eta tunelean itzultzen du. Biek irisgarritasun arazo bera konpontzen dute eta desberdin jokatzen dute hutsegite, gainbegiratze eta erregistroen aurrean. Hiru baldintzek erabakitzen dute zein dagokion zure konfigurazioari.
Bi forma, topagune bat
Lehen forman bezeroak kanporako SSH saio bat irekitzen du eta zerbitzariari aukeratutako portu batean entzuteko eskatzen dio, konexio bakoitza saio horretatik itzuliz. Zerbitzaritik ez da ezer birbidaltzen eta ez da pakete itzulketarik gertatzen, beraz baldintza bakarrak SSH kontu bat, baimendutako birbidalketa bat eta portuarentzako suebaki arau bat dira. Zerbitzua bezeroaren loopbackari lotuta geratzen da, eta hori izan ohi da nahi duzuna.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
Bigarren forman zerbitzaria da portu publikoaren jabe eta konexio bakoitza bezeroaren tunel helbiderantz berridazten du. Horrek IP birbidalketa gaituta, helmugako itzulpena sarreran eta iturburuko itzulpena irteeran eskatzen ditu, eta SSH saiorik ez dagoenean ere lanean jarraitzen du. Portua zerbitzariarena da, ez saio batena, eta ezaugarri horrek erabakitzen ditu kasu erreal gehienak.
Bi formak ez dira berez seguruagoak. Biek zerbitzu portu bat erakusten diote zerbitzariaren helbide publikora irits daitekeen edonori, eta biek zerbitzuaren beraren autentifikazioaren mende jarraitzen dute.
Lehen baldintza: portuak saioa baino gehiago iraun behar du
Alderantzizko birbidalketa sortu zuen SSH saioa adina bizi da zehazki. Esteka erortzean, entzulea desagertu egiten da eta lagunak ukatutako konexioa ikusten du bide motelaren ordez. Komandoa systemd unitate batekin eta berrabiarazte politika batekin gainbegiratzeak konpontzen du hori, eta ExitOnForwardFailure=yes-ek lotura huts bat berehala ikusgarri egiten du, birbidalketarik gabe lanean ari den saioa uztearen ordez.
Itzulitako portuak berrabiarazteak gainditzen ditu arauak gordetzen badira, baina bezeroak tunel helbide bera mantentzearen mende dago. Birsikatzearen ondoren eramangarriari beste helbide bat ematen dion igerileku dinamikoak isilean ezertara ez du bideratzen araua. Erreserbatu tunel helbidea lehenik, idatzi araua gero, eta hartu biak aldaketa bakar gisa.
Zerbitzuak goizeko hiruretan inor begira egon gabe erantzun behar badu, zerbitzariak argitaratutako portudun formak pieza mugikor gutxiago ditu, zutik mantendu behar den prozesu bakarra tunela bera delako.
Bigarren baldintza: nor da suebakiaren eta erregistroen jabe
Alderantzizko formak politika osoa bi tokitan gordetzen du. sshd-ek erabakitzen du urrutiko birbidalketak onartuta dauden ala ez AllowTcpForwarding bidez, eta GatewayPorts-ek erabakitzen du entzulea loopbackari edo helbide guztiei lotzen zaien. Lehenetsitako no-ekin, zerbitzaritik kanpoko lagun batek ezin du portura iritsi birbidalketa lortu bada ere, eta hori tunel hautsia ematen du, benetan lotura helbidea denean.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
Itzulitako formak birbidalketa gaituta eta bi arau behar ditu, eta bigarren araua da errezeta gehienak huts egiten duten tokia. Iturburuaren itzulpena conntrack egoerara DNAT mugatzeak esan nahi du helmuga arauak sortutako konexioak soilik berridazten direla, zerbitzariak tunelean bidaltzen duen pakete bakoitzaren ordez.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
Berridazketa horrek egozpena ere suntsitzen du. Ondoren bezeroak dei egile bakoitza zerbitzariaren tunel helbide gisa ikusten du, eta horrek helbide bakoitzeko abiadura muga edozein ontzi bakarrera biltzen du eta nor zer bidali zuen ezkutatzen du. Egozpena garrantzitsua bada, amaitu konexioa zerbitzarian edo utzi baimenaren erabakia han eta pasa identitatea zerbitzuak konfiantza duen goiburu batean. Bi konponketa horien artean aukeratzea zerbitzuak proxy goiburua irakurtzen duen ala ez da.
Hirugarren baldintza: portu bat edo asko, eta nor da izenaren jabe
Portu bateko zerbitzu bakarra da alderantzizko birbidalketak ahaleginean irabazten duen kasua. Komando bat, kontu bat eta suebaki arau bat behar dituzu, eta garbiketa saioa hiltzea da. Helbide publiko berean zerbitzu anitzek zerbitzariak argitaratutako formara bultzatzen zaituzte, alderantzizko birbidalketa bakoitzak bere zerbitzari portua behar duelako eta multzoa zerbitzu bakoitzarekin hazten delako.
Izenei esker are konplexuagoa da. Alderantzizko birbidalketa SNIren arabera bideratzen duen TCP proxy baten atzean egon daiteke, itzulitako portua, berriz, zerbitzu bakoitzeko portu bat izan ohi da. Zerbitzuak berak TLS amaitzen badu eta jatorrizko ostalari izena behar badu, proxy ikuspegiak mantendu egiten du, eta DNAT ikuspegiak soilik mantentzen du zerbitzuak izen hori portu horretan onartzen badu.
Idatz ezazu hiru baldintzetatik zein izan zen forma erabaki zuena. Bestela, bigarren zerbitzu bat gehituko duen hurrengo pertsonak alderaketa bera berriro irekiko du testuinguru gutxiagorekin.
Erabaki eta gero kanpotik probatu
Probatu bidea ordenagailu eramangarrirako biderik ez duen sare batetik, eta begiratu zerbitzariko kontagailuak eskaera exekutatzen den bitartean. Zerbitzaritik bere helbide publikora probatzeak ez du ezer frogatzen hemen, paketea tokian bertan sortzen delako eta inoiz ez duelako sarrerako itzulpen kakoa ukitzen; beraz, probak gaindi dezake benetako bidea hautsita dagoela.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
Lau geratzen diren kontagailuek paketea inoiz araura iritsi ez zela esan nahi dute, eta horrek hornitzailea edo ostalariaren suebakia seinalatzen ditu. Zerbitzuak ukatzen duen bitartean mugitzen diren kontagailuek bezeroaren suebaki propioa edo zerbitzuak entzuten duen helbidea seinalatzen dituzte. Paketea eramaten duen baina ezer itzultzen ez duen tunela bide edo atzera-bide arazoa da, eta hiru emaitza horietako bat ere ez litzateke araztu behar bezeroaren egokitzailea aldatuz. Idatz ezazu zein kontagailu mugitu zen ezer aldatu aurretik, hurrengo probak oinarri-lerro hori behar duelako.
Formak funtzionatzen duenean, erregistra itzazu portua, jabea eta gainbegiratzeko metodoa tunelaren konfigurazioaren ondoan. Norbaiten shell historialean soilik dagoen irisgarritasun konponketa berrabiarazte bakar batera dago gertaera errepikakor batetik.