Ezin duzu programa bat tunel osoa duen WireGuard ostalari batetik salbuetsi ibilbideak editatuz. Ibilbideek bidea helburuaren arabera aukeratzen dute, eta salbuetsi nahi duzuna prozesu bat da, beraz kernelak ez du zer parekatu. Bideragarria den ikuspegia prozesu horri bere sare-testuingurua ematea da: bere interfazea, helbideak eta ibilbide lehenetsia dituen izen-espazio bat, ostalariarekin veth bikote baten bidez lotuta. Ubuntu 24.04n exekutatu nuen wireguard-tools 1.0.20210914rekin, eta izen-espazioa ez zen inoiz arazoa izan — ostalariaren birbidaltze-politika eta tunelaren markatze-arauak ziren.

Aukeratu lehenik behar duzun testuinguru mota

Praktikan bi forma agertzen dira. Ostalariek tunel osoa exekutatzen badu eta programa batek ISP bidea hartu behar badu, bigarren izen-espazio bat eraikitzen duzu, ostalariarekin konektatzen duzu eta ostalariak haren ordez birbidali eta itzultzen uzten duzu. Izen-espazio batek jada VPN interfazea badaramaki eta bertan abiatutako komando bat besterik ez baduzu behar, hori ohiko ip netns exec kasua da eta bideratze-lanaren zatirik handiena egina dago.

Bi formetako batek ere ez dizu prozesu-identifikatzaile bakar batera mugatutako araurik ematen. Netfilterrek helbideak, atakak, markak eta interfazeak parekatzen ditu; ez dago prozesuko bideratze-taularik. Markatzeak trafikoa bidera dezake, baina marka jada identifikatu dituzun paketeei aplikatu behar zaie, eta hori arazo bera da geruza bat beherago. Izen-espazio batek pila osoa bereizten du prozesu-zuhaitz horrentzat, eta horregatik da ohiko erantzuna.

Baldintza benetan tunelik ezer irteten ez bada, gelditu tunela horren ordez. Izen-espazioa kasu mistorako dago: programa bat kanpora, gainerako guztia barrura, makina berean, aldi berean.

Eraiki bigarren testuingurua eta lotu ostalariari

Diseinu adierazgarria: ostalariak bide lehenetsia daraman WireGuard interfazea du, eta clearnet izeneko sare-izen-espazio bat, veth bikote bidez ostalariarekin lotua. Beheko helbideak adibideak dira.

ip netns add clearnet
ip link add veth-clear-out type veth peer name veth-clear-in
ip addr add 192.168.100.1/24 dev veth-clear-out
ip link set veth-clear-out up
ip link set veth-clear-in netns clearnet
ip netns exec clearnet ip addr add 192.168.100.2/24 dev veth-clear-in
ip netns exec clearnet ip link set veth-clear-in up
ip netns exec clearnet ip route add default via 192.168.100.1

Izen-espazio horrek ostalariera irits daiteke orain, eta beste inora ez. Ostalariak trafikoa birbidali eta iturburu-helbidea berridatzi behar du, 192.168.100.0/24 pribatua baita eta goiko bideratzaileak ez baitu hara itzultzeko ibilbiderik:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o <wan-interface> -j MASQUERADE

Egiaztatu izen-espazioaren aldea aurrera egin aurretik.ip netns exec clearnet ip route veth ibilbidea eta 192.168.100.1 bidezko ibilbide lehenetsia erakutsi beharko lituzke, eta helbide horri egindako ping-ek erantzun beharko luke. Ostalariaren helbideari egindako ping-ek huts egiten badu, helbideak edo estekaren egoera oker daude eta suebaki-arau batek ere ez du lagunduko.

Izenak ebazten direnean baina ezer itzultzen ez denean, irakurri FORWARD

Huts klasikoak bideratze-errore baten itxura du: izen-espazioak izen bat ebazten du, paketea irteten da eta ez da inoiz erantzunik iristen. FORWARD politika DROP duten ostalarietan — hainbat distribuziok eta irudi gogortu gehienek hala egiten dute — paketea bidean baztertzen da, eta aplikazioak inprimatzen duen erroreak ez du ezer esaten iragazketari buruz.

Irakurri katea ezer gehitu aurretik:

iptables -S FORWARD
nft list chain inet filter forward

Ondoren onartu trafikoa bi noranzkoetan, kontagailuekin, arauak noizbait bat egin duen jakiteko:

iptables -A FORWARD -i veth-clear-out -o <wan-interface> -j ACCEPT
iptables -A FORWARD -i <wan-interface> -o veth-clear-out -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
watch -n1 'iptables -L FORWARD -v -n'

Zero pakete-kontagailua duen araua ez dago bidean. Edo interfaze-izenak suposatu duzunetatik desberdinak dira, edo kateko aurreko arau batek paketea lehenbizi onartu, baztertu edo itzuli zuen. Konpondu ordena, ez arauaren testua.

Erantzun-trafikoa jendeak ahazten duen erdia da. Itzultze-arauak veth izen bera behar du gehi konexio-egoeraren bat-etortzea, edo interfaze-onarpen arrunta politika irekita baduzu. Gehitu irteera-araua bakarrik eta jatorrizko sintoma itzultzen da, zure arau berria han zuzen dirudiela.

Eduki tunelaren markatze-arauak bide berritik urrun

