Ien Linux-akkount troch OpenVPN liede mei in UID-regel
In uidrange-regel set de IPv4-sockets fan ien akkount yn in besteande tunnel sûnder namespace. Beslis apart oer DNS, IPv6 en fallback, en ferifiearje dan.
Akkountbasearre rûting past as elke IPv4-socket fan ien Linux-brûker troch in besteande tunnel ferlitte moat, en it past net as jo isolaasje op programmanivo nedich hawwe. It kiest op UID, dus alles wat ûnder dat akkount rint is yn it berik, ek de batch-taak dy't jo fergetten binne. Beklaai dy fraach foardat jo ien ip rule oanreitsje.
It foarbyld hjirûnder giet út fan in eigen browserakkount op UID 1500, in tunnelapparaat tun-office mei lokaal adres 10.80.0.11, en in VPN dy't de oanbelangjende bestimmings tastean. De daemon sels rint bûten dat UID.
Trije betingsten dy't it meganisme kieze
Kies in UID-regel as de identiteit dy't it wurk docht it akkount is, as it ferpleatsen fan al syn ferkear akseptabel is, en as in namespace swierder wêze soe as de taak fertsjinnet. Kies in netwurk-namespace as de wurklêst eigen ynterfaces, resolver en rûtingstabel nedich hat. Kies in proxy of in bining per proses as persiis ien applikaasje ferpleatse moat wylst de rest fan de sesje op it lokale paad bliuwt. It opskriuwen fan dy trije foarkomt in regel dy't stil mear dekt as bedoeld.
De flater om te foarkommen is oan te nimmen dat in starter de eigner bepaalt. In browser dy't in URL fan de sesje fan in oare brûker krijt, hat gjin sockets ûnder UID 1500 makke, en gjin regel sil it ferkear dat er generearret ferpleatse.
De tabel, de regel en de wachter
Nei it kontrolearjen fan besteande regels en it kiezen fan ûnbrûkte tabel- en prioriteitsnûmers is de oardering koart: in standertrûte yn in eigen tabel dy't it boarne-adres fan de tunnel draacht, in regel dy't de opsochten fan it akkount nei dy tabel stjoert, en in ôfslutende regel dy't de fallback blokkearret. Utskreaun is dat in idempotinte rûteferfanging, ip -4 route replace default dev tun-office src 10.80.0.11 table 51820, folge troch ip -4 rule add priority 12100 uidrange 1500-1500 lookup 51820.
De wachter is ip -4 rule add priority 12101 uidrange 1500-1500 unreachable, en it makket mear út as syn lingte suggerearret. Sûnder him falt in ûntbrekkende rûte yn tabel 51820 troch nei de gewoane uplink en lekt it akkount stil ferkear dat it belied fange moatten hie. Mei him wurdt deselde flater in timeout, dus blokkearjen ynstee fan fallback.
Hâld de normale regel foar lokaal adres foar dizze, en beslis bewust oft LAN- of behearsútsûnderingen foar de keazen tabel hearre. In standertrûte dy't dêr fûn wurdt, freget letter net main om in mear spesifike LAN-rûte, wat minsken ferrast dy't ferwachtsje dat langste-prefiks-oerienkomst oer tabellen jildt. Skriuw de bedoelde útsûnderingslist yn de feroaringsnotysje wylst de redenearring noch farsk is.
Wat UID-rûting weilitten: DNS
In resolver-daemon iepenet syn upstream-sockets ûnder syn eigen UID, dus it kiezen fan 1500 ferpleatst dy fragen net nei tabel 51820. DNS-yntergrasje is in aparte beslissing: rjochtsje it akkount op in resolver dy't troch de tunnel berikber is, of akseptearje dat namme-oplossing it paad fan de host folget wylst ferkear dat net docht.
In loopback-fraach nei in lokale stub is gjin bewiis dat de upstream-fraach de rûte fan de browser brûkte, en in slagge sidebelasting út de cache ek net.
IPv6 hat syn eigen sin yn it ûntwerp nedich
De regels hjirboppe dekke allinnich IPv4. As de eask in IPv4-tunnel is sûnder direkte IPv6 fan dit akkount, foegje in neisjoen ôfslutende regel ta lykas ip -6 rule add priority 12101 uidrange 1500-1500 unreachable, en kontrolearje dan eardere IPv6-regels plus de loopback-útsûnderingen dy't jo hâlde wolle.
Direkte IPv6 blokkearje is gjin dual-stack-tunneljen; it is in grins. It tunneljen neame sil de folgjende persoan dy't it belied lêst yn de war bringe, en de betizing komt nei boppen as in helpdesk-kaartsje oer in stikken IPv6-side.
Ferifiearje mei it echte akkount, en nim dan de libbenssyklus oer
Fergelykje opsochten: ip -4 route get 198.51.100.25 uid 1500 tsjin deselde bestimmingsplak mei in gewoane UID. Doch dan in tastiene oanfraach ûnder it eigen akkount en kontrolearje it boarne-adres dat de fiere kant sjocht. In foarkar-boarne-adres is gjin source NAT, en it sil in applikaasje dy't eat oars bynt net oerhearskje. As beide opsochten itselde paad weromjouwe, docht de regel net wat jo tinke.
Hâld de tabel, de regels en de libbensdoer fan de tunnelrûte ûnder ien eigner, test in werferbining en in tunnelferlies, en ferwiderje by it ôftsjen fan it belied allinnich syn krekte ynskriuwingen. In namespace is noch altyd beskikber as aparte ynterfaces en aparte steat binne wat jo echt nedich hawwe.