Bí a ṣe lè darí ìsọfúnni àwọn ẹ̀rọ Docker nìkan nípasẹ̀ OpenVPN
Fi ẹ̀rọ tálàkùtà sí orí ọ̀nà rẹ̀ deede kí o sì fi ẹ̀ka nẹ́tíwọ́ọ̀kì kan sínú ọ̀nà abẹ́lẹ̀: ìtòlẹ́sẹẹsẹ NAT, àwọn òfin orísun, iroute OpenVPN àti àwọn àyẹ̀wò MSS.
Pákítì ẹ̀rọ náà kò dé tun0 rárá, àti àwọn agbára àfikún lórí ẹ̀rọ náà kò ní yí i padà. Ní àárín àlejò àti ọ̀nà abẹ́lẹ̀, ìwádí ọ̀nà méjì wà: ọ̀kan nínú ààyè orúkọ nẹ́tíwọ́ọ̀kì àlejò, ọ̀kan lórí ẹ̀rọ tálàkùtà lẹ́yìn tí férémù bá balẹ̀ lórí afárá, èkejì sì béèrè taabìlì mìíràn pẹ̀lú àwọn òfin ìbámu mìíràn. Ìtò mi ni ẹ̀rọ Linux kan tí ó ń ṣiṣẹ́ OpenVPN kọ̀mpútà oníbàárà tí ó di 10.8.0.10 mú ní tun0 , afárá Docker ní 172.18.0.0/16 , àti àdírẹ́sì àdáni tí ẹ̀gbẹ́ ọ̀nà abẹ́lẹ̀ nìkan lè dé. Èrògì náà ṣì kúrò: ẹ̀ka àlejò yẹn ń jáde nípasẹ̀ ọ̀nà abẹ́lẹ̀ nígbà tí ẹ̀rọ tálàkùtà ń pa ọ̀nà rẹ̀ deede mọ́.
Ṣíṣe kọ̀mpútà VPN nínú ẹ̀rọ náà jẹ́ àpẹẹrẹ mìíràn , kì í ṣe ọ̀nà kúkúrú. Nígbà náà ẹ̀rọ náà ni ó ni ọ̀nà abẹ́lẹ̀ tirẹ̀ àti àwọn ẹ̀rí rẹ̀, iṣẹ́ sì ń lọ sínú Dockerfile dípò kí ó dúró nínú iptables.
Ìfiránṣẹ́ ń yan ọ̀nà nípa ibi tí ó ń lọ, lẹ́yìn náà NAT ń tún orísun kọ
Nígbà tí net.ipv4.ip_forward=1 bá wà, pákítì tí a fi ránṣẹ́ ń gba ọ̀nà nípa ibi tí ó ń lọ nìkan, nínú taabìlì àkọ́kọ́. Orísun kò ní ipa kankan nínú ìpinnu yẹn. Lẹ́yìn tí a bá yan ọ̀nà nìkan ni kẹ́rnẹ́lì yóò ṣiṣẹ́ POSTROUTING , àti níbẹ̀ ni òfin Docker fúnra rẹ̀ wà: -s 172.18.0.0/16 ! -o br-appnet -j MASQUERADE . Ohun gbogbo tí ó bá kúrò ní afárá lọ sí ojú-ọ̀nà mìíràn ni a ń túmọ̀, àdírẹ́sì tí ó sì di dúró lé ojú-ọ̀nà tí ọ̀nà náà fi ránṣẹ́.
Òfin yẹn ń ṣàlàyé ọ̀pọ̀ àwọn àmì tí a ń béèrè lọ́wọ́ mi. Tí taabìlì àkọ́kọ́ kò bá ní ọ̀nà sí ibi àdáni, pákítì náà ń jáde nípasẹ̀ ọ̀nà tálàkùtà pẹ̀lú àdírẹ́sì ara ẹ̀rọ. Olùpèsè rẹ ń sọ ibi náà nù, tàbí ojú-ìwé jínjìn ń sọ orísun RFC 1918 tí kò retí rẹ̀ nù, ẹ̀rọ náà sì ń pari àkókò nígbà tí ọ̀nà abẹ́lẹ̀ wà ní òkè tí ó sì ní ìlera. tun0 kò fi ohunkóhun hàn, ìyẹn sì ni àmì náà. Tí ọ̀nà bá ń tọ́ka sí tun0 , MASQUERADE ń tún orísun kọ sí 10.8.0.10 , ẹ̀rọ kanna sì ń ṣiṣẹ́ láìsí pé o fọwọ́ kàn án.
Béèrè ìwádí tí ó ń dárúkọ orísun àlejò. Láìsí from àti iif ẹ̀rọ tálàkùtà ń dáhùn fún sọ́kẹ́tì tirẹ̀, ó sì ń jábọ̀ ọ̀nà tí pákítì tí a fi ránṣẹ́ kò ní gbà rárá:
ip route get 192.168.11.222 from 172.18.0.5 iif br-appnetTí ìdáhùn yẹn bá dárúkọ ọ̀nà tálàkùtà, ọ̀nà abẹ́lẹ̀ kò sí nínú àwòrán, kò sì sí ètò kan ní ẹ̀gbẹ́ ọ̀nà abẹ́lẹ̀ tí yóò ràn án lọ́wọ́.
Gbé àlejò lọ sí àdírẹ́sì ọ̀nà abẹ́lẹ̀ fúnra rẹ̀
Ìyípadà tí ó kéré jù tí ó ń ṣiṣẹ́ ni kíkọ orísun tààrà nígbà tí a ń jáde. Fi wọ́n sínú dípò kí o fi kún: Docker ti jókòó ní orí POSTROUTING , nítorí náà òfin tí a fi -A kún ni a ń yẹ̀wò lẹ́yìn ti Docker, kò sì ní ṣiṣẹ́ rárá.
iptables -t nat -I POSTROUTING 1 -s 172.18.0.0/16 -o tun0 -j SNAT --to-source 10.8.0.10Àwọn ipò méjì ń pinnu bóyá èyí yóò dúró. Àdírẹ́sì gbọ́dọ̀ jẹ́ èyí tí oníbàárà ní ní tòótọ́, nítorí náà fi í múlẹ̀ pẹ̀lú àkọsílẹ̀ fún oníbàárà kọ̀ọ̀kan tí ó ní ifconfig-push 10.8.0.10 255.255.255.0 ; òfin tí ó dárúkọ àdírẹ́sì tí a kò pín rárá ń mú ìsílẹ̀ ìdákẹ́jẹ́ wá, kì í ṣe àṣìṣe. Ẹ̀gbẹ́ jínjìn gbọ́dọ̀ gba orísun yẹn kí ó sì darí àwọn ìdáhùn padà, ìdí nìyẹn tí àkọsílẹ̀ ìfọwọ́sí níbẹ̀ fi ń dárúkọ àdírẹ́sì ọ̀nà abẹ́lẹ̀ dípò ẹ̀ka àlejò. Nígbà tí àdírẹ́sì oníbàárà bá ń yí padà, -j MASQUERADE pẹ̀lú -o tun0 ń tẹ̀lé ohun tí ojú-ọ̀nà ní, ní iye owó ìlànà jínjìn tí o kò lè kọ iye dúró sí.
Ìpèsè ni ìlà kejì: Docker ń fi ìlànà FORWARD sí drop, ó sì ń fọ àwọn ẹ̀wọ̀n tí ó ni ní ìgbà kọ̀ọ̀kan tí daemon bá tún bẹ̀rẹ̀, nítorí náà fi ìlànà àdúgbò sínú DOCKER-USER , tí ó ń yè.
iptables -I DOCKER-USER -i br-appnet -o tun0 -j ACCEPT
iptables -I DOCKER-USER -i tun0 -o br-appnet -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTÒfin ìpadà ṣe pàtàkì: ìdáhùn tí ó dé lórí tun0 fún ìsopọ̀ tí afárá ṣí kò ní gba torí pé ọ̀nà jáde gba nìkan.
Pa ẹ̀rọ tálàkùtà mọ́ ní tààrà pẹ̀lú òfin orísun
Nígbà tí gbogbo afárá yẹ kí ó lo ọ̀nà abẹ́lẹ̀ ṣùgbọ́n kò sí ohun mìíràn lórí ẹ̀rọ tálàkùtà, fo NAT kọjá kí o sì fi taabìlì tirẹ̀ fún orísun yẹn. Àwọn àdírẹ́sì àlejò yóò wà ní ìhàlẹ̀ sí ìhàlẹ̀ nígbà náà.
echo "200 vpnbox" >> /etc/iproute2/rt_tables
ip rule add from 172.18.0.0/16 lookup vpnbox pref 1000
ip route add default dev tun0 table vpnboxÀwọn òfin ni a ń wo ṣáájú taabìlì àkọ́kọ́, from sì ń bá orísun mu. Àwọn pákítì òde ti ọ̀nà abẹ́lẹ̀ fúnra rẹ̀ ń gbé orísun ara ẹ̀rọ, nítorí náà wọn kò ní bá from 172.18.0.0/16 mu rárá, ọ̀nà abẹ́lẹ̀ kò sì lè darí ara rẹ̀ padà sínú ara rẹ̀. Ìyọkúrò ara-ẹni yẹn ni ó ń mú ìtò dúró ṣinṣin.
Ọ̀nà ìpadà nílò ìrànlọ́wọ́ báyìí. Ẹ̀gbẹ́ jínjìn ń rí 172.18.0.x tí a kò túmọ̀, kò sì ní ìdí láti mọ ibi tí ó ń gbé. Lórí sáfà, fáìlì fún oníbàárà kọ̀ọ̀kan nílò iroute 172.18.0.0 255.255.0.0 kí taabìlì inú sáfà lè fi àkọ́kọ́ yẹn fún oníbàárà yìí, àti route 172.18.0.0 255.255.0.0 tí a ti ta síwájú kí àwọn oníbàárà mìíràn lè mọ̀ pé ó wà.
Àyẹ̀wò méjì ṣáájú gbígbà. Ṣiṣẹ́ ip route show default : pẹ̀lú redirect-gateway def1 taabìlì ní 0.0.0.0/1 àti 128.0.0.0/1 nípasẹ̀ tun0 , ẹ̀rọ tálàkùtà kò sì ní tààrà rárá, nítorí àwọn ìlàjì ìdá kan náà ń ṣẹ́gun láìsí rírọ́pò default . Àwọn òfin tí a fi ip rule add kún pẹ̀lú ń pòórá nígbà tí a bá tún bẹ̀rẹ̀, nítorí náà gbé wọn sínú skírìpítì up.
Ìwọ̀n pákítì ni àkùnà kejì tí ìwọ yóò pàdé
Ojú-ọ̀nà afárá ní 1500 báìtì ń fún ọ̀nà abẹ́lẹ̀ ní ohun tí ó pọ̀ ju èyí tí ó lè gbé lẹ́yìn tí a bá fi àwọn orí UDP àti IP òde kún. Àwọn ìpàṣípàrọ̀ kékeré ń kọjá, nítorí náà DNS ń yanjú TLS ìfọwọ́sọwọ́ sì ń parí, lẹ́yìn náà ìgbéṣókè ńlá ń dúró láìsí àṣìṣe kankan níbikíbi. Olùránṣẹ́ ń tún ìwọ̀n ìpín kan náà ṣe, nítorí pé ìfiránṣẹ́ ICMP nípa àìní ìpín, tí yóò sọ fún un kí ó dín kù, kò dé rárá.
Tún un ṣe ní ojú-ọ̀nà, ní MSS, tàbí méjèèjì. Ìdìmú kò nílò ìfọwọ́sọwọ́ àlejò:
ip link set dev tun0 mtu 1400
iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuÌdìmú ń tún TCP kọ nìkan. UDP, pẹ̀lú QUIC, nílò dídín ojú-ọ̀nà àlejò kù ní àkókò yìí, pẹ̀lú --opt com.docker.network.driver.mtu=1400 nígbà ìdá nẹ́tíwọ́ọ̀kì tàbí kọ́kọ́rọ́ compose tí ó bá mu.
DNS àti àwọn àyẹ̀wò tí ó yẹ kí a tún ṣe
Ìyanjú orúkọ ń tẹ̀lé ọ̀nà kan náà. Olùyanjú inú Docker ní 127.0.0.11 ń fi ránṣẹ́ sí àwọn sáfà tí a ṣètò fún ẹ̀rọ, nítorí náà ẹ̀rọ náà ń jogún ohun tí ẹ̀rọ tálàkùtà ń lò. Nígbà tí olùyanjú tí a lè dé ọ̀dọ̀ nípasẹ̀ ọ̀nà abẹ́lẹ̀ nìkan bá ń dáhùn fún agbègbè àdáni, darí àlejò sí àdírẹ́sì yẹn, kí o sì dán wò pẹ̀lú getent hosts nínú ẹ̀rọ náà, kì í ṣe lórí ẹ̀rọ tálàkùtà.
- Ṣiṣẹ́ ìbéèrè tí ó kùnà nínú àlejò; ìdánwò ní ẹ̀gbẹ́ ẹ̀rọ tálàkùtà ń lo àdírẹ́sì orísun mìíràn, ó sì ń fi ìṣòro náà pamọ́.
- Ka àwọn olùka lórí àwọn òfin NAT àti ìpèsè tí o fi kún. Òfin tí kò ní ìbámu kankan jẹ́ àṣìṣe ìdarí, kì í ṣe àṣìṣe ìlànà.
- Jẹ́rìí pé àdírẹ́sì ọ̀nà abẹ́lẹ̀ nínú òfin SNAT rẹ jẹ́ èyí tí oníbàárà ní ní tòótọ́.
- Dín MTU àlejò kù tàbí dìmú MSS ṣáájú kí o tó da sáfà lẹ́bi fún ìdúró.
Tẹ̀lé àkójọ yẹn kí o sì dúró ní àkùnà àkọ́kọ́. Ìpele yẹn ni ó yẹ kí a tún ṣe; ohunkóhun tí a bá fi kún ní ìsàlẹ̀ ń fi ààlà tí ń já pamọ́ nìkan.