Tunnilgámurinn þinn virkar, docker compose exec vpn curl -s https://ifconfig.me svarar með vistfangi þjónustuaðilans, og samt fer vafrinn á skjáborðinu þínu út um ISP-inn þinn. Það bil er eðlilegt. Gámur sem keyrir VPN-biðlara heldur nafnrými netsins, leiðum og tunnilviðmóti, og engu sem talar HTTP eða SOCKS; að birta port á honum getur ekki búið til hlustun sem var aldrei til.

Hvar biðlarinn keyrir ræður hönnuninni. Systurgámur getur flutt sig inn í nafnrými tunnilsins, skjáborðsforrit getur það ekki, og beinir þarf leiðir frekar en proxy-reit. Ef vörpunin fer rangt er einkennið það sama: tengingu hafnað eða umferð sem fer hljóðlega gömlu leiðina.

Lagaðu fyrirkomulagið að því hvar biðlarinn keyrir

Spurðu einnar spurningar áður en þú breytir Compose: er hægt að ræsa biðlarann inni í nafnrými netsins í VPN-gámanum? Allt sem þegar keyrir sem Linux-gámur getur það. Vafri, IDE eða CLI á skjáborðinu þínu getur það ekki, því proxy-stillingin hans býst við siðaregundarþjónustu, ekki nafnrými.

ClientArrangementWhat must already exist
Another Compose serviceShares the vpn namespace via network_mode: service:vpnA working tunnel and correct start order
Host browser, IDE or CLIProxy listener inside the namespace, published to host loopbackA configured SOCKS or HTTP proxy and its access rules
Router, VM or phoneThe container as a layer-3 gatewayForwarding, NAT and a return route

Þessi þrjú blandast ekki. HTTP-proxy-reitur sem bendir á brúarvistfang gámsins nær engu nema proxy hlusti þar, og proxy-hlustun beinir ekki umferð beinis. Ákveddu fyrst og fylgdu svo viðeigandi kafla.

Deildu nafnrými tunnilsins með systurgámi

Þetta er ódýrasti kosturinn því ekkert proxy-samskiptalag kemur við sögu. Forritið gengur inn í nafnrými vpn-þjónustunnar og erfir viðmót hennar, leiðir og portrými:

services:
  vpn:
    image: your-vpn-client
    cap_add:
      - NET_ADMIN
    healthcheck:
      test: ["CMD-SHELL", "ip link show tun0 >/dev/null"]
      interval: 10s
      retries: 5
  app:
    image: your-app
    network_mode: service:vpn
    depends_on:
      vpn:
        condition: service_healthy

Þrjár takmarkanir leiða af því að nafnrýmið tilheyrir annarri þjónustu. Forritið fær ekki eigin networks-lykil, því það hefur ekkert nafnrými til að festa sig við. Útgáfa porta tilheyrir vpn, því þar býr nafnrýmið. Og endursköpun vpn eyðileggur nafnrýmið sem forritið gekk inn í, svo docker compose up -d --force-recreate vpn lætur þig endurskapa app líka; venjuleg endurræsing er ekki alltaf nóg. Compose-þjónustuviðmiðið fjallar um þetta fyrirkomulag og takmörkun þess á útgáfu porta.

Ekki gera ráð fyrir að leysirinn fylgi. /etc/resolv.conf er skrá fyrir hvern gám, ekki hluti nafnrýmis netsins, svo forritið getur enn spurt leysi hýsisins á meðan pakkarnir þess fara út um tunnilinn. Lestu hana inni í gámanum og stilltu dns: á forritið þegar einkanöfn verða að leysast um tunnilinn.

docker compose exec app ip route
docker compose exec app cat /etc/resolv.conf
docker compose exec app curl -s https://ifconfig.me

Ef leiðalistinn inniheldur tunnilviðmótið og vistfangið er þjónustuaðilans er forritið inni í tunnilnum. Ef viðmótið vantar ræsti app áður en vpn hafði tunnil, svo endurskapaðu app um leið og vpn tilkynnir að það sé heilbrigt.

Settu alvöru proxy-hlustun í nafnrýmið fyrir biðlara hýsisins

Skjáborðsvafri getur ekki gengið í nafnrými, svo tunnilinn verður að afhjúpa sem þjónustu. Keyrðu alvöru SOCKS- eða HTTP-proxy inni í vpn-nafnrýminu og birtu aðeins portið hans:

services:
  vpn:
    ports:
      - "127.0.0.1:1080:1080"
  proxy:
    image: your-proxy
    network_mode: service:vpn
    command: ["--socks", "0.0.0.0:1080"]

Vistfang hýsisins er mikilvægi helmingurinn af þeirri vörpun. 127.0.0.1:1080 til vinstri heldur hlustuninni utan LAN-netsins þíns; bert "1080:1080" birtir opið proxy fyrir hvert tæki sem nær í vélina þína.

Gámahliðin hefur sína eigin gildru. Birt port eru afhent vistfangi gámsins á brúnni, ekki loopback hans, svo proxy sem ræst er með --socks 127.0.0.1:1080 inni í nafnrýminu tekur við tengingum frá systrum og hafnar öllu sem kemur um birta portið. Festu það við 0.0.0.0 og treystu loopback-bindingunni á hýsisliðnum fyrir einangrun. Sama regla gildir um hlustunarvistfangið í stillingarskrá proxys.

Ákveddu síðan hvar nöfn eru leyst. Í curl leysir --socks5 hýsisnafnið staðbundið og --socks5-hostname sendir nafnið til proxysins; vafrar sýna sama rofann undir öðru merki. Staðbundin leysing lekur fyrirspurninni jafnvel þótt síðan hlaðist um tunnilinn.

Líttu á gáminn sem gátt aðeins með bakleið

Beinir, VM og símar munu ekki nota HTTP-proxy-reit, og sum forrit hunsa proxy-breytur algjörlega. Að beina umferð þeirra þýðir lag 3: gámurinn sendir pakka áfram og þýðir vistföng á tunnilviðmótinu.

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Tvennt er auðvelt að missa. Biðlarinn þarf leið sem beinir sjálfgefnu gáttinni að þessum hýsli, og svör verða að finna leið til baka, annaðhvort um kyrra leið á ytri beininum eða um NAT á viðmótinu sem snýr að biðlurunum. Án annars hvorugts ber tunnillinn beiðnina út og svarið hverfur.

Það hefur líka víðtækustu áhrifin. Hýsill sem þjónar sem gátt fyrir allt LAN-ið sendir hvern rangstilltan biðlara um VPN-reikninginn þinn, og ef tunnillinn dettur verður LAN-ið svart eða fellur aftur á ISP-inn eftir kill switch.

Staðfestu útgangsleiðina og rúllaðu svo til baka í röð

Athugaðu í þessari röð og stöðvaðu við fyrstu bilun: útgangsvistfang inni í nafnrýminu, útgangsvistfang frá hýslinum um proxyið, síðan nafnleysing fyrir einkanýsli.

docker compose exec vpn curl -s https://ifconfig.me
curl -s -x socks5h://127.0.0.1:1080 https://ifconfig.me
curl -s -x socks5h://127.0.0.1:1080 http://internal.example/health

Fyrstu tvö vistföngin eiga að passa við þjónustuaðilann og það þriðja á að leysast um proxyið í stað þess að mistakast með nafnvillu. Passandi fyrsta lína og mistök í annarri línu þýða að hlustunin eða birta portið sé rangt, ekki tunnillinn.

Að rúlla til baka er andhverfa uppsetningarinnar. Fjarlægðu proxy-umhverfisbreyturnar úr skeljarsniðinu og úr hvaða systemd-einingu sem er, og taktu síðan staflann niður svo sameiginlega nafnrýmið hverfi með eiganda sínum. Eyðtu birta portinu áður en þú eyðir proxy-þjónustunni, annars heldur hýsillinn eftir loopback-hlustun sem enginn les.

Áður en þú heldur áfram skaltu staðfesta fjóra hluti: biðlarinn sem þér er amt um nær í raun tunnilnum, aðeins eigandi nafnrýmisins birtir port, einkanöfn leysast þar sem þú ætlaðir, og ekkert hlustar á hýsisvistfang sem er ekki loopback. Hvert þeirra bregst hljóðlaust í framleiðslu, og hvert er einnar línu athugun hér að ofan.

Tengdir greinar