VPN izen-espazio barruko aplikazioa ezin da LANetik atzitu
Sare-izen espazio batek programa bati bere tunela eta bere loopbacka ematen dizkio. Argitaratu bere portua soilik socat jauzi edo veth pare batekin, ostalariaren ordez.
Zure zerbitzua makinan funtzionatzen ari da, tunela altxatuta dago, eta hala ere zure mahaiko nabigatzaileak erantzunaren zain jarraitzen du. Ez dago ezer hautsita ohiko zentzuan: aplikazioa sare-izen espazio baten barruan ari da entzuten, eta pila hori ikusezina da LANarentzat. Haren loopbacka izen-espazioarena da, beraz beste makina bateko bezeroak ez du portura iristen den helbiderik. Jauzi deliberatu batek, edo veth pare batek, hori konpontzen du ostalariaren gainerakoa mugitu gabe.
Zergatik ez dion ezerk LAN helbidean erantzuten
Izen-espazio bat sare-pila osoa da: interfazeak, ibilbideak, suebaki-arauak eta loopback pribatua. ip netns exec bidez abiarazitako prozesu batek pila hori baino ez du ikusten, beraz lotzen duen helbidea izen-espazioaren barruan bakarrik ebazten da. Ostalariaren beraren 127.0.0.1 erabat bestelako loopback bat da.
Horregatik huts egiten du ostalariaren curl-ek, izen-espazioaren barruko komando berak arrakasta duen bitartean. Aplikazioa osasuntsu dago; helbidea ez da ostalariaren pilan existitzen, besterik gabe.
Argitaratu portu bat socat jauzi batekin
socat-ek bi pilak erabiltzaile-espazioan zubitzen ditu, eta hori nahikoa da TCP portu bakar batek zeharkatu behar duenean. Ostalariaren aldeak LANean entzuten du eta onartutako konexio bakoitzeko bigarren socat bat abiarazten du izen-espazioaren barruan, aplikazioaren loopbackera konektatzen dena. Barneko prozesuak aplikaziora iristen da tokiko bezero batek egingo lukeen bezalaxe. Izen-espazioaren bideratzean ezer ez da aldatzen, beraz aplikazioak tunela erabiltzen jarraitzen du irteera bakartzat.
socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork
Kanpoko prozesuak root edo izen-espaziora sartzeko gaitasuna behar du. VPN-a erortzen bada, aplikazioak bere bidea galtzen du eta argitaratutako portuak itxita huts egiten du, eta hori da kartzeletik nahi duzun portaera.
Erabili veth pare bat portu bat baino gehiago zeharkatzen denean
veth pare bat da erantzun egokia hainbat portu edo protokolo zeharkatu behar direnean, edo beste ostalariek konexioak hasi behar dituztenean. Mutur bat ostalarian geratzen da, bestea izen-espaziora mugitzen da, eta /30 txiki batek bi aldeei helbide egonkorra ematen die. Ondoren ostalariaren ibilbide batek izen-espazioaren helbidea bidaltzen du parearen bidez.
ip link add veth0 type veth peer name veth1
ip link set veth1 netns vpn
ip addr add 10.77.0.1/30 dev veth0
ip link set veth0 up
ip netns exec vpn ip addr add 10.77.0.2/30 dev veth1
ip netns exec vpn ip link set veth1 up
Ez gehitu defektuzko ibilbiderik ostalariaren bidez, kartzela hautsi nahi ez baduzu behintzat. Tunelak irteera izaten jarraitu behar du, beraz parearen bidez argitaratutako zerbitzuaren helbidea baino ez da irisgarria. Eman izen-espazioari bere resolver fitxategia ere, ip netns exec k /etc/netns/vpn/resolv.conf irakurtzen duelako eta hura gabe kartzelaren barruko izen-ebazpena hutsa da.
Probatu beste makina batetik, ez ostalaritik
Exekutatu proba bigarren makina batetik, ostalariak tokiko entzule batera iritsi baitaiteke LANari buruz ezer esaten ez duten bideetatik. Egiaztatu lehenengo aplikazioa izen-espazioaren barruan zeri lotu zaion, eta gero konektatu kanpotik argitaratutako helbidera. Han helbide guztietara lotzeak ez du kartzela zabaltzen, komodinak izen-espazioari jarraitzen baitio eta LANak ezin baitu ikusi.
ip netns exec vpn ss -lntp
Ostalariaren konexioak funtzionatzen badu eta LANarenak ez, falta den pieza jauzia edo ibilbidea da, ez lotze-helbidea. Abiarazi OpenVPN izen-espazioaren barruan, tun gailu bizia bertara mugitu beharrean, interfazea mugitzeak itzaltzen baitu eta gero kanpotik konpondu ezin dituzun ibilbideak garbi baititzake. Mantendu berreskuratze-komandoak kontsolan, ez kartzelaren barruan.