Ẹ̀rọ ń ṣàwárí ojú ewé nípasẹ̀ ojú-ọ̀nà, ṣùgbọ́n kọ́ńténerù tó wà lẹ́gbẹ̀ẹ́ kò dé ibikíbi. Pípa àgbègbè jáde láti inú kọ́ńténerù tó ń ṣiṣẹ́ àbániṣepọ̀ VPN tirẹ̀ túbọ̀ burú: ìbéèrè dé, ṣùgbọ́n ìdáhùn kò jáde rárá. Méjèèjì jẹ́ ìpinnu ipa ọ̀nà lórí ẹ̀rọ, Docker sì jẹ́ aṣojú lásán.

Àwọn ìbéèrè mẹ́ta ló ń pinnu èwo nínú àwọn méjèèjì tí ẹ̀ ń wò, wọ́n sì ń gba nǹkan bí ìṣẹ́jú kan.

Àwọn ìkùnà méjì tí wọ́n dà bíi ti ara wọn

Èyí àkọ́kọ́ jẹ́ ìṣòro ipa ọ̀nà ìpadàbọ̀. Àgbègbè tí a fihàn ni a túmọ̀ sínú kọ́ńténerù, ìbéèrè dé, a sì ń fi ìdáhùn ránṣẹ́ nípasẹ̀ ọ̀nà àkọ́kọ́ ti ẹ̀rọ, èyí tí OpenVPN àbániṣepọ̀ ti yí sí tun0. Ìdáhùn jáde láti àdírẹ́sì tí alábàákẹ́gbẹ́ ọ̀nà jíjìn kò retí, a sì sọ ọ́ nù. Èyí kejì jẹ́ ìkọlù ìpínrọ̀: afárá àkọ́kọ́ ti Docker ní 172.17.0.0/16, ojú-ọ̀nà ilé-iṣẹ́ sì ń ti ìwọ̀n kan náà.

Ọ̀kan ni a ń tún ṣe pẹ̀lú tábìlì ipa ọ̀nà, èkejì nípasẹ̀ àtún nọ́mbà afárá. Ṣíṣe àtúnṣe kí ẹ tó mọ èwo ni èwo ni ọ̀nà láti ba kọ́ńténerù tó ń ṣiṣẹ́ jẹ́.

Pinnu pẹ̀lú àwọn ìbéèrè mẹ́ta

Ìbéèrè kìíní: ṣé ìkùnà yóò pòórá nígbà tí ẹ bá dá VPN dúró? Bí ohun gbogbo bá ń ṣiṣẹ́ nígbà tí ojú-ọ̀nà wà ní ìparẹ́, fura sí ipa ọ̀nà ìpadàbọ̀. Ìbéèrè kejì: ṣé ip route show table all ń ṣe àkọsílẹ̀ ìpínrọ̀ kan náà lẹ́ẹ̀mejì, nígbà kan lórí afárá àti nígbà kan lórí tun0? Ìyẹn ni ìkọlù náà. Ìbéèrè kẹta: ṣé àdírẹ́sì tí ó kàn jẹ́ kọ́ńténerù, àlejò NAT tàbí àlejò tí a fi afárá so?

Ìbéèrè kẹta ṣe pàtàkì nítorí ọ̀kọ̀ọ̀kan ní àtúnṣe tó tọ́ tó yàtọ̀, fífi àtúnṣe kọ́ńténerù sí àlejò libvirt yóò sì fi àṣálẹ́ kan ṣòfò.

ip route
ip route show table all | grep -E '172\.1[7-9]|10\.8'
docker network inspect bridge --format '{{.IPAM.Config}}'

Ipa ọ̀nà ìpadàbọ̀: tábìlì fún àdírẹ́sì orísun kan

Nígbà tí ìtòjọ́ kọ́ńténerù gbọdọ̀ jáde nípasẹ̀ ojú-ọ̀nà ti ara, nígbà tí ẹ̀rọ fúnra rẹ̀ ń lo ojú-ọ̀nà, ìpinnu ipa ọ̀nà tó dá lórí orísun ni ìyípadà tó kéré jùlọ. Fi ìlànà kan tó bá àdírẹ́sì kọ́ńténerù mu kún, kí o sì rán an sí tábìlì àkànṣe. Kò sí nǹkan mìíràn tó ń lọ lórí ẹ̀rọ.

ip rule add from 172.22.0.3 lookup 10
ip route add default via 172.22.0.1 table 10

