Den Traffic vun enger cgroup markéieren ass den einfachen Deel. Dräi getrennte Entscheidungen mussen iwwerenee stëmmen, ier eng eenzeg Applikatioun duerch d'physesch Interface erausgeet, während alles anescht am Tunnel bleift: wéi ee Socket zur Ausnam gehéiert, wéi eng Routing-Sich de Mark ausléist, a wéi eng Quelladress de Paket dréit, wann en erausgeet. Déi meescht feelgeschloe Versich kréien déi éischt richteg, hallef déi zweet, a kucken déi drëtt ni un.

Dräi Entscheidungen, net eng

D'Klassifikatioun äntwert, wien ausgeholl ass. D'Routing äntwert, wou de markéierte Paket amplaz geet. D'Quellauswiel äntwert, wat de géigeniwwerleeënde Enn gesäit a wou d'Äntwert sollt zeréckkommen.

Dës feelen onofhängeg. E Paket kann klassifizéiert, op d'physesch Interface ëmgeleet ginn an nach ëmmer eng privat Adress droen, déi keen Upstream-Router zeréckschécke kann, wat en Timeout produzéiert, deen genau wéi e Firewall-Block ausgesäit. Näischt am Klassifikatiounsschrëtt warnt dech dervir. Näischt am Routing-Schrëtt och net.

D'Reiefolleg ass och wichteg. D'Klassifikatioun geschitt, wann de Paket generéiert gëtt, d'Routing duerno, an d'Iwwersetzung um Punkt vum Austrëtt.

Wann s de net nenne kanns, wéi ee vun den dräi Etappe futti ass, da debugges de net, da rearrangéiers de Regelen an hoffes.

Pass op eng cgroup, déi muer nach existéiert

nftables kann d'cgroup v2-Memberschaft vun engem Socket testen, wat wierklech nëtzlech ass, well et dem Prozess follegt an net dem Destinatioun. De Fallstrick ass den Identifiant. Eng Desktop-Applikatioun, déi aus engem Menü gestart gëtt, lieft dacks an engem transiente Scope, deem säin Numm sech beim nächsten Start ännert.

nft list ruleset
systemctl status session.slice 2>/dev/null
cat /proc/self/cgroup

En Scope-Numm aus enger Sessioun kopéieren an en haart kodéieren produzéiert eng Regel, déi haut funktionéiert a muer stëll ophält ze passen. Setz d'Applikatioun amplaz an en bewossten, stabile Ausféierungskontext, wéi en eegene Scope oder eng Unit, déi s de kontrolléiers, a pass op deen. D'Regel iwwerlieft dann Neistarts a Paketupdates. Et gëtt och eppes, iwwer dat e Kolleg ouni deng Sessiounshistorie nogedenke kann.

Sidd och präzis, wéi ee Mechanismus Dir benotzt. D'net_cls-Klassifikatioun vun cgroup v1 an d'Socket-Passung vun cgroup v2 si verschidde Saachen, an e gläichnammegt Feld an der Dokumentatioun mécht se net austauschbar.

Eng route-Kette ass et, déi déi zweet Sich ausléist

Fir lokal generéierten Traffic entscheet de Kettentyp, ob no dem Setze vum Mark eppes geschitt. Eng filter-Output-Kette kann e Paket markéieren an de Kernel benotzt weider de Route, deen en schonn ausgewielt huet. Eng route-Kette ass de Mechanismus, deen eng nei Sich ufreet.

table inet bypass {
  chain mark {
    type route hook output priority mangle; policy accept;
    socket cgroupv2 level 2 "app.slice" meta mark set 0x1 comment "app bypass"
  }
}
ip rule add fwmark 0x1 lookup 200
ip route add default via 203.0.113.1 dev wlan0 table 200

De Mark brauch dann eng Politikregel, déi en an eng Tabell schéckt, an déi Tabell muss komplett sinn: eng Standardroute, all lokal Destinatiounen, déi d'Applikatioun nach brauch, an en Upstream-Gateway, deen tatsächlech äntwert.

Wielt de Markwäert bewosst. WireGuard benotzt säin eege fwmark fir externen Transporttraffic, an duerch Zufall op déiselwecht Zuel ze landen kann d'Routing-Ausnam vum Tunnel selwer op eng Manéier stéieren, déi schwéier ze diagnostizéieren ass.

D'Quelladress follegt net der Route

En Socket, dee schonn eng Quelladress fir de Tunnelwee ausgewielt huet, behält déi Adress no der Ëmleitung. Näischt an der Routing-Ännerung schreift se ëm, dofir geet de Paket mat enger privater Quell duerch d'physesch Interface eraus, déi den Upstream-Netzwierk net zeréckschécke kann.

D'sichtbart Symptom ass eng Applikatioun, déi schéngt Daten ze schécken an ni eng Äntwert kritt, an e Firewall-Log, deen näischt weist, well de Paket ni zeréckkomm ass.

D'schmuel Korrektur ass eng Quell-Iwwersetzungsregel, déi op de Mark vun där Applikatioun an hir richteg Ausgangsinterface limitéiert ass, integréiert mat deem NAT, deen et schonn gëtt, amplaz en z'ersetzen:

table inet bypass {
  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept;
    meta mark 0x1 oifname "wlan0" masquerade
  }
}

Iwwersetz d'Ausnam an näischt anescht. Eng allgemeng masquerade-Regel behiewt d'Symptom an zerstéiert deng Fäegkeet, ze soen, wéi en Traffic wéi ee Wee geholl huet. Pass op de Mark, d'richteg Ausgangsinterface an, wann s de kanns, d'Adress vun der Applikatioun selwer. Breet Regele si liicht ze schreiwen a bal onméiglech méi spéit ze auditréieren.

Wat nach ëmmer aus der Ausnam entkommt

D'Nimm-Opléisung kann aus engem getrennte Resolver-Prozess an enger anerer cgroup kommen, also klassifizéiert d'Klassifikatioun vum Browser-Socket seng Siche net. Wann d'Resolvers-Ufroen am Tunnel bleiwen, während d'Verbindung dobausse geet, kënnen Split-Horizon-Äntwerten net mam Wee iwwerenee stëmmen. Dee Mëssmatch produzéiert Feeler, déi wéi DNS-Bugs ausgesinn an et net sinn.

Kannerprozesser ierwen d'cgroup an de meeschte Konfiguratiounen, awer en Helfer, dee sech a säin eegene Scope réckelt, net. Iwwerpréif amplaz unzehuelen, besonnesch fir alles, wat sech selwer nei ausféiert.

Schlussendlech entscheet, wat soll geschéien, wann den Tunnel erof ass. Eng Ausnam, déi stëll zu engem komplette Bypass gëtt, ass eng aner Sécherheetspositioun wéi eng, déi zoumécht, an nëmmen eng vun deenen zwee ass dat, wat s de gemengt hues.

Ähnlech Artikelen