Mae cynhwysydd na all gyrraedd unrhyw beth y tu ôl i’r VPN corfforaethol fel arfer yn byw mewn gofod enw rhwydwaith gwahanol i’r twnnel. Mae llwybrau cleient y gwesteiwr, gweinyddwyr DNS a marciau’r wal dân yn perthyn i stac y gwesteiwr; mae gan gynhwysydd rhwydwaith pont ei stac ei hun. Mae’r un ffaith honno’n esbonio’r rhan fwyaf o’r adroddiadau sy’n cyrraedd tîm llwyfan, a dyna hefyd pam y gall «mae’r VPN wedi torri» a «mae Docker yn osgoi’r VPN» fod yn anghywir ar yr un pryd. Mae dau drefniant hollol wahanol yn cuddio y tu ôl i un symptom, felly nodwch pa un sydd gennych cyn newid unrhyw osodiad.

Darganfyddwch bwy sy’n berchen ar y twnnel

Ar Docker Desktop ar gyfer macOS neu Windows mae cynwysyddion yn rhedeg y tu mewn i beiriant rhithwir Linux. Mae cleient VPN a osodwyd ar y bwrdd gwaith yn creu twnnel yn system weithredu’r bwrdd gwaith, ac nid yw’r peiriant rhithwir byth yn ei weld. Nid oes unrhyw ffurfweddiad cynhwysydd yn trwsio hynny, oherwydd nid yw’r rhyngwyneb y byddai’r cynhwysydd ei angen yn bodoli o gwbl yn ei ofod enw rhwydwaith.

Ar westeiwr Linux mae’r twnnel yn byw yng ngofod enw’r gwesteiwr, ac mae cynwysyddion pont fel arfer yn ei gyrraedd trwy dabl llwybro’r gwesteiwr gyda NAT ffynhonnell yn cael ei gymhwyso ar y ffordd allan. Pan fydd y llwybr hwnnw’n methu, yr achos fel arfer yw polisi anfon ymlaen, hidlo llwybr cefn neu is-rwydwaith sy’n gorgyffwrdd yn hytrach na llwybr coll. Cadarnhewch ym mha un o’r ddau fyd ydych chi cyn darllen ymhellach:

docker info --format '{{.OperatingSystem}}'
docker run --rm --net=host alpine ip route | head -5
docker run --rm alpine ip route | head -5

Mae’r gwahaniaeth rhwng y ddau dabl llwybro hynny’n ddigon i ddangos yr holl broblem ar un sgrin. Os yw golygfa’r gwesteiwr yn cynnwys y rhyngwyneb twnnel ac nid yw golygfa’r bont, rydych yn edrych ar ynysu gofod enw, a’r gweddill i gyd yw dewis sut i’w chroesi.

Prawf yw rhwydweithio’r gwesteiwr, nid dyluniad

Mae rhedeg cynhwysydd gyda rhwydweithio’r gwesteiwr, y mae Docker yn ei ddogfennu fel rhannu gofod enw rhwydwaith y gwesteiwr, yn golygu ei fod yn etifeddu’r rhyngwyneb twnnel a’i lwybrau’n uniongyrchol. Os bydd yr un cais yn llwyddo wedyn, mae’r theori llwybr wedi’i chadarnhau a’r methiant yw ynysu gofod enw yn hytrach na chrediadau, DNS neu reol mynediad.

docker run --rm --net=host curl -sS -o /dev/null -w '%{http_code}\n' https://api.internal/health

Cadwch ef fel diagnosis. Mae rhwydweithio’r gwesteiwr yn rhoi’r gorau i gyhoeddi porthladdoedd ac i’r rhan fwyaf o’r ynysu yr oeddech ei eisiau gan gynhwysydd, ac ar Docker Desktop mae «host» yn golygu’r peiriant rhithwir, nid y bwrdd gwaith, felly gall llwyddiant neu fethiant yno eich camarwain os byddwch yn anghofio pa westeiwr oeddech yn ei gyfarch.

Dyfais tun a’r breintiau sy’n dod gyda hi

Mae cleient VPN y tu mewn i’r cynhwysydd angen dyfais twnnel a chaniatâd i’w ffurfweddu. Y llwybr byr arferol yw --privileged, sy’n rhoi pob dyfais ac yn llacio polisi diogelwch ar draws y cynhwysydd. Mae hynny’n llawer mwy nag y mae’r dasg hon yn ei ofyn, ac mae’n anodd ei gyfiawnhau mewn adolygiad.

sudo modprobe tun
docker run --rm -it --device /dev/net/tun --cap-add NET_ADMIN myvpn-client

