Dräi Linux-Hosten, een Entworf: en ëffentlech erreechbaren OpenVPN-Hub, e Konsumentelaptop an eng Ausgangsmaschinn hannert engem gewéinlechen Heemrouter, deen näischt no bannen weiderleet. Den Ausgang wielt sech selwer beim Hub an. Duerno geet de Konsument sengen Internetverkéier um Laptop an den Tunnel eran a kënnt iwwer den eegenen Uplink vum Ausgang eraus. Alles wat iwwerrascht un dësem Opbau kënnt aus engem Detail: den Ausgang huet d'Verbindung opgebaut, also existéiert de Wee no bannen schonn an et brauch keng Portweiderleedung fir en ze schafen.

Dëst verfollegt de Wee vum Paket an net d'Reiefolleg vun der Konfiguratioun, well d'Konfiguratioun gëtt eréischt sënnvoll, wann ee weess, wéi eng Komponent wéi eng Decisioun hält. All Schicht hält genee eng Decisioun, an d'Feeler sammelen sech do, wou zwou Schichte fir eng gehal ginn.

Zwou Transportsitzungen, een bannenzege Wee

All Host hält seng eegen baussenzeg Verbindung zum Hub, a keng vun dëse Verbindunge weess vun der anerer. De Verkéier vum Konsument an den Internet ass en eegene bannenzege Floss, deen am Tunnel vum Konsument gedroe gëtt an duerno aus dem Tunnel vum Ausgang erëm ausgesend gëtt. Genee dëse bannenzege Floss muss den Hub routeieren, an deen muss den Ausgang weiderleeden.

outer: consumer --TLS--> hub
outer: exit     --TLS--> hub
inner: consumer --tun--> hub --internal--> exit --tun--> uplink

Well béid baussenzeg Verbindunge vun der Clientsäit aus no baussen ginn, gesäit den Router vum Ausgang ni en agehende SYN an huet ni eng Destinatiouns-NAT-Regel néideg. En muss just den etabléierten Transport lieweg halen, wat en och schonn fir all laangfristeg Verbindung mécht. Nichts um ëffentlechen Internet muss den Ausgang als éischt erreechen, dofir ass eng dynamesch Adress op deem Uplink keng Problematik. Den Router muss awer nach ëmmer déi erausgänglech Sitzung erlaben, awer dat ass déiselwecht Erlaabnis, déi e Browser schonn benotzt.

Wat iroute tatsächlech am Server installéiert

Den Hub ass déi eenzeg Apparatur, déi decidéiert, wéi engem Peer wéi eng Destinatioun gehéiert, an en hëlt déi Decisioun a senger eegener Userspace-Routingtabell, net an där vum Kernel. En client-config-dir-Antrag fir den Ausgang mam Numm exit-node kann do de Standardprefix verlaangen:

# /etc/openvpn/server/ccd/exit-node
iroute 0.0.0.0 0.0.0.0

Dës Linn seet dem Serverprozess "bannenzeg Pakete mat enger beliebeger Destinatioun gehéieren dësem Client". Se füügt dem Betribssystem vum Hub keng Standardroute bäi an et mécht den Hub net zu enger Internetpaart. OpenVPN-2.6-Referenz hält clientspezifescht internen Routing a Kernel-Routing als getrennte Mechanismen, an déi Trennung ass de Grond, firwat dësen Entworf funktionéiert, ouni d'Standardroute vum Hub ze beréieren.

De Konsument brauch déi spigelverkéiert Instruktioun, als Push geliwwert, sou datt säin eegene Verkéier an den Tunnel geet amplaz iwwer säi lokale Gateway erauszefueren. Bei Subnetz-Topologie ass de Pool eng verbonnen Route um tun-Apparat vum Ausgang, dofir brauch d'Réckrichtung keen zousätzleche Push; wat den Ausgang net kréie soll, ass d'Ëmleedung hei drënner, déi säin eegene Uplinkverkéier zréck an den Tunnel schécke géif, deen en ze benotzen probéiert. Schéckt se just un de Konsument a liest déi ugewannte Route beim Client, amplaz ze vertrauen, datt d'CCD-Datei ausgewielt gouf.

# /etc/openvpn/server/ccd/consumer-01
push "redirect-gateway def1"

De Kernel vum Ausgang mécht d'Weiderleedung

