Firwat en macvlan-Container engem VPN-Client net äntweren kann
En macvlan-Container kann net mat sengem eegene Host schwätzen, an seng Äntwerten kënnen duerch de falschen Gateway erausgoen. Füügt eng Shim-Route op der Hostsäit bäi a wielt duerno en Quellmodell.
Stellt Iech e Linux-Host vir, deen eng VPN terminéiert an och en Container op engem macvlan-Netzwierk bedreift. D'LAN ass 192.168.60.0/24, de Container huet 192.168.60.210, an d'VPN-Clienten kommen aus 10.95.0.0/24. De Client erreecht de Service, d'Äntwert kënnt ni zréck, an all Firewall-Reeg um Host gesäit richteg aus. Zwee getrennte Beschränkungen erzeugen dëst Symptom, an eng ze fixéieren léisst déi aner op hirem Platz.
Zwee Beschränkungen, ee Symptom
Déi éischt Beschränkung ass Isolatioun: den macvlan-Treiber vun Docker léisst en Container net mat sengem eegene Host iwwer de Parent-Interface schwätzen. Den Trafic tëscht dem Host-Stack an dem Container huet keen Wee, egal wéi d'Routen um Host geschriwwe sinn.
Déi zweet Beschränkung ass de Réckwee. Den Standard-Gateway vum Container ass meeschtens de LAN-Router, dofir geet eng Äntwert un en VPN-Client duerch deen Router eraus. Wann de Router keng Route zréck an de VPN-Pool huet, gëtt d'Äntwert irgendwou an der Mëtt verworf.
Déi zwee Feeler gesinn aus der Siicht vum Client identesch aus: eng Ufro déi ukënnt an eng Äntwert déi ni kënnt. Si brauchen ënnerschiddlech Reparaturen, an eng breet Masquerade-Reeg kann verstoppen, wat vun deenen zwee nach futti ass. Dofir ass den éischten Test eng Opnam op der Containersäit an net nach eng Firewall-Ännerung. Wann d'Ufro ni do erschéngt, ass et d'Isolatiounsbeschränkung déi am Spill ass.
Baut den Shim op der Hostsäit, enk
En zweeten macvlan-Interface um Host, deen am Bréckmodus un dee selwechte Parent ugeschloss ass, gëtt dem Host-Stack seng eege Identitéit op deem LAN-Segment. Reservéiert him eng Adress ausserhalb vum DHCP-Pool an ausserhalb vum Container-Beräich, a leet just de Container duerch hien.
ip link add macvlan-vpn link eth0 type macvlan mode bridge ip address add 192.168.60.250/32 dev macvlan-vpn ip link set macvlan-vpn up ip route add 192.168.60.210/32 dev macvlan-vpn src 192.168.60.250
Déi éischt Commande erstellt den Interface am Bréckmodus, wat den dokumentéierte Standard fir dësen Treiber ass an de Modus deen Dir fir den Trafic tëscht Host a Container wëllt. Déi zweet vergëtt eng /32, sou datt d'Adress net mam LAN-Präfix kollidéiert, an déi véiert schéckt just d'Adress vum Container duerch den Shim.
Leet net d'ganzt LAN duerch den neien Interface. Déi normal verbonnen Route bleift wéi se ass, an d'Host-Route ass bewosst enk, sou datt een Container e Wee kritt ouni datt de Rescht vum Segment säi Verhalen ännert. Eng Standardroute op den Shim wier en anert Design mat aneren Konsequenzen. Halt se spezifesch, an de Schuedradius bleift kleng.
Dës Commande änneren d'Netzwierkastellungen op engem lafenden Host. Op engem Apparat oder enger geréierter Plattform benotzt deen ënnerstëtzte Konfiguratiounsmechanismus vun där Plattform, well eng interaktiv Ännerung an enger Root-Shell vläicht en Upgrade net iwwerlieft.
Entscheet wéi d'Quell erhale gëtt
Mat dem Shim op sengem Platz kann de Container den Host erreechen, an d'Fro gëtt, wéi eng Quelladress d'Äntwert dréit. Déi ursprénglech VPN-Quell z'erhalen ass dat méi propper Modell: de Container gesäit déi richteg Adress vum Client, an d'Loge an d'Zougangsregele vum Service kënnen se benotzen.
Fir datt dat funktionéiert, muss d'Netzwierkkonfiguratioun vum Container fir dëse Wee den Trafic fir 10.95.0.0/24 op 192.168.60.250 als säi Gateway schécken. Dat ass eng ënnerstëtzte Route- oder Gateway-Astellung bannent der Konfiguratioun vum Container selwer, keen Trick op der Hostsäit. Bestätegt se vun bannen am Container amplaz unzehuelen datt d'Astellung gegraff huet. En Standard-Gateway deen nach ëmmer op de LAN-Router weist, schéckt d'Äntwerten an dat selwecht Lach.
Wann dat guttgeheescht Design amplaz d'VPN-Quellen verstoppt, begrenzt d'Iwwersetzung enk: de richtegen VPN-Pool, den Shim als ausgänglechen Interface, an de konkreten Container a Service.
iptables -t nat -A POSTROUTING -s 10.95.0.0/24 -o macvlan-vpn -j SNAT --to-source 192.168.60.250
Passt den Shim als Egress-Interface un, net den Tunnel. Eng Reeg déi den Tunnel als ausgänglechen Interface nennt, passt net op e Paket Richtung Container, an dat ass de Feeler deen esou eng Installatioun meeschtens enthält. Halt d'Reeg esou enk wéi de Saz uewen a kuckt se no wann de Pool sech ännert.
Verifizéiert vum Client, net vum Host
Eng Ufro vum Host selwer, un d'Adress vum Shim gebonnen, beweist datt den Shim de Container erreeche kann. Si beweist net datt de Container den Trafic zréck un eng erhale Quell 10.95.0.x schécke kann, well d'Quelladress an deem Test déi vum Shim selwer ass.
curl -sS --interface 192.168.60.250 -o /dev/null -w '%{http_code}\n' http://192.168.60.210:8080/health
sudo tcpdump -ni macvlan-vpn host 192.168.60.210Déi éischt Commande testt deen Deel vum Host bis an de Container, an déi zweet weist wat tatsächlech duerch den Shim geet wärend e richtege VPN-Client d'Ufro mécht. Kuckt op d'Quelladress um Wee eran an ob eng Äntwert mam selwechte Floss erschéngt.
Weiderleedung muss um Host ageschalt sinn, an de Wee vun der Weiderleedung brauch eng Erlaabnes fir de VPN-Pool op den Shim um Service-Port plus etabléiert Äntwerten. Eng INPUT-Reeg um Host autoriséiert weidergeleet Trafic net, an dat ass e gemeinsame Grond firwat de Paket verworf gëtt nodeems d'Routing richteg ausgesäit.
Start déi richteg Applikatioun mat richtege Umeldungsdaten, a kontrolléiert duerno datt en zweeten, onverbonnene Service op dem selwechte Container Iech nach ëmmer refuséiert. Wann deen eenzege Wee fir et ze schaffen all Weiderleedungsreegel opzemaachen war, ass d'Design net fäerdeg. Notéiert och wéi eng Quelladress de Service registréiert huet, well dat ass wat seng eege Zougangsregele vun elo un benotzen.