Aṣàwákiri rẹ lórí olùgbàlejò ń fi àdírẹ́sì ìjáde VPN hàn, ẹ̀rọ náà ń ròyìn ìsopọ̀ ilé rẹ, ẹnìkan sì ń pè é ní ìtújáde. Kò sí ohun tí ó tú jáde. Ọ̀nà àbẹ́wọ̀n olùgbàlejò jẹ́ àkójọpọ̀ àwọn ìsopọ̀, ipa-ọ̀nà àti ìlànà tí ó jẹ́ ti àyè orúkọ nẹ́tíwọ́kì olùgbàlejò, ẹ̀rọ tí ó wà lórí afárá sì jẹ́ àyè orúkọ mìíràn pẹ̀lú ipa-ọ̀nà àkọ́kọ́ tirẹ̀. Mo ti jókòó lórí àkójọpọ̀ Compose kan níbi tí alábàáṣepọ̀ VPN ti wà ní ìsopọ̀ fún ọ̀sẹ̀ púpọ̀ tí kò sì sí pákẹ́ẹ̀tì ẹ̀rọ kan tí ó ti wọ inú rẹ̀ rí.

Yẹ̀wò àyè orúkọ ṣáájú àwòrán tray

Àwọn àyè orúkọ ni gbogbo àríyànjiyàn. Nígbà tí Docker bá dá ẹ̀rọ kan sílẹ̀ lórí nẹ́tíwọ́kì afárá, ó ń dá àyè orúkọ nẹ́tíwọ́kì kan, ó ń so ìpẹ̀kun kan ti bíi veth pọ̀ mọ́ inú rẹ̀, ó sì ń fún àyè orúkọ yẹn ní àdírẹ́sì àti ipa-ọ̀nà àkọ́kọ́. Ìsopọ̀ ọ̀nà àbẹ́wọ̀n, bó ti wù kí a pè é ní orúkọ yìí, ń gbé inú àyè orúkọ olùgbàlejò. Trafiki inú ẹ̀rọ kò lè rí i, kò sì sí ètò alábàáṣepọ̀ kankan tí ó ń yí èyí padà láti òde.

Ọ̀nà méjì tí a ṣe àtìlẹ́yìn fún ń mú ọ jáde kúrò nínú ìpínyà. --network host ń gbé ẹ̀rọ náà sínú àyè orúkọ olùgbàlejò, nítorí náà ó ń jogún àwọn ipa-ọ̀nà olùgbàlejò àti nípa bẹ́ẹ̀ ọ̀nà àbẹ́wọ̀n. --network container:vpn ń pín àyè orúkọ ẹ̀rọ mìíràn, àti bẹ́ẹ̀ ni ọ̀pọ̀lọpọ̀ àwọn àpẹẹrẹ sidecar ń fi iṣẹ́ ránṣẹ́ kọjá inú ẹ̀rọ VPN. Àwọn méjèèjì jẹ́ yíyàn tí ó ṣe kedere; ní ọ̀pọ̀ ìgbà ọ̀kan nínú wọn ni ohun tí ẹni tí ń gbé e kalẹ̀ ní lọ́kàn.

Ipò olùgbàlejò kì í ṣe ìgbéga ọ̀fẹ́. Ẹ̀rọ náà á dáwọ́ ìní àdírẹ́sì tirẹ̀ dúró, ìkéde ebute á dáwọ́ ṣíṣe, àti ìlànà kan tí ó di NET_ADMIN mú níbẹ̀ lè tún ìtọ́sọ́nà olùgbàlejò kọ. Gbígba èyí lè jẹ́ ìpinnu tí ó tọ́. Ríronú pé ó ti ṣí tẹ́lẹ̀ ni ìdí tí àwọn ènìyàn fi ń lo àṣálẹ́ kan láti ṣàtúnyẹ̀wò ọ̀nà àbẹ́wọ̀n tí kò tíì sí lórí ọ̀nà rí.

Tẹ̀lé pákẹ́ẹ̀tì jáde kúrò lórí afárá

Ẹ̀rọ lórí afárá ń rán pákẹ́ẹ̀tì rẹ̀ sí ẹnubodè àkọ́kọ́ rẹ̀, èyí tí í ṣe ìsopọ̀ afárá lórí olùgbàlejò. Lẹ́yìn náà olùgbàlejò á gbé pákẹ́ẹ̀tì náà lọ, ní ètò àkọ́kọ́ yóò sì túmọ̀ àdírẹ́sì orísun sí tirẹ̀ kí pákẹ́ẹ̀tì náà tó jáde. Ìgbésẹ̀ ìtúmọ̀ yẹn gan-an ni ó ń borí ìlànà ní ìdákẹ́jẹ́ẹ́.