Urrats honek funtzionatzen duen izen-espazio bat ihes egiten duen batean bihurtzen du. WireGuard konfigurazioek suebaki-markaren politika bat instalatu ohi dute, beren bideratze-arauekin eta taula dedikatu batekin, beraz markatu gabeko paketeak taula nagusira erortzen dira eta markatutakoek tunelaren taula erabiltzen dute. Izen-espaziotik birbidalitako trafikoa irtetean politika-bideratzearen aurka ebaluatzen da, eta arau horiek nola idatzi zirenaren arabera tunelaren taulan amaitu dezake.

Bi gehigarrik bereizten dituzte bideak. Itzuli goiz mangle katean izen-espazioaren azpisarearentzat, eta gehitu iturburuan oinarritutako arau bat azpisare hori taula nagusian jartzen duena:

iptables -t mangle -I PREROUTING -s 192.168.100.0/24 -j RETURN
ip rule add from 192.168.100.0/24 lookup main priority 100

100 lehentasuna nire ostalarian tunelaren arauen aurretik ordenatzen da, beraz iturburu horretarako taula arruntak erabakitzen du. Ez kopiatu zenbakia itsu-itsuan:wg-quick-ek instalatzen dituen lehentasunak bertsioen eta IPv4 zein IPv6 konfigurazioen artean desberdinak dira, beraz exekutatu ip rule show eta aukeratu zure makinan tunelaren arauen aurretik geratzen den lehentasun bat.

Egiaztatu iturburuaren araberako bilaketa batekin, arauen zerrendan fidatu beharrean:

ip route get 1.1.1.1 from 192.168.100.2
ip netns exec clearnet ip route get 1.1.1.1

Lehen komandoak WireGuard interfazea ematen badu, arau berria ez dago oraindik tunelaren politikaren aurretik. WAN interfazea ematen badu eta bigarrenak oraindik veth bide lehenetsia erakusten badu, ostalaria eta izen-espazioa ez datoz bat eta bi bideratze-taulak berriro irakurri beharko dituzu.

Abiarazi konexioa irekitzen duen prozesua

Komandoa abiaraztea lerro bat da, baina abiarazi socket-a benetan sortzen duen prozesua.ip netns exec clearnet curl -s https://ifconfig.me da probarik zintzoena: izen-espazioak munduari aurkezten dion helbidea erakusten du, ostalariak erabiliko lukeena ez.

Zerbitzu batentzat, lotu izen-espazioa bidez, prozesua bizitza osoan bertan egon dadin:

[Service]
NetworkNamespacePath=/run/netns/clearnet

Aplikazio grafikoak dira lerro bakarreko ikuspegia isil-isilik huts egiten duen tokia. Menutik abiarazitako nabigatzaileak eskaera izen-espaziotik kanpo jada exekutatzen ari den instantzia bati ematen dio sarritan, beraz leiho berria agertzen da eta trafikoak tunelatik irteten jarraitzen du. Eman profila bereizi bat instantzia berria benetan sortzeko, eta gero egiaztatu prozesuaren testuingurua asmatu beharrean:

readlink /proc/$(pgrep -f clearnet-profile | head -1)/ns/net
readlink /run/netns/clearnet

Bi irteerek bat etorri behar dute. Egiaztapen bera edozein programa luzearentzat balio du, eta aplikazio bakoitzeko behin egitea merezi du, abiarazleak zure asmoa egin zuela suposatu beharrean.

Izenen ebazpenak bere erabakia behar du. Izen-espazio bat sortzeak ez dio ebazpen-konfiguraziorik ematen; izen-espazioko fitxategiak /etc/netns/<name>/resolv.conf bidez onartzen dira, eta hori gabe gaizki irakurtzeko erraza den portaera heredatzen duzu. IPv6k trataera bera behar du: izen-espazioak v6 bide lehenetsirik ez badu eta aplikazioak v6 hobesten badu, eskaerak trabatu daitezke atzera egin aurretik, eta hori tunel hautsia ematen du.

Egiaztatu markoa, ez bakarrik irteera-helbidea

Funtzionatzen duen helbide publiko batek bidea frogatzen du, ez baldintza osoa. Egin gainerakoa ordena honetan:

  • ip netns exec clearnet ip route get 1.1.1.1 veth bide lehenetsia erakusten du, ez WireGuard interfazea.
  • Bi arauen FORWARD kontagailuak handitzen dira eskaera bat exekutatzen ari den bitartean.
  • Aplikazioaren prozesuak espero duzun izen-espazioko inode-a ematen du.
  • Berrabiarazi ondoren izen-espazioa zerbitzua hasi aurretik existitzen da; lehenago exekutatzen den unit-ak huts egiten du edo, okerrago, izen-espaziotik kanpo exekutatzen da.

Ondoren erabaki zer gertatu behar den tunela erortzen denean. Izen-espazioak funtzionatzen jarraitzen du, eta hori da ariketaren mamia eta aldi berean arriskua: salbuetsitako programak konektatuta jarraitzen du gainerako guztia gelditzen den bitartean. Erregistratu hori politika-erabaki gisa, eta izan argi salbuespenak zer ez duen estaltzen — kontu-identitatea, gordetako nabigatzaile-egoera eta zure DNS hornitzailea sare-izen-espazio baten irismenetik kanpo daude denak, eta salbuespena anonimotasun gisa tratatzea konfigurazioa baino gehiago bizirauten duen akatsa da.

Erlazionatutako artikuluak