App inne i eit VPN-namnerom er ikkje tilgjengeleg frå LAN
Eit nettverksnamnerom gir eitt program sin eigen tunnel og sin eigen loopback. Publiser berre porten med eit socat-hopp eller eit veth-par i staden for verten.
Tenesta di køyrer på maskina, tunnelen er oppe, og likevel ventar nettlesaren på skrivebordet ditt framleis på svar. Ingenting er øydelagt i vanleg forstand: applikasjonen lyttar inne i eit nettverksnamnerom, og den stakken er usynleg for LAN-et. Loopbacken høyrer til namnerommet, så ein klient på ei anna maskin har inga adresse som når porten. Eitt medvite hopp, eller eitt veth-par, ordnar det utan å flytte resten av verten.
Kvifor ingenting svarar på LAN-adressa
Eit namnerom er ein komplett nettverksstakk: grensesnitt, ruter, brannmurreglar og ein privat loopback. Ein prosess starta gjennom ip netns exec ser den stakken og ingenting anna, så adressa han bind til vert løyst berre inne i namnerommet. Vertens eigen 127.0.0.1 er ein heilt annan loopback.
Difor feilar curl på verten medan den same kommandoen inne i namnerommet lukkast. Applikasjonen er sunn; adressa finst rett og slett ikkje i stakken til verten.
Publiser éin port med eit socat-hopp
socat byggjer bru mellom dei to stakkane i brukarrommet, og det er nok når ein einaste TCP-port skal krysse. Vertssida lyttar på LAN-et og startar for kvar aksepterte tilkobling ein andre socat inne i namnerommet som koplar til loopbacken til appen. Den indre prosessen når applikasjonen akkurat slik ein lokal klient ville gjere. Ingenting i rutinga til namnerommet blir endra, så appen held fram med å bruke tunnelen som einaste utgang.
socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork
Den ytre prosessen treng root eller retta til å gå inn i namnerommet. Viss VPN-et fell, mistar appen vegen sin, og den publiserte porten feilar lukka, og det er åtferda du vil ha frå eit fengsel.
Bruk eit veth-par når meir enn éin port kryssar
Eit veth-par er det rette svaret når fleire portar eller protokollar må krysse, eller når andre vertar må starte tilkoblingar. Den eine enden blir i verten, den andre flyttar inn i namnerommet, og ein liten /30 gir begge sider ei stabil adresse. Ei vertsrute sender deretter adressa til namnerommet over paret.
ip link add veth0 type veth peer name veth1
ip link set veth1 netns vpn
ip addr add 10.77.0.1/30 dev veth0
ip link set veth0 up
ip netns exec vpn ip addr add 10.77.0.2/30 dev veth1
ip netns exec vpn ip link set veth1 up
Ikkje legg til ei standardrute gjennom verten med mindre du har tenkt å bryte fengselet. Tunnelen skal halde fram som utgang, så berre den publiserte tenesteadressa er nåbar over paret. Gi namnerommet òg si eiga resolver-fil, fordi ip netns exec les /etc/netns/vpn/resolv.conf, og utan henne er namneoppslaget inne i fengselet tomt.
Test frå ei anna maskin, ikkje frå verten
Køyr testen frå ei anna maskin, fordi verten kan nå ein lokal lyttar via vegar som ikkje seier noko om LAN-et. Sjekk først kva applikasjonen faktisk bant til inne i namnerommet, og kople deretter til den publiserte adressa utanfrå. Å binde til kvar adresse der utvidar ikkje fengselet, fordi jokerteiknet framleis høyrer til namnerommet, og LAN-et kan ikkje sjå det.
ip netns exec vpn ss -lntp
Viss tilkoblinga frå verten verkar og tilkoblinga frå LAN-et ikkje, er den manglande delen hoppet eller ruta, ikkje bindeadressa. Start OpenVPN inne i namnerommet i staden for å flytte ein levande tun-eining inn i det, sidan flytting av grensesnittet tek det ned og kan fjerne ruter du deretter ikkje kan reparere utanfrå. Hald gjenopprettingskommandoane på konsollen, ikkje inne i fengselet.