Nígbà tí pákẹ́ẹ̀tì bá dé ìpẹ̀kun ọ̀nà àbẹ́wọ̀n, ó ti ń gbé àdírẹ́sì olùgbàlejò. Ìlànà, ipa-ọ̀nà ìlànà tàbí ìpinnu ọ̀nà àbẹ́wọ̀n pínpín kan tí ó dá lórí àdírẹ́sì àkọ́kọ́ ẹ̀rọ náà á dáwọ́ ìbámu, àwọn ẹ̀rọ méjì tí a fẹ́ kí wọ́n jáde ní ọ̀nà òde ọ̀tọ̀ọ̀tọ̀ kò sì lè yà sọ́tọ̀ nípa orísun nìkan. Bí ó bá yẹ kí o ní ìtọ́sọ́nà fún ẹ̀rọ kọ̀ọ̀kan, ìpinnu náà gbọ́dọ̀ ṣẹlẹ̀ ṣáájú ìtúmọ̀ tàbí nínú àyè orúkọ tí ìwọ ń ṣàkóso.

Docker fúnra rẹ̀ ń tọ́jú àwọn ìlànà wọ̀nyí, nípasẹ̀ èyíkéyìí ẹ̀yìn ògiri iná tí a fi ṣètò daemon náà. Àwọn ìlànà tí a fi ọwọ́ kọ ní òde ìkọ̀ tí a ṣe àtìlẹ́yìn fún trafiki tí a ń gbé lọ, DOCKER-USER, ni a lè tún ṣètò tàbí kí a sọ nù nígbà tí daemon bá tún bẹ̀rẹ̀ tàbí olùgbàlejò bá gbé ìgbésẹ̀. Ìwé Docker nípa ìṣọ́ pákẹ́ẹ̀tì ń fi ìtòlẹ́sẹẹsẹ àwọn ẹ̀wọ̀n hàn; kókó pàtàkì ni pé ìlànà kọ̀ọ̀kan nílò olówó àti ọ̀nà ìgbéyẹ̀wò padà tí ìwọ ti gbìyànjú ní ti gidi.

Dán àwọn ètò méjèèjì wò lọ́tọ̀ọ̀tọ̀

Ẹ̀rí láti àyè orúkọ kan kò sọ nǹkan kan nípa èkejì. Ìbéèrè tí a ṣe nínú ẹ̀rọ VPN ń fi hàn pé ọ̀nà àbẹ́wọ̀n ń ṣiṣẹ́ fún ẹ̀rọ yẹn. Ìyẹn kì í ṣe ẹ̀rí nípa olùgbàlejò, àti ìtọ́nà kan náà tí a bá ṣe láti ẹ̀rọ --network host kì í ṣe ẹ̀rí nípa afárá.

# 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'

Lẹ́yìn náà tún àyẹ̀wò náà ṣe nínú ẹ̀rọ ìṣàfilọ́lẹ̀ gidi dípò àwòrán tí ó jọra. Ìṣàfilọ́lẹ̀ lè gbé ipa-ọ̀nà àfikún, àyípadà àyíká proxy tàbí olùyọjáde mìíràn, gbogbo wọn sì ń yí ìdáhùn padà. Yẹ̀wò ìyọjáde orúkọ àti ẹbí àdírẹ́sì kejì ní gbogbo ìgbà: àwọn ẹ̀rọ lórí àwọn afárá tí olùmúlò ṣàlàyé ni a ń yọjáde nípasẹ̀ olùyọjáde inú Docker ní 127.0.0.11, ipa-ọ̀nà àkọ́kọ́ IPv6 lórí afárá sì lè gbé trafiki jáde nígbà tí ìwọ ń dí ìdánwò ọ̀nà àbẹ́wọ̀n IPv4 nìkan.

Ka àpẹẹrẹ náà kí o tó fi ọwọ́ kan ẹ̀rí ìdánilójú

Nígbà tí olùgbàlejò bá ń ṣiṣẹ́ tí ẹ̀rọ kò ṣiṣẹ́, ìdí rẹ̀ fẹ́rẹ̀ jẹ́ ti ìgbékalẹ̀ ní gbogbo ìgbà, yíyí kọ́kọ́rọ́ tàbí títún alábàáṣepọ̀ fi sórí ẹ̀rọ ń fi ọ̀sán ṣòfò. Tòjọ àmì àkọ́kọ́ àti àtúnṣe sábà máa ń dárúkọ ara rẹ̀.

