Lokal App, VPN-Reeg: firwat deng FORWARD-Kette ni ëmgesat gëtt
E Prozess op der Maschinn benotzt OUTPUT, net FORWARD. Wiel den Hook am richtege Nummraum an entscheed duerno, ob eng Markéierung oder eng einfach Route duer ass.
Du fügst eng Reeg fir VPN-Trafic an der FORWARD-Kette bäi, méchs de Request vun der selwechter Linux-Maschinn, an de Compteur bleift op null. D’Reeg ass wahrscheinlech richteg. De Pak huet dësen Wee ni geholl, well e Request, deen op der Maschinn selwer entsteet, vun hir net weidergereecht gëtt. De Liewenslaf vum Pak vum Socket bis op de Kabel ze verfollegen erkläert firwat, a wou d’Reeg amplaz gehéiert.
Fann eraus, wou de Pak gebuer gouf
D’Hook-Reiefolleg vum Netfilter trennt dräi Fäll, an nëmmen een dovun ëmfaasst FORWARD:
| Origin | Path | Hook that sees it |
|---|---|---|
| Local process | OUTPUT then POSTROUTING | OUTPUT, POSTROUTING |
| Addressed to a local service | PREROUTING then INPUT | PREROUTING, INPUT |
| Received for another host | PREROUTING, FORWARD, POSTROUTING | FORWARD |
Eng lokal Applikatioun fänkt am OUTPUT-Wee un, well de Kernel schonn decidéiert huet, datt de Pak hei entsteet an ni e Kandidat fir Weiderleeung ass. En Tunnel opzebauen ännert déi Klassifizéierung net; den Tunnel ass en Apparat, duerch deen de Pak erauska kann, net eng Etapp, déi lokal Ausgab an Transit ëmwandelt.
Zwee Päck, eng Geschicht
Soubal den Tunnel steet, sinn de bannenzege Pak vun der App an de verschlësselte baussenzege Pak verschidde Saachen. De bannenzege Pak dréit d’Destinatioun an d’Payload, déi d’App gewielt huet. De baussenzege Pak dréit Chiffertext op d’Adress an de Port vum Peer, an et ass deen, deen tatsächlech duerch d’physesch Interface geet.
Deng Politik betrëfft ee vun deenen zwee, an dee falschen ze wielen ass eng heefeg Ursaach, datt eng Reeg schéngt näischt ze maachen. Eng Reeg, déi op d’baussenzeg Adress vum Peer passt, gesäit all Tunnelpak gläich, egal wat d’App banne mécht. Eng Reeg, déi op eng bannenzeg Destinatioun passt, gesäit den Trafic, dee dir wichteg ass, an u se geet nëmmen dann un, wann dee Pak de Hook erreecht, op deem s de d’Reeg installéiert hues.
Nummraim verréckelen d’Grenz
E Container mécht dëst méi schwéier, ouni de Prinzip ze änneren. De Request vun der App ass lokal Ausgab bannent dem Netzwierk-Nummraum vum Container. Den Host kritt deen Trafic op enger virtuelle Ethernet-Interface an kann en weiderleeden, dofir kann eng FORWARD-Reeg um Host sënnvoll sinn, obwuel de Prozess, deen de Request erstallt huet, ni d’OUTPUT-Kette vum Host beréiert huet.
Ier s en Hook wiels, stellt fest, wou de Reegelsatz an den Tunnel tatsächlech wunnen. En Tunnel bannent dem Container, en Tunnel um Host mat dem Container duerch en geroutet, an en Tunnel an engem separate Nummraum sinn dräi verschidden Topologien mat dräi verschiddene Reegelplazen. Liest d’Reegelen bannent dem Nummraum, deem den Apparat gehéiert, net nëmmen am Standard.
Frot, ob s iwwerhaapt eng Markéierung brauchs
Wann d’Zil ass, ee Destinatiounspräfix duerch den Tunnel ze schécken, kann eng Route fir dee Präfix duer genuch sinn. Préift fir d’éischt déi effektiv Routen, abegraff alles, wat de Server gedréckt huet: eng ëmgeleet Standardroute schéckt vill méi Trafic duerch d’VPN wéi déi schmuel Politik, déi s am Kapp hat, an keng Quantitéit Markéierung mécht d’Resultat mat der Absicht entspriechend.
Klassifizéierung ass néideg, wann d’Entscheedung vun eppes ofhänkt, wat eng Route net ausdrécke kann, wéi d’Quell, de Benotzer oder de Prozess. Fir empfangenen Trafic funktionéiert d’Markéierung am PREROUTING. Fir lokalen Trafic muss d’Markéierung an enger Ausgangsetapp passéieren, déi no dem Setzen vun der Mark eng nei Routensich ausléise kann. Mat nftables ass dat eng Kette vum Typ route um Ausgangshook; eng gewéinlech Ausgangsfilterkette setzt de Wäert an léisst d’Route onverännert.
Mat iptables läit d’Äquivalent an der mangle-OUTPUT-Uerdnung, an déiselwecht Fuerderung gëllt: d’Routing-Entscheedung muss iwwerpréift ginn, nodeem d’Mark existéiert. Duerno muss eng Politik-Reeg d’Mark konsuméieren an op eng Tabell weisen, déi eng brauchbar Route enthält. Eng conntrack-Mark ze setzen ass eng drëtt, separat Operatioun; se späichert e Wäert um Flow an setzt dee Wäert net vu sech aus op dee momentane Pak, fir datt d’Routing en liese kann.
Iwwerpréift d’Sich an de Compteur zesummen
nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1
D’Adress an d’Mark sinn illustrativ, an déi zwou Route-Froen äntweren op verschidde Froen. Déi zweet freet, wat de Kernel géif maachen, wann e Pak déi Mark droe géif; se weist net, datt deng Reegele solch eng verginn. Behändel se als Hypothesetest, net als Beweis, datt d’Politik funktionéiert.
Duerno lancéier e harmlose Request an observéier zwou Saachen zur selwechter Zäit: de Compteur um Hook, deen s gewielt hues, an den Ausgang, deen de Pak tatsächlech geholl huet. Wa sech de Compteur beweegt an de Pak soss engem fortgeet, ass d’Mark oder d’Tabell falsch. Wa sech keng vun deenen zwee beweegt, erreecht de Pak dee Hook guer net, an déi nächst Fro ass den Nummraum oder den Wee.
Zum Schluss begrenz den Test op dat, wat de Mechanismus ausdrécke kann. Eng Route fir eng Adress gëtt keng permanent Politik fir e Service, deem seng Adressen sech änneren. Decidéier fir d’éischt den Ëmfang vun de Päck, an duerno préif, ob den Design vum Routing a vun der Markéierung deen Ëmfang no enger Neiverbindung halen kann.