Dir kënnt e Programm net vun engem WireGuard-Host mat vollem Tunnel ausschléissen, andeem Dir Routen ännert. Route wielen e Wee no Destinatioun, an dat wat Dir wëllt ausschléissen ass e Prozess, also huet de Kernel näischt fir ze vergläichen. De gangbare Wee ass, deem Prozess säin eegene Netzwierkkontext ze ginn: en Nummraum mat sengem eegene Interface, sengen Adressen an senger Standardroute, dee mat engem veth-Puer mam Host verbonne ass. Ech hunn dat op Ubuntu 24.04 mat wireguard-tools 1.0.20210914 lafe gelooss, an den Nummraum war ni de Problem — d'Weiderleedungspolitik vum Host an d'Markéierungsregele vum Tunnel waren et.

Wielt als éischt d'Zort Kontext, déi Dir braucht

An der Praxis komme fir zwou Forme vir. Wann den Host en volle Tunnel lafe léisst an ee Programm iwwer den ISP-Wee muss eraus, baut Dir en zweeten Nummraum, verbënnt en mam Host a loosst den Host den Trafik fir hie weiderleeden an iwwersetzen. Wann en Nummraum schonn en VPN-Interface huet a Dir just e Kommando braucht, deen dobannen ugefaang gëtt, dann ass dat de gewéinlechen ip netns exec Fall an de gréissten Deel vun der Routing-Aarbecht ass schonn gemaach.

Keng vun deenen zwou Formen gëtt Iech eng Regel, déi op eng eenzeg Prozess-ID begrenzt ass. Netfilter vergläicht Adressen, Porten, Marken an Interfacen; et gëtt keng Routingtabell pro Prozess. Markéierung kann den Trafik leeden, awer d'Mark muss op Pakete gesat ginn, déi Dir schonn identifizéiert hutt, an dat ass dee selwechte Problem eng Schicht méi déif. En Nummraum trennt de ganzen Stack fir dee Prozessbaum, an dofir ass et déi gewéinlech Äntwert.

Wann d'Ufuerderung wierklech ass, datt näischt aus dem Tunnel erauskënnt, stoppt amplaz den Tunnel. Den Nummraum existéiert fir de geméischte Fall: ee Programm eraus, alles anescht eran, op der selwechter Maschinn, zur selwechter Zäit.

Baut den zweete Kontext a verbënnt en mam Host

En illustratiivt Layout: den Host huet en WireGuard-Interface, deen d'Standardroute dréit, an en Netzwierk-Nummraum mam Numm clearnet dee mat engem veth-Puer mam Host verbonne ass. D'Adressen hei drënner sinn Beispiller.

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

Dee Nummraum kann elo den Host erreechen an näischt anescht. Den Host muss den Trafik weiderleeden an d'Quelladress ëmschreiwen, well 192.168.100.0/24 privat ass an de Router uewendriwwer keng Route zréck eran huet:

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

Bestätegt d'Nummraum-Säit, ier Dir weidergitt.ip netns exec clearnet ip route sollt d'veth-Route an d'Standardroute iwwer 192.168.100.1 weisen, an e Ping op déi Adress sollt äntweren. Wann de Ping op d'Hostadress feelt, sinn d'Adressen oder de Linkzoustand falsch an eng Firewallregel hëlleft net.

Wann Nimm opgeléist ginn, awer näischt zréckkënnt, lies FORWARD

De klassesche Feeler gesäit wéi e Routing-Bug aus: den Nummraum léist en Numm op, de Pak geet eraus an et kënnt ni eng Äntwert. Op Hoste mat enger FORWARD-Politik vun DROP — dat maachen e puer Distributiounen an déi meescht gehäert Biller — gëtt de Pak ënnerwee verworf, an de Feeler, deen d'Applikatioun dréckt, seet näischt iwwer Filtréierung.

Liest d'Kette, ier Dir eppes bäifüügt:

iptables -S FORWARD
nft list chain inet filter forward

Loosst dann den Trafik a béid Richtungen duerch, mat Zähler, sou datt Dir gesitt, ob d'Regel iwwerhaapt mol gepasst huet:

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'

Eng Regel mat engem Pakzähler vun null ass net um Wee. Entweder sinn d'Interface-Nimm anescht wéi Dir ugeholl hutt, oder eng fréier Regel an der Kette huet de Pak fir d'éischt ugeholl, verworfen oder zréckginn. Korrigéiert d'Reiefolleg, net den Text vun der Regel.

D'Äntwerttrafik ass déi Hallschent, déi d'Leit vergiessen. D'Zeréckregel brauch dee selwechten veth-Numm plus eng Iwwerenkënnt vum Verbindungszoustand, oder eng einfach Interface-Uhuel, wann Dir d'Politik oppe loossst. Füügt nëmmen d'Regel fir eraus bäi an d'ursprénglech Symptom ass zréck, wärend Är nei Regel do steet a korrekt ausgesäit.

Halt d'Markéierungsregele vum Tunnel vum neie Wee fort