What you seeUsual causeFirst check
Host exits through the VPN, container shows the ISP addressThe container never entered the tunnelDefault route inside the container
Container works until the daemon restarts, then stopsRules outside the supported hook, or a changed backendDaemon's reported firewall backend and DOCKER-USER
Container loses internal hosts after the tunnel comes upVPN prefix overlaps the Docker bridge subnetip route on the host, then docker network inspect
Small replies arrive, large ones hangTunnel MTU or missing MSS clampingLink MTU on both ends of the tunnel
Container falls back to the ISP address when the tunnel dropsNothing enforces the kill switch for forwarded trafficStop the tunnel with a request in flight

Ìlà ìgbòkègbodò yẹn yẹ gbólóhùn tirẹ̀. Àpẹẹrẹ VPN tí ó ń ti ipa-ọ̀nà fún 172.17.0.0/16, tàbí fún 10.0.0.0/8 tí ó ní àpẹẹrẹ afárá rẹ nínú ní àpapọ̀, ń mú kí ọ̀nà àbẹ́wọ̀n gba abẹ́ nẹ́tíwọ́kì ẹ̀rọ, àwọn ìdáhùn sí àwọn àdírẹ́sì tí a túmọ̀ yóò sì lọ sí ọ̀nà tí kò tọ́ tàbí kí wọ́n pàdánù. Títún nẹ́tíwọ́kì Docker kà sábà máa ń mọ́ ju kíkó àwọn ìyàtọ̀ jọ.

Mú ìbòòmùlẹ̀ hàn kedere, lẹ́yìn náà fọ́ ọ́ mọ̀ọ́mọ̀

Àwọn àpẹẹrẹ méjì ń dúró nínú àtúnyẹ̀wò. Pín àyè orúkọ ẹ̀rọ VPN, gbogbo ẹrù iṣẹ́ tí a bò sì ń lo ọ̀nà àbẹ́wọ̀n kan pẹ̀lú ààlà ìtúnbẹ̀rẹ̀ kan, èyí tí ó rọrùn títí tí iṣẹ́ kan yóò fi nílò ìjáde mìíràn tàbí ọ̀nà DNS tirẹ̀. Tàbí tọ́sọ́nà nẹ́tíwọ́kì ẹ̀rọ sí ẹnubodè VPN kan lórí olùgbàlejò: gbígbé lọ ṣí, àpẹẹrẹ afárá tọ́ka sí ọ̀nà àbẹ́wọ̀n, trafiki ìpadàbọ̀ ni a ṣe àkóso rẹ̀ kedere. Ìyẹn ń ra ìṣàkóso fún nẹ́tíwọ́kì kọ̀ọ̀kan, ó sì ń ná ọ ní àkójọpọ̀ ìlànà tí ìwọ gbọ́dọ̀ tọ́jú kí àwọn ìgbéga daemon àti alábàáṣepọ̀ tó kọjá.

Bó ti wù kó rí, ìdánwò tí ó ṣe pàtàkì ni ipò ìkùnà. Dá ọ̀nà àbẹ́wọ̀n dúró pẹ̀lú ìbéèrè ẹ̀rọ kan ní ojú-òfúrufú kí o sì wo ibi tí pákẹ́ẹ̀tì ń lọ. Bí ó bá padà sórí ọ̀nà tààrà, a kò tíì fi ìbòòmùlẹ̀ múlẹ̀ rí, nítorí kill switch alábàáṣepọ̀ ń ṣàkóso trafiki alábàáṣepọ̀ fúnra rẹ̀ kì í ṣe àwọn pákẹ́ẹ̀tì tí a gbé lọ láti afárá. Lẹ́yìn náà tún daemon àti olùgbàlejò bẹ̀rẹ̀ kí o sì jẹ́rìí èsì náà ní ìgbà kejì; àkókò tí àwọn ìlànà tí a fi ọwọ́ kọ ń pàdánù ni ìyẹn.

Kí o tó pè é ní parí, jẹ́rìí ohun mẹ́rin: ìsopọ̀ ọ̀nà àbẹ́wọ̀n wà nínú àyè orúkọ kan náà pẹ̀lú trafiki, a ṣe àyẹ̀wò ẹ̀rọ nínú ẹ̀rọ gidi, a yẹ̀wò ìyọjáde orúkọ àti ẹbí àdírẹ́sì méjèèjì, àti àyẹ̀wò ìkùnà ọ̀nà àbẹ́wọ̀n ṣì ń kùnà ní ìdìpọ̀. Lẹ́yìn náà kọ ẹ̀yìn ògiri iná, ẹ̀dá alábàáṣepọ̀ àti olówó ìlànà kọ̀ọ̀kan sílẹ̀. Àkọsílẹ̀ yẹn gan-an ni ó ń dènà kí ìgbéga tí ó kàn má fi àdàpọ̀ àwọn ìrònú àtijọ́ tí a kò kọ sílẹ̀ sílẹ̀.

Àwọn àpilẹ̀kọ tó jọra