Oibríonn do choimeádán tolláin, freagraíonn docker compose exec vpn curl -s https://ifconfig.me le seoladh an tsoláthraí, agus fós fhágann an brabhsálaí ar do dheasc trí do ISP. Tá an bhearna sin le súil. Coinníonn coimeádán a ritheann cliant VPN spás ainmneacha líonra, róid agus comhéadan tolláin, agus rud ar bith a labhraíonn HTTP nó SOCKS; ní féidir le port a fhoilsiú air éisteoir nach raibh ann riamh a chruthú.

Cinneann an áit a ritheann an cliant an dearadh. Is féidir le coimeádán comharsanachta bogadh isteach i spás ainmneacha an tolláin, ní féidir le feidhmchlár deisce, agus tá róid de dhíth ar ródaire seachas réimse seachfhreastalaí. Má dhéanann tú an mapáil mícheart, is é an tsiomptóm céanna: nasc diúltaithe, nó trácht a thógann an seanchosán go ciúin.

Meaitseáil an socrú leis an áit a ritheann an cliant

Cuir ceist amháin sula gcuireann tú Compose in eagar: an féidir an cliant a thosú laistigh de spás ainmneacha líonra an choimeádáin VPN? Is féidir le haon rud a ritheann cheana mar choimeádán Linux. Ní féidir le brabhsálaí, IDE nó CLI ar do dheasc, mar go bhfuil a shocrú seachfhreastalaí ag súil le seirbhís phrótacail, ní le spás ainmneacha.

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

Ní mheascann na trí seo. Ní shroicheann réimse seachfhreastalaí HTTP atá dírithe ar sheoladh droichid an choimeádáin aon rud mura bhfuil seachfhreastalaí ag éisteacht ansin, agus ní ródaíonn éisteoir seachfhreastalaí trácht ródaire. Socraigh ar dtús, ansin lean an chuid chomhfhreagrach.

Roinn spás ainmneacha an tolláin le coimeádán comharsanachta

Is é seo an rogha is saoire mar nach bhfuil aon phrótacal seachfhreastalaí i gceist. Téann an feidhmchlár isteach i spás ainmneacha sheirbhís vpn agus faigheann sé a chomhéadain, a róid agus a spás port mar oidhreacht:

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

Leanann trí shrian ón bhfíric gur le seirbhís eile an spás ainmneacha. Ní fhaigheann an feidhmchlár a eochair networks féin, mar nach bhfuil spás ainmneacha aige le ceangal leis. Baineann foilsiú port le vpn, mar is ann atá an spás ainmneacha. Agus scriosann athchruthú vpn an spás ainmneacha a ndeachaigh an feidhmchlár isteach ann, mar sin fágann docker compose up -d --force-recreate vpn leat app a athchruthú freisin; ní leor atosú simplí i gcónaí. Clúdaíonn tagairt seirbhísí Compose an socrú seo agus a shrian ar fhoilsiú port.

Ná glac leis go dtagann an réiteoir leis. Is comhad in aghaidh an choimeádáin é /etc/resolv.conf, ní cuid de spás ainmneacha an líonra, mar sin is féidir leis an bhfeidhmchlár réiteoir an óstaigh a fhiafraí fós agus a phaicéid ag fágáil tríd an tollán. Léigh é ón taobh istigh den choimeádán agus socraigh dns: ar an bhfeidhmchlár nuair is gá ainmneacha príobháideacha a réiteach tríd an tollán.

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

Má tá comhéadan an tolláin sa liosta róid agus gurb é seoladh an tsoláthraí an seoladh, tá an feidhmchlár istigh sa tollán. Má tá an comhéadan ar iarraidh, thosaigh app sular raibh tollán ag vpn, mar sin athchruthaigh app a luaithe a thuairiscíonn vpn go bhfuil sé sláintiúil.

Cuir fíor-éisteoir seachfhreastalaí sa spás ainmneacha do chliaint an óstaigh

Ní féidir le brabhsálaí deisce dul isteach i spás ainmneacha, mar sin caithfear an tollán a nochtadh mar sheirbhís. Rith fíor-sheachfhreastalaí SOCKS nó HTTP laistigh de spás ainmneacha vpn agus foilsigh a phort amháin:

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