Dëse Schrëtt mécht aus engem funktionéierenden Nummraum een, deen leckt. WireGuard-Setupen installéieren normalerweis eng Firewallmark-Politik zesumme mat hire eegene Routingregelen an enger eegener Tabell, sou datt onmarkéiert Paken an d'Haapttabell zréckfalen, wärend markéiert Paken d'Tunneltabell benotzen. Weidergeleeten Trafik aus dem Nummraum gëtt beim Erausgoen géint d'Politik-Routing evaluéiert, an je nodeem wéi déi Regele geschriwwe goufen, kann en an d'Tunneltabell falen.

Zwee Ergänzunge trennen d'Weeër. Kommt fréi an der mangle-Kette fir de Subnetz vum Nummraum zréck, a füügt eng quellbaséiert Regel bäi, déi dee Subnetz an d'Haapttabell setzt:

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

D'Prioritéit 100 sortéiert op mengem Host virun de Tunnelsregele, also entscheet déi gewéinlech Tabell fir déi Quell. Kopéiert d'Zuel net blann: d'Prioritéiten, déi wg-quick installéiert, ënnerscheede sech tëscht Versiounen an tëscht den IPv4- an IPv6-Setupen, also fuert ip rule show aus a wielt eng Prioritéit, déi op Ärer Maschinn virun den Tunnelsregele fält.

Verifizéiert mat eng quellspezifesch Sich amplaz der Regellëscht ze vertrauen:

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

Wann den éischte Kommando den WireGuard-Interface mellt, ass déi nei Regel nach net virun der Tunnelpolitik. Wann en den WAN-Interface mellt, wärend deen zweeten nach d'veth-Standardroute weist, sinn den Host an den Nummraum net eens a mir sollt béid Routingtabellen nach eng Kéier liesen.

Start de Prozess, deen d'Verbindung opmécht

De Kommando ze starten ass eng Zeil, awer start de Prozess, deen de Socket wierklech erstallt.ip netns exec clearnet curl -s https://ifconfig.me ass de klengsten éierlechen Test: en weist d'Adress, déi den Nummraum der Welt presentéiert, net déi, déi den Host benotze géif.

Fir engem Service: befestegt den Nummraum um Wee, sou datt de Prozess säi ganzt Liewe dran bleift:

[Service]
NetworkNamespacePath=/run/netns/clearnet

Grafesch Applikatioune sinn dee Punkt, wou de Een-Zeil-Approche stëll feelt. E Browser, deen aus engem Menü gestart gëtt, gëtt d'Ufro dacks un eng Instanz, déi schonn ausserhalb vum Nummraum leeft, sou datt dat neit Fënster erschéngt an den Trafik nach ëmmer duerch den Tunnel geet. Gitt him e separaten Profil, sou datt wierklech eng nei Instanz entsteet, a préift dann de Prozesskontext amplaz ze roden:

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

Déi zwou Ausgaben mussen iwwerenee stëmmen. Déiselwecht Prüfung funktionéiert fir all laang lafend Programm, an et ass der Mühe wäert, se eemol pro Applikatioun ze maachen amplaz unzehuelen, de Starter hätt gemaach, wat Dir gemengt hutt.

Nimmopléisung brauch seng eege Entscheedung. En Nummraum ze schafen gëtt him keng Resolver-Konfiguratioun; Dateie pro Nummraum ginn iwwer /etc/netns/<name>/resolv.conf ënnerstëtzt, a mat där een net ierft Dir Verhalen, dat liicht falsch gelies gëtt. IPv6 brauch déiselwecht Behandlung: wann den Nummraum keng v6-Standardroute huet, wärend d'Applikatioun v6 bevorzugt, kënnen Ufroe stoe bleiwen, ier se zréckfalen, wat wéi en gebrochenen Tunnel ausgesäit.

Préift de Kader, net nëmmen d'Sortieadress

Eng funktionéierend ëffentlech Adress beweist d'Route, net déi ganz Ufuerderung. Gitt de Rescht an dëser Reiefolleg duerch:

  • ip netns exec clearnet ip route get 1.1.1.1 weist d'veth-Standardroute, net den WireGuard-Interface.
  • D'FORWARD-Zähler op béide Regele klammen, wärend eng Ufro leeft.
  • De Prozess vun der Applikatioun mellt den Nummraum-Inode, deen Dir erwaart.
  • No engem Neistart existéiert den Nummraum, ier de Service start; eng Unit, déi méi fréi leeft, feelt oder, méi schlëmm, leeft ausserhalb vum Nummraum.

Entscheet dann, wat soll geschéien, wann den Tunnel fält. Den Nummraum funktionéiert weider, wat de Sënn vun der Übung an och de Risiko ass: de befreite Programm bleift verbonnen, wärend alles anescht stoppt. Schreift dat als Politikentscheedung op a sidd kloer driwwer, wat d'Ausnam net deckt — d'Kontoidentitéit, de gespäicherte Browserzoustand an Ären DNS-Anbieter stinn all ausserhalb vum Beräich vun engem Netzwierk-Nummraum, an d'Ausnam als Anonymitéit ze behandelen ass de Feeler, deen d'Konfiguratioun iwwerlieft.

Ähnlech Artikelen