Traffig cynwysyddion Docker yn osgoi VPN y gwesteiwr: sut i wirio
Mae VPN y gwesteiwr yn cwmpasu gofod enw'r gwesteiwr yn unig. Defnyddiwch y gwiriadau hyn i weld a yw traffig cynwysyddion y bont yn mynd i mewn i'r twnnel ai peidio.
Mae porwr y gwesteiwr yn dangos cyfeiriad allanfa'r VPN, mae'r cynhwysydd yn adrodd am eich cysylltiad cartref, ac mae rhywun yn galw hynny'n ollwng. Nid oes dim wedi gollwng. Mae twnnel y gwesteiwr yn gasgliad o ryngwynebau, llwybrau a rheolau sy'n perthyn i ofod enw rhwydwaith y gwesteiwr, ac mae cynhwysydd ar bont yn ofod enw gwahanol gyda'i lwybr diofyn ei hun. Rwyf wedi eistedd ar stac Compose lle'r oedd cleient y VPN wedi bod yn gysylltiedig am wythnosau ac nid oedd un pecyn cynhwysydd erioed wedi mynd i mewn iddo.
Gwiriwch y gofod enw cyn yr eicon hambwrdd
Y gofodau enw yw'r ddadl gyfan. Pan fydd Docker yn cychwyn cynhwysydd ar rwydwaith pont, mae'n creu gofod enw rhwydwaith, yn cysylltu un pen o bâr veth y tu mewn iddo, ac yn rhoi cyfeiriad a llwybr diofyn i'r gofod enw hwnnw. Mae rhyngwyneb y twnnel, beth bynnag y'i gelwir, yn byw yng ngofod enw'r gwesteiwr. Ni all traffig y tu mewn i'r cynhwysydd ei weld, ac nid oes unrhyw osodiad cleient yn newid hynny o'r tu allan.
Mae dau symudiad a gefnogir yn eich tynnu allan o'r ynysu. Mae --network host yn gosod y cynhwysydd y tu mewn i ofod enw'r gwesteiwr, felly mae'n etifeddu llwybrau'r gwesteiwr ac felly'r twnnel. Mae --network container:vpn yn rhannu gofod enw cynhwysydd arall, a dyna sut mae'r rhan fwyaf o gynlluniau sidecar yn anfon llwyth gwaith trwy gynhwysydd VPN. Mae'r ddau yn ddewisiadau penodol; fel arfer dim ond un ohonynt yw'r hyn yr oedd y person sy'n defnyddio'r system yn ei olygu.
Nid yw modd y gwesteiwr yn uwchraddiad am ddim. Mae'r cynhwysydd yn peidio â chael ei gyfeiriad ei hun, mae cyhoeddi porth yn peidio â chymhwyso, a gall proses sy'n dal NET_ADMIN yno ailysgrifennu llwybro'r gwesteiwr. Gall derbyn hynny fod yn benderfyniad cywir. Tybio ei fod eisoes ymlaen yw'r ffordd y mae pobl yn treulio noson yn dadfygio twnnel nad oedd erioed yn y llwybr.
Dilynwch y pecyn oddi ar y bont
Mae cynhwysydd pont yn anfon ei becyn i'w giât ddiofyn, sef rhyngwyneb y bont ar y gwesteiwr. Yna mae'r gwesteiwr yn anfon y pecyn ymlaen ac, yn y cyfluniad diofyn, yn cyfieithu'r cyfeiriad ffynhonnell i'w gyfeiriad ei hun cyn i'r pecyn adael. Y cam cyfieithu hwnnw sy'n trechu polisi yn dawel.
Erbyn i'r pecyn gyrraedd pen draw'r twnnel mae'n cario cyfeiriad y gwesteiwr. Mae unrhyw reol, llwybr polisi neu benderfyniad twnnel hollt sy'n seiliedig ar gyfeiriad gwreiddiol y cynhwysydd yn peidio â chydweddu, ac ni ellir gwahaniaethu rhwng dau gynhwysydd a fwriedir i adael trwy allanfeydd gwahanol ar sail y ffynhonnell yn unig. Os oes angen llwybro fesul cynhwysydd arnoch, rhaid i'r penderfyniad ddigwydd cyn y cyfieithu neu y tu mewn i ofod enw rydych yn ei reoli.
Mae Docker yn cynnal y rheolau hyn ei hun, trwy ba bynnag gefndir mur tân y cafodd y daemon ei gyflunio ag ef. Gall rheolau a ysgrifennwyd â llaw y tu allan i'r bachyn a gefnogir ar gyfer traffig a anfonir ymlaen, DOCKER-USER, gael eu haildrefnu neu eu gollwng pan fydd y daemon yn ailgychwyn neu'r gwesteiwr yn uwchraddio. Mae dogfennaeth Docker ar hidlo pecynnau yn dangos trefn y cadwyni; y pwynt ymarferol yw bod angen perchennog ar bob rheol a llwybr ail-lwytho rydych wedi'i brofi mewn gwirionedd.
Profwch y ddau system ar wahân
Nid yw tystiolaeth o un gofod enw yn dweud dim am y llall. Mae cais a redir y tu mewn i gynhwysydd VPN yn profi bod y twnnel yn gweithio i'r cynhwysydd hwnnw. Nid yw'n dystiolaeth am y gwesteiwr, ac nid yw'r un gorchymyn a redir o gynhwysydd --network host yn dystiolaeth am y bont.
# host namespace
ip route get 1.1.1.1
ip -brief addr show
# a fresh container on the same bridge network
docker run --rm --network appnet alpine sh -c 'ip route; cat /etc/resolv.conf; ip -6 route'
Yna ailadroddwch y prawf y tu mewn i gynhwysydd gwirioneddol yr ap yn hytrach na delwedd debyg. Gall yr ap gario llwybr ychwanegol, newidyn amgylchedd dirprwy neu ddatryswr gwahanol, ac mae pob un o'r rheini'n newid yr ateb. Gwiriwch ddatrysiad enwau a'r ail deulu cyfeiriadau bob tro: mae cynwysyddion ar bontydd a ddiffinnir gan ddefnyddwyr yn datrys trwy ddatryswr mewnol Docker yn 127.0.0.11, a gall llwybr diofyn IPv6 ar y bont gludo traffig allan tra byddwch yn brysur yn profi twnnel IPv4 yn unig.
Darllenwch y patrwm cyn i chi gyffwrdd â chymwysterau
Pan fydd y gwesteiwr yn gweithio a'r cynhwysydd ddim, mae'r achos yn strwythurol bron bob tro, ac mae cylchdroi allweddi neu ailosod y cleient yn gwastraffu prynhawn. Trefnwch y symptom yn gyntaf ac mae'r atgyweiriad fel arfer yn enwi ei hun.
| What you see | Usual cause | First check |
|---|---|---|
| Host exits through the VPN, container shows the ISP address | The container never entered the tunnel | Default route inside the container |
| Container works until the daemon restarts, then stops | Rules outside the supported hook, or a changed backend | Daemon's reported firewall backend and DOCKER-USER |
| Container loses internal hosts after the tunnel comes up | VPN prefix overlaps the Docker bridge subnet | ip route on the host, then docker network inspect |
| Small replies arrive, large ones hang | Tunnel MTU or missing MSS clamping | Link MTU on both ends of the tunnel |
| Container falls back to the ISP address when the tunnel drops | Nothing enforces the kill switch for forwarded traffic | Stop the tunnel with a request in flight |
Mae'r rhes gorgyffwrdd yn haeddu brawddeg iddi ei hun. Mae proffil VPN sy'n gwthio llwybr ar gyfer 172.17.0.0/16, neu ar gyfer 10.0.0.0/8 sy'n digwydd cynnwys rhagddodiad eich pont, yn gwneud i'r twnnel hawlio isrwydwaith y cynhwysydd, a bydd atebion i gyfeiriadau a gyfieithwyd yn mynd i'r cyfeiriad anghywir neu'n diflannu. Mae ailrifo rhwydwaith Docker fel arfer yn lanach na chronni eithriadau.
Gwnewch ymdriniaeth yn benodol, yna torrwch hi ar fwriad
Mae dau gynllun yn dal i fyny o dan adolygiad. Rhannwch ofod enw cynhwysydd y VPN ac mae pob llwyth gwaith a gwmpesir yn defnyddio un twnnel ag un ffin ailgychwyn, sy'n syml nes bod un gwasanaeth angen allanfa wahanol neu ei lwybr DNS ei hun. Neu llwybrwch rwydwaith y cynhwysydd i giât VPN ar y gwesteiwr: anfon ymlaen wedi'i alluogi, rhagddodiad y bont wedi'i bwyntio at y twnnel, traffig dychwelyd wedi'i drin yn benodol. Mae hynny'n prynu rheolaeth fesul rhwydwaith ac yn costio set o reolau i chi eu cynnal ar draws uwchraddiadau daemon a chleient.
Beth bynnag, y prawf sy'n cyfrif yw'r achos methiant. Stopiwch y twnnel gyda chais cynhwysydd ar ganol taith a gwyliwch i ble mae'r pecyn yn mynd. Os yw'n disgyn yn ôl i'r llwybr uniongyrchol, nid oedd ymdriniaeth erioed wedi'i gorfodi, oherwydd mae kill switch cleient yn rheoli traffig y cleient ei hun ac nid pecynnau a anfonir ymlaen o bont. Ailgychwynwch y daemon a'r gwesteiwr wedyn a chadarnhewch y canlyniad eilwaith; dyna'r foment y mae rheolau a ysgrifennwyd â llaw yn diflannu.
Cyn ei alw'n orffenedig, cadarnhewch bedwar peth: mae rhyngwyneb y twnnel yn yr un gofod enw â'r traffig, rhedwyd prawf y cynhwysydd y tu mewn i'r cynhwysydd go iawn, gwiriwyd datrysiad enwau a'r ddau deulu cyfeiriadau, ac mae prawf methiant y twnnel yn dal i fethu ar gau. Yna nodwch gefndir y mur tân, fersiwn y cleient a pherchennog pob rheol. Y cofnod hwnnw sy'n cadw'r uwchraddiad nesaf rhag gadael cymysgedd heb ei ddogfennu o hen ragdybiaethau yn ei le.