Mae’r ffurf gulach yn mapio’r un nod dyfais ac yn ychwanegu dim ond y gallu gweinyddu rhwydwaith. Llwythwch y modiwl ar y gwesteiwr yn gyntaf fel bod y nod yn bodoli. Os yw’r cynhwysydd yn cychwyn ac mae’r cleient yn adrodd na all agor y ddyfais twnnel, gwiriwch y mapio cyn amau’r proffil, oherwydd mae’r gwall hwnnw fel arfer yn llythrennol.

Mae’r dyluniad hwn hefyd yn golygu bod y cleient yn rhedeg fesul cynhwysydd. Dyma’r ateb cywir pan fydd angen twnnel ei hun ar bob llwyth gwaith, a’r ateb anghywir pan oeddech ond am i dwnnel y gwesteiwr fod yn weladwy, sef yr hyn y tybiai tîm llwyfan yn ôl pob tebyg eich bod yn ei wneud.

Mae NAT y bont yn newid y ffynhonnell y mae’r VPN yn ei gweld

Gyda’r bont ragosodedig mae traffig allanol y cynhwysydd yn cael ei gyfieithu i gyfeiriad y gwesteiwr. Y tu ôl i VPN felly mae’r ochr gorfforaethol yn gweld cyfeiriad twnnel y gwesteiwr yn hytrach na chyfeiriad y cynhwysydd, mae rheolau mynediad fesul ffynhonnell yn ymddwyn fel pe bai’r gwesteiwr wedi gwneud y cais, ac mae dau gynhwysydd yn mynd yn anwahanadwy i weinydd y VPN.

Mae macvlan neu ipvlan yn rhoi cyfeiriad LAN i’r cynhwysydd yn lle hynny, sy’n helpu darganfod yn y LAN ac yn gwneud i’r cynhwysydd edrych fel cymar ar y segment. Mae hefyd yn osgoi twnnel y gwesteiwr yn gyfan gwbl, felly ni fydd cynhwysydd o’r fath yn cyrraedd rhagddodiaid VPN-yn-unig oni bai bod y VPN yn hygyrch o’r LAN hwnnw hefyd.

Mae’r ddwy ffurf yn ddilys; maent yn ateb gofynion gwahanol. Os mai’r gofyniad yw «rhaid i’r cynhwysydd hwn gyrraedd gwasanaeth VPN-yn-unig», rydych yn dewis rhwng llwybro trwy’r gwesteiwr a therfynu’r twnnel y tu mewn i’r cynhwysydd. Ysgrifennwch y dewis hwnnw cyn y defnydd, nid ar ôl y cais cyntaf aflwyddiannus. Pa un bynnag a ddewiswch, cofnodwch y cyfeiriad ffynhonnell y bydd y pen pell yn ei weld, oherwydd dyna fydd ei reolau mynediad a’i logiau yn ei ddangos. Nid yw dyluniad na all nodi’r cyfeiriad hwnnw yn barod.

Mae DNS yn dilyn y daemon, nid y twnnel

Mae cynhwysydd yn cael ei ffurfweddiad datryswr pan fydd yn cychwyn, wedi’i gopïo o’r daemon neu o’r ddelwedd. Mae cyfeiriadau a wthir gan y VPN ar ôl iddi gysylltu yn cyrraedd yn rhy hwyr ar gyfer y copi hwnnw, ac fe’u gwthir i ddatryswr y gwesteiwr yn hytrach nag i’r cynhwysydd.

Gosodwch y datryswr yn benodol ar gyfer y gwasanaeth, neu pwyntiwch ef at ddatryswr mewnol sy’n hygyrch trwy’r twnnel. Mae cynhwysydd sy’n datrys enw preifat i gyfeiriad cyhoeddus fel arfer yn defnyddio datryswr cyhoeddus, nid yn dioddef o lwybr wedi torri, ac mae’r atgyweiriad yn perthyn i’r ffeil compose neu ffurfweddiad y daemon.

Mae’r un rhesymeg yn berthnasol i gwestiwn y cyfeiriad allanfa. Os oes rhaid i bob cynhwysydd ymddangos o gyfeiriad VPN gwahanol, ni all un twnnel gwesteiwr ei ddanfon oherwydd bod NAT yn eu cyfuno’n un ffynhonnell. Y ffurfiau gweithredol yw cleient yng ngofod enw pob cynhwysydd neu sidecar sy’n berchen ar y twnnel ac yn rhannu ei stac, ac mae’r ddau yn newid sut y caiff y cymhwysiad ei gyfarch.

Rhestr wirio cyn cau’r tocyn: nodwch y gofod enw sy’n berchen ar y twnnel, profwch y llwybr gyda rhwydweithio’r gwesteiwr, mapiwch yn unig y ddyfais tun sydd ei hangen, cofiwch y cyfeiriad ffynhonnell ar ôl NAT, gosodwch y datryswr yn benodol, a thriniwch gyfeiriadau allanfa fesul cynhwysydd fel penderfyniad pensaernïol yn hytrach na fflag.

Erthyglau cysylltiedig