Gbogbo pákẹ́ẹ̀tì tí orísun rẹ̀ jẹ́ àdírẹ́sì yẹn yóò wo tábìlì 10 kọ́kọ́, tábìlì 10 yóò sì rán an sí ẹnu-ọ̀nà afárá dípò ojú-ọ̀nà.

Fi èyí jẹ́rìí sí i: ip route get 1.1.1.1 from 172.22.0.3. Ìdáhùn gbọdọ̀ dárúkọ ojú-ọ̀nà afárá, kì í ṣe tun0. Àwọn ìlànà tí a fi kún bẹ́ẹ̀ yóò pòórá nígbà àtúnbẹ̀rẹ̀, nítorí náà fi wọ́n sínú unit tàbí ìkọ́ nẹ́tíwọ́kì tó ní kọ́ńténerù náà.

Àpẹẹrẹ kan náà ń ṣiṣẹ́ fún kọ́ńténerù WireGuard, níbi tí ipa ọ̀nà ìdáhùn pẹ̀lú nílò ìlànà tó ṣe kedere.

Ìkọlù ìpínrọ̀: tún afárá nọ́mbà

Tábìlì ipa ọ̀nà ń rán ìpínrọ̀ kan sí ibi kan. Bí VPN bá ń ti 172.17.0.0/16 nígbà tí afárá Docker ti wà níbẹ̀, métríkì tó kéré ni yóò borí: Docker ń gbé ipa ọ̀nà tó so mọ́ ọn sí métríkì 0, ipa ọ̀nà tí a ti náà yóò sì dé ní 50. Nígbà náà ojú-ọ̀nà yóò dà bíi ti díbàjẹ́ nígbà tí Docker ń tẹ̀síwájú, tàbí ìdàkejì, ní ìbámu pẹ̀lú ìtòlẹ́sẹẹsẹ fífi sínú ẹ̀rọ. Tún afárá nọ́mbà dípò kí ẹ bá métríkì jà.

{
  "bip": "10.200.0.1/24",
  "default-address-pools": [{"base": "10.201.0.0/16", "size": 24}]
}

Tún Docker bẹ̀rẹ̀ lẹ́yìn ìyípadà kí ẹ sì tún àwọn nẹ́tíwọ́kì tí a fi àkójọ àtijọ́ kọ́ ṣe. Yíyí métríkì padà kìkì ń gbé ìforígbárí lọ sí ìbẹ̀rẹ̀ tó kàn.

Àwọn VM nílò ìdáhùn mìíràn lẹ́ẹ̀kan sí i

Àlejò libvirt lórí nẹ́tíwọ́kì NAT àkọ́kọ́ yóò jogún ìpinnu ipa ọ̀nà ti ẹ̀rọ, yóò sì jáwọ́ mímọ̀ jáde nígbà tí ojú-ọ̀nà ẹ̀rọ bá gba ọ̀nà àkọ́kọ́. Yíyí àlejò padà sí ẹ̀rọ afárá tàbí macvtap yóò fún un ní ọ̀nà tirẹ̀ lórí nẹ́tíwọ́kì ti ara. Nínú virt-manager, fi ẹ̀rọ kún, yan Network, fi orísun sí ẹ̀rọ ẹ̀rọ macvtap, pa virtio mọ́ gẹ́gẹ́ bí àwòṣe, lẹ́yìn náà pa ojú-ọ̀nà NAT àtijọ́.

Àlejò macvtap kì í sábà lè dé ọ̀dọ̀ ẹ̀rọ tirẹ̀. Ìyẹn jẹ́ ìhùwàsí tí a retí kì í ṣe àṣìṣe, ó sì yẹ kí ó wà nínú àkọsílẹ̀ tí ẹ bá fi sílẹ̀.

Fún àlejò tó kàn nílò LAN ti ẹ̀rọ, àbániṣepọ̀ olùpèsè lè ní yíyí tó ṣáko ní: pẹ̀lú Mullvad, mullvad lan set allow yóò mú àǹfààní ìdè níbílẹ̀ padà láìfi ọwọ́ kan libvirt. Bí kọ́ńténerù sì bá gbọdọ̀ jẹ́ àǹfààní kìkì nípasẹ̀ ojú-ọ̀nà, so àgbègbè tí a fihàn mọ́ àdírẹ́sì ojú-ọ̀nà, -p 10.8.0.5:8080:8080, dípò kí ẹ fi í hàn lórí gbogbo àdírẹ́sì.

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