Am Ausgang kënnt e Paket vum Konsument um tun-Interface un, adresséiert un en Internet-Host. De Kernel konsultéiert seng Routingtabell, fënnt den eegentlechen Uplink als bescht Iwwerenee a wendt dann zwou onofhängeg Politiken un: däerf dëse Paket iwwerhaapt weidergeleet ginn, an däerf en iwwer dësen Interface mat där Quelladress eraus. Weiderleedung ass e sysctl, an en ass bei ville Distributiounen standardméisseg aus.

Den Ausgang brauch also dauerhaft ageschalt IPv4-Weiderleedung, eng Regel déi d'Tunnelquellen vum Konsument zum Uplink erlaabt, an de Réckwee zréck iwwer den tun. Weiderleedung fir de ganzen Host anzeschalten ännert och d'Verhalen vun allem aneren, wat duerch en geroutet gëtt, dofir soll d'Regel d'Quellen an d'Interface nennen amplaz alles unzehuelen.

De Réckwee gëtt duerch QuellIwwersetzung kaaft

En Internet-Host huet keng Route op eng 10.90.0.x-Adress, dofir géifen Äntwerten verworf ginn, ier se den Ausgang iwwerhaapt erreechen. D'Quell ëmschreiwen, wärend de Paket den Uplink verléisst, léist dat, an d'Verbindungsverfolgung hëlt d'Ëmschreiwung um Réckwee zeréck.

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.90.0.0/24 -o enp1s0 -j MASQUERADE
ip -4 route get 10.90.0.9   # run on the exit: must point at the tun

D'Regel hei uewen ass en Ausgangspunkt fir een Uplink-Interface, keng Firewallpolitik. Verenkt d'Quell op d'Zoudeelungen, déi Dir tatsächlech autoriséiert hutt, a haalt dem Ausgang seng eegen Inputpolitik getrennt, sou datt d'Maskéierung vum Tunnelverkéier lokal Servicer net roueg bloossleet. Op engem Host mat enger dynamescher Uplinkadress spuert Iech d'Maskéierung och d'Adress manuell ze verfollegen.

Wou den Hub duerchsetze kann an wou net

Mat client-to-client an dem traditionellen Userspace-Datenwee gëtt den Hub bannenzeg Pakete tëschent Peers am Serverprozess weider. Se ginn ni duerch d'Kernel-FORWARD-Kette vum Hub, dofir kann eng Kernelregel do den Transit tëschent Peers net beschränken, sou suergfälteg wéi se och geschriwwe ka sinn. Duerchsetzung muss an der eegener Politik vum Server liewen: wien sech däerf verbannen, wéi eng CCD-Datei en kritt a firwat den Ausgang säi Standardbesëtz iwwerhaapt kritt.

Dofir ass en Standard-iroute eng breet Vertrauensentscheedung. Den Ausgang muss de Réckverkéier vun arbiträren Internetadressen rechtméisseg unhuelen, an en muss eng Maschinn sinn, déi Dir kontrolléiert, fléckt an iwwerwaacht. Dee selwechte Besëtz engem Peer ze ginn, deem Dir keen Router uvertraue géift ass de Feeler, op deen dësen Entworf alued.

Memberschaft ass déi richteg Kontroll. All Client, dee seng eegen Route konfiguréiere kann, kann probéieren den Ausgang ze benotzen, dofir ass d'Beschränkung, wien sech däerf verbannen oder wéi eng Peers den Ausgang déngt, en Deel vum Entworf an net en Nodénken.

Sécher feelen, wann den Ausgang verschwënnt

Hält den Ausgang offline an de bannenzege Standardbesëtz verschwënnt mat senger Sitzung. Wat net dierf geschéien ass, datt den Hub roueg den Ersatzausgang gëtt: keng Standardroute aus dem VPN-Pool an den Uplink vum Hub, a keng breet Maskéierungsregel um Hub, déi dee selwechte Verkéier gär weiderleede géif. Test dëse Feeler bewosst, an dann test d'Erhuelung mat engem frësche Floss an net mat enger Säit, déi schonn op war.

# on the consumer, with the exit up and then down
ip -4 route get 1.1.1.1
curl -sS -o /dev/null -w '%{http_code}\n' https://example.com

Wann de Verkéier vum Konsument nom Verschwanne vum Ausgang nach ëmmer den Internet erreecht, dréit en eppes aneres a Grenz, déi Dir geduecht hutt, existéiert net. Behandelt DNS an IPv6 och als getrennte Decisiounen: eng IPv4-Route plus Maskéierung seet näischt iwwer AAAA-Verkéier, an e Resolver, deen den Hub dréckt, äntwert vun do wou d'Ufro tatsächlech erausgeet.

Ähnlech Artikelen