Is é seoladh thaobh an óstaigh an leath tábhachtach den mhapáil sin. Coinníonn 127.0.0.1:1080 ar chlé an t-éisteoir amach ó do LAN; foilsíonn "1080:1080" lom seachfhreastalaí oscailte do gach gléas ar féidir leis do mheaisín a shroicheadh.

Tá a ghafa ag taobh an choimeádáin féin. Seachadtar poirt fhoilsithe chuig seoladh an choimeádáin ar an droichead, ní chuig a loopback, mar sin glacann seachfhreastalaí a tosaíodh le --socks 127.0.0.1:1080 laistigh den spás ainmneacha le naisc ó chomharsana agus diúltaíonn sé do gach rud a thagann tríd an bport foilsithe. Ceangail le 0.0.0.0 é agus bí ag brath ar cheangal loopback thaobh an óstaigh le haghaidh leithlise. Tá an riail chéanna i bhfeidhm maidir leis an seoladh éisteachta i gcomhad cumraíochta seachfhreastalaí.

Ansin socraigh cá réitítear ainmneacha. I curl réitíonn --socks5 ainm an óstaigh go háitiúil agus seolann --socks5-hostname an t-ainm chuig an seachfhreastalaí; nochtann brabhsálaithe an t-athrú céanna faoi lipéad eile. Scaoileann réiteach áitiúil an fhiosrú fiú nuair a luchtaítear an leathanach tríd an tollán.

Caith le coimeádán mar gheata ach amháin le ród ar ais

Ní úsáidfidh ródairí, VManna agus fóin réimse seachfhreastalaí HTTP, agus déanann roinnt feidhmchlár neamhaird iomlán de na hathróga seachfhreastalaí. Ciallaíonn ródú a dtráchta ciseal 3: seolann an coimeádán paicéid ar aghaidh agus aistríonn sé seoltaí ar chomhéadan an tolláin.

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

Tá dhá rud éasca a chailleadh. Teastaíonn ród ón gcliant a dhíríonn a gheata réamhshocraithe ar an óstach seo, agus caithfidh freagraí an bealach ar ais a aimsiú, trí ród statach ar an ródaire suas an tsrutha nó trí NAT ar an gcomhéadan atá dírithe ar na cliaint. Gan ceann acu, iompraíonn an tollán an t-iarratas amach agus imíonn an freagra.

Tá an ga tionchair is leithne aige freisin. Seolann óstach atá ina gheata don LAN ar fad gach cliant míchumraithe trí do chuntas VPN, agus má thiteann an tollán, cuireann sé an LAN i ndorchadas nó filleann sé ar an ISP ag brath ar an kill switch.

Fíoraigh an cosán amach, ansin rollaigh siar in ord

Seiceáil san ord seo agus stop ag an gcéad teip: seoladh amach laistigh den spás ainmneacha, seoladh amach ón óstach tríd an seachfhreastalaí, ansin réiteach ainmneacha d'óstach príobháideach.

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

Ba cheart don chéad dá sheoladh teacht leis an soláthraí, agus ba cheart an tríú ceann a réiteach tríd an seachfhreastalaí in ionad teip le hearráid ainm. Ciallaíonn an chéad líne a mheaitseáil agus an dara líne a theip go bhfuil an t-éisteoir nó an port foilsithe mícheart, ní an tollán.

Is é an rolladh siar a mhalairt den socrú. Bain na hathróga timpeallachta seachfhreastalaí as próifíl an bhlaosc agus as aon aonad systemd, ansin tóg an stac síos ionas go n-imíonn an spás ainmneacha comhroinnte lena úinéir. Scrios an port foilsithe sula scriosann tú an tseirbhís seachfhreastalaí, nó coimeádann an t-óstach éisteoir loopback nach léann aon duine.

Sula dtéann tú ar aghaidh, deimhnigh ceithre rud: sroicheann an cliant a bhfuil cúram ort faoi an tollán i ndáiríre, ní fhoilsíonn ach úinéir an spáis ainmneacha poirt, réitítear ainmneacha príobháideacha san áit a raibh sé beartaithe agat, agus ní éisteann aon rud ar sheoladh óstaigh nach loopback é. Teipeann gach ceann acu go ciúin i dtáirgeadh, agus is seiceáil aon líne thuas gach ceann acu.

Ailt ghaolmhara