Kif tiddirieġi t-traffiku tal-host permezz ta' kontenitur Docker VPN
Kontenitur VPN huwa spazju tal-ismijiet tan-netwerk, mhux proxy. Agħżel netns kondiviż, semmiegħ SOCKS veru jew gateway indirizzat, imbagħad ivverifika l-passaġġ tal-ħruġ.
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.
| Client | Arrangement | What must already exist |
|---|---|---|
| Another Compose service | Shares the vpn namespace via network_mode: service:vpn | A working tunnel and correct start order |
| Host browser, IDE or CLI | Proxy listener inside the namespace, published to host loopback | A configured SOCKS or HTTP proxy and its access rules |
| Router, VM or phone | The container as a layer-3 gateway | Forwarding, 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_healthyTliet 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.meJekk 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/healthL-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.