Il-kontenitur tat-tunnel tiegħek jaħdem, docker compose exec vpn curl -s https://ifconfig.me iwieġeb bl-indirizz tal-fornitur, u madankollu l-browser fuq id-desktop tiegħek għadu joħroġ mill-ISP tiegħek. Dan id-distakk huwa mistenni. Kontenitur li jmexxi klijent VPN iżomm spazju tal-ismijiet tan-netwerk, rotot u interface tat-tunnel, u xejn li jitkellem HTTP jew SOCKS; li tippubblika port fuqu ma jistax joħloq semmiegħ li qatt ma kien hemm.

Fejn jaħdem il-klijent jiddeċiedi d-disinn. Kontenitur aħwa jista' jidħol fl-ispazju tal-ismijiet tat-tunnel, applikazzjoni tad-desktop ma tistax, u router jeħtieġ rotot mhux qasam tal-proxy. Jekk il-mappa tkun ħażina, is-sintomu huwa l-istess: konnessjoni miċħuda, jew traffiku li bil-kwiet jieħu l-passaġġ antik.

Qabbil l-arranġament mal-post fejn jaħdem il-klijent

Staqsi mistoqsija waħda qabel ma teditja Compose: jista' l-klijent jinbeda ġewwa l-ispazju tal-ismijiet tan-netwerk tal-kontenitur VPN? Kull ħaġa li diġà taħdem bħala kontenitur Linux tista'. Browser, IDE jew CLI fuq il-mejda tiegħek ma jistax, għax is-setting tal-proxy tiegħu jistenna servizz tal-protokoll, mhux spazju tal-ismijiet.

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

Dawn it-tlieta ma jitħalltux. Qasam tal-proxy HTTP indirizzat lejn l-indirizz tal-pont tal-kontenitur ma jilħaq xejn sakemm proxy ma jismax hemm, u semmiegħ tal-proxy ma jindirizzax it-traffiku ta' router. Iddeċiedi l-ewwel, imbagħad segwi t-taqsima li taqbel.

Aqsam l-ispazju tal-ismijiet tat-tunnel ma' kontenitur aħwa

Din l-għażla l-irħas għax ma jkun involut l-ebda protokoll tal-proxy. L-applikazzjoni tingħaqad mal-ispazju tal-ismijiet tas-servizz vpn u tirret l-interfaces, ir-rotot u l-ispazju tal-portijiet tiegħu:

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

Tliet restrizzjonijiet jinħolqu mill-fatt li l-ispazju tal-ismijiet jappartjeni għal servizz ieħor. L-applikazzjoni ma tirċevix ċavetta networks tagħha stess, għax m'għandhiex spazju tal-ismijiet li magħha tattakka. Il-pubblikazzjoni tal-portijiet tappartjeni lil vpn, għax hemm jgħix l-ispazju tal-ismijiet. U l-ħolqien mill-ġdid ta' vpn jeqred l-ispazju tal-ismijiet li magħha ngħaqdet l-applikazzjoni, għalhekk docker compose up -d --force-recreate vpn iħallik toħloq mill-ġdid ukoll app; restart sempliċi mhux dejjem biżżejjed. Ir-referenza tas-servizzi Compose tkopri dan l-arranġament u r-restrizzjoni tiegħu dwar il-pubblikazzjoni tal-portijiet.

Tassumix li r-resolver jiġi miegħu. /etc/resolv.conf huwa fajl għal kull kontenitur, mhux parti mill-ispazju tal-ismijiet tan-netwerk, għalhekk l-applikazzjoni xorta tista' tistaqsi r-resolver tal-host waqt li l-pakketti tagħha joħorġu mit-tunnel. Aqrah minn ġewwa l-kontenitur u stabbilixxi dns: fuq l-applikazzjoni meta ismijiet privati jridu jiġu riżolti mit-tunnel.

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

Jekk il-lista tar-rotot fiha l-interface tat-tunnel u l-indirizz huwa tal-fornitur, l-applikazzjoni tinsab ġewwa t-tunnel. Jekk l-interface hija nieqsa, app beda qabel ma vpn kellu tunnel, għalhekk oħloq mill-ġdid app hekk kif vpn jirrapporta li huwa f'saħħtu.

Poġġi semmiegħ tal-proxy veru fl-ispazju tal-ismijiet għall-klijenti tal-host

Browser tad-desktop ma jistax jingħaqad ma' spazju tal-ismijiet, għalhekk it-tunnel irid jiġi espost bħala servizz. Mexxi proxy SOCKS jew HTTP veru ġewwa l-ispazju tal-ismijiet vpn u ippubblika biss il-port tiegħu:

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

L-indirizz fuq in-naħa tal-host huwa n-nofs importanti ta' dik il-mappa. 127.0.0.1:1080 fuq ix-xellug iżomm is-semmiegħ 'il barra mil-LAN tiegħek; "1080:1080" mikxuf jippubblika proxy miftuħ għal kull apparat li jista' jasal sal-magna tiegħek.

In-naħa tal-kontenitur għandha n-nassa tagħha. Il-portijiet ippubblikati jitwasslu fl-indirizz tal-kontenitur fuq il-pont, mhux fil-loopback tiegħu, għalhekk proxy mibdi b'--socks 127.0.0.1:1080 ġewwa l-ispazju tal-ismijiet jaċċetta konnessjonijiet mill-aħwa u jirrifjuta kull ħaġa li tasal mill-port ippubblikat. Orbtu ma' 0.0.0.0 u afda l-irbit tal-loopback fuq in-naħa tal-host għall-iżolament. L-istess regola tapplika għall-indirizz tas-smigħ fil-fajl tal-konfigurazzjoni tal-proxy.

Imbagħad iddeċiedi fejn jiġu riżolti l-ismijiet. Fil-curl, --socks5 jirriżolvi l-isem tal-host lokalment u --socks5-hostname jibgħat l-isem lill-proxy; il-browsers juru l-istess swiċċ taħt tikketta differenti. Ir-riżoluzzjoni lokali tnixxi l-mistoqsija anki meta l-paġna tgħabba mit-tunnel.

Ittratta l-kontenitur bħala gateway biss b'rotta lura

Ir-routers, il-VMs u t-telefowns mhux se jużaw qasam tal-proxy HTTP, u xi applikazzjonijiet jinjoraw il-varjabbli tal-proxy għal kollox. L-indirizzar tat-traffiku tagħhom ifisser saff 3: il-kontenitur jgħaddi l-pakketti u jittraduċi l-indirizzi fuq l-interface tat-tunnel.

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

Żewġ affarijiet huma faċli li jintilfu. Il-klijent jeħtieġ rotta li tindirizza l-gateway awtomatiku tiegħu lejn dan il-host, u t-tweġibiet iridu jsibu t-triq lura, jew permezz ta' rotta statika fuq ir-router 'l fuq jew permezz ta' NAT fuq l-interface li tħares lejn il-klijenti. Mingħajr waħda minnhom, it-tunnel iġorr it-talba 'l barra u t-tweġiba tisparixxi.

Għandu wkoll l-akbar raġġ ta' impatt. Host li jaġixxi bħala gateway għall-LAN kollha jibgħat kull klijent ikkonfigurat ħażin mill-kont VPN tiegħek, u waqgħa tat-tunnel jew iddallam il-LAN jew terġa' lura għall-ISP skont il-kill switch.

Ivverifika l-passaġġ tal-ħruġ, imbagħad erġa' lura fl-ordni

Iċċekkja f'dan l-ordni u waqaf fl-ewwel falliment: indirizz tal-ħruġ ġewwa l-ispazju tal-ismijiet, indirizz tal-ħruġ mill-host permezz tal-proxy, imbagħad riżoluzzjoni tal-ismijiet għal host privat.

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

L-ewwel żewġ indirizzi għandhom jaqblu mal-fornitur, u t-tielet għandu jiġi riżolt permezz tal-proxy minflok ma jonqos bi żball fl-isem. L-ewwel linja taqbel u t-tieni tonqos ifisser li s-semmiegħ jew il-port ippubblikat huwa ħażin, mhux it-tunnel.

Ir-rollback huwa l-oppost tas-setup. Neħħi l-varjabbli tal-ambjent tal-proxy mill-profil tal-shell u minn kwalunkwe unità systemd, imbagħad niżżel l-istack sabiex l-ispazju tal-ismijiet kondiviż jisparixxi mal-proprjetarju tiegħu. Ħassar il-port ippubblikat qabel ma tħassar is-servizz tal-proxy, inkella l-host iżomm semmiegħ tal-loopback li ħadd ma jaqra.

Qabel ma tkompli, ikkonferma erba' affarijiet: il-klijent li jimpurtak minnu tassew jasal għat-tunnel, biss il-proprjetarju tal-ispazju tal-ismijiet jippubblika l-portijiet, ismijiet privati jiġu riżolti fejn kien beħsiek, u xejn ma jisma' fuq indirizz tal-host li mhuwiex loopback. Kull wieħed minn dawn jonqos bil-kwiet fil-produzzjoni, u kull wieħed huwa verifika ta' linja waħda hawn fuq.

Artikli relatati