VPN méjì lórí ẹ̀rọ Linux kan: dán wọ́n lọ́tọ̀ọ̀tọ̀ láì da àwọn èsì pọ̀
Àmì aláwọ̀ ewé méjì kì í ṣe ìfiwéra. Fi kọ̀ọ̀kan ọ̀nà sínú ààyè orúkọ tirẹ̀, kọ ìfojúsọ́nà sílẹ̀ kí á tó ṣe ìdánwò, kí o sì fi ojú ọ̀nà hàn kí o tó gbẹ́kẹ̀lé èsì.
Àmì ìsopọ̀ aláwọ̀ ewé méjì dà bí ìfiwéra, ṣùgbọ́n ó sábà máa ń jẹ́ ìṣẹ̀lẹ̀ àìròtẹ́lẹ̀. Bí ìbéèrè ìdánwò náà bá lè lo ọ̀kan nínú àwọn ọ̀nà méjì náà, èsì náà yóò ṣàlàyé ọ̀kan nínú wọn ní ipò tí ó dára jù, tàbí kò ní ṣàlàyé ọ̀kan nínú wọn rárá ní ipò tí ó burú jù. Fún gbogbo àkíyèsí ní àyíká ẹ̀rọ ayélujára, ibi tí a fẹ́ dé àti ìfojúsọ́nà tí a kọ sílẹ̀ kí ìdánwò tó bẹ̀rẹ̀. Lórí ẹ̀rọ Linux tí ìwọ fúnra rẹ ń ṣàkóso, àwọn ààyè orúkọ ẹ̀rọ ayélujára tí ó ní orúkọ ni ọ̀nà tí ó pọ̀ jùlọ ní owó lọ́wọ́ láti ra ìpínyà yẹn.
Àwọn ìmọ́lẹ̀ ewé méjì kì í ṣe ìfiwéra
Ààyè orúkọ ń ya àwọn tábìlì ìtọ́sọ́nà, àwọn ojú-ọ̀nà àti ipò àkópọ̀ ẹ̀rọ ayélujára sọ́tọ̀, nítorí náà ìbéèrè tí ó bẹ̀rẹ̀ nínú ọ̀kan kò lè yá ọ̀nà ti òmíràn lẹ́nu kan. Ohun tí kò yà sọ́tọ̀ ni ẹ̀rọ ìṣirò, ìsopọ̀ ti ara tàbí iṣẹ́ yíyanjú orúkọ tí ń ṣiṣẹ́ lórí agbàlejò. Nínú àlàfo tí ó kẹ́yìn yìí ni ọ̀pọ̀ nínú àwọn ìdánwò wọ̀nyí ti ń kùnà láìsí ẹni tí ó ṣàkíyèsí. Ìwádìí tí ó jáde kúrò nínú ààyè orúkọ tí ó sì béèrè lọ́wọ́ olùyánjú orúkọ agbàlejò yóò dá ìdáhùn tí kò ní ìbáṣepọ̀ kankan pẹ̀lú ọ̀nà tí a ń dánwò.
Ìlànà yìí gbà pé àwọn ààyè orúkọ ìdánwò méjì ti wà tí a ti pèsè tí a sì ti fọwọ́ sí, pẹ̀lú ìsopọ̀ òde tí ń ṣiṣẹ́ àti àwọn alábàákẹ́gbẹ́ tí a ń tìlẹ́yìn. Kò dá ohunkóhun, kò forúkọ ohunkóhun sílẹ̀, kò sì rọ́pò ìṣètò kankan. Àwọn ẹ̀rọ àfọwọ́kọ̀ tí ó yà sọ́tọ̀ ni yóò ṣì jẹ́ àṣàyàn òtítọ́ nígbà tí alábàákẹ́gbẹ́ bá nílò ìpàdé ojú-ìwé kíkún tàbí kò gbà láti ṣiṣẹ́ ní òde rẹ̀.
Fi ìfojúsọ́nà múlẹ̀ kí ìgbà àkọ́kọ́ tó ṣẹlẹ̀
Pinnu fún gbogbo àyíká bí àṣeyọrí ṣe rí: olùyánjú orúkọ, orúkọ iṣẹ́, àdírẹ́sì tí a ń retí àti ìhùwàsí tí a nílò nígbà tí ọ̀nà bá ṣubú. Fi àwọn iye tí a gbèrò yẹn pamọ́ sínú ọ̀wọ̀n tirẹ̀, nítorí àkọsílẹ̀ tí ó dà ètò àti àkíyèsí pọ̀ jẹ́ ìtàn àròsọ pẹ̀lú èdìdì àkókò. Àkójọ àyẹ̀wò tí ó wà nísàlẹ̀ yìí ni ìrísí tí àkọsílẹ̀ nílò, àti pé gbogbo ìlà gbọ́dọ̀ jẹ́ èyí tí a lè kún kí ìsopọ̀ àkọ́kọ́ tó ṣẹlẹ̀.
| Tunnel | Owner | Client interface inside the namespace | Proof command | Required on disconnect |
|---|---|---|---|---|
| vpn-a | the identity that owns profile A, recorded by name | its own tun device, never the host's | ip -n vpn-a -4 route get 10.55.10.20 | traffic stops; no host-side fallback |
| vpn-b | a separate owner, even when both run on one box | its own tun device in its own namespace | ip -n vpn-b -4 route get 10.55.20.20 | verified separately, never inferred from A |
Wíàìà olùyánjú orúkọ yẹ kí ó ní ìlà tirẹ̀ nínú àkọsílẹ̀ yẹn, nítorí pé òun ni pápá tí ó ṣeé ṣe jùlọ láti parọ́. Àwọn fáìlì tí ó so mọ́ ààyè orúkọ, gẹ́gẹ́ bí /etc/netns/vpn-a/resolv.conf ń farahàn ní àwọn ipa ọ̀nà wọn tí ó sábà máa ń wà nígbà tí àṣẹ kan bá ń ṣiṣẹ́ nínú ààyè orúkọ, gẹ́gẹ́ bí ìtọ́kasí iproute2 nípa àwọn ààyè orúkọ ṣe ṣàlàyé rẹ̀, ṣùgbọ́n ìṣètò ìyípadà iṣẹ́ orúkọ àti olùyánjú orúkọ àdúgbò èyíkéyìí tí ó bá ṣí i lè ṣì fa ìwádìí pada sí agbàlejò.
Ọ̀nà kan ní ìgbà kan, èkejì ti já ge
So A pọ̀ nípasẹ̀ olùní tirẹ̀ tí ó wà tẹ́lẹ̀ nígbà tí B ṣì wà nísàlẹ̀, lẹ́yìn náà ṣàyẹ̀wò ìlànà, àwọn ipa ọ̀nà àti ipa ọ̀nà tí a yàn láti inú àyíká ìṣàkóso. Mẹ́ta nínú àwọn àṣẹ tí ó wà nísàlẹ̀ ń ka ipò; èyí tí ó kẹ́yìn nìkan ni ó ń bá iṣẹ́ orúkọ sọ̀rọ̀, kò sì sí ọ̀kan nínú wọn tí ó fi ìbéèrè ohun èlò ránṣẹ́.
sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internalÌwádìí ipa ọ̀nà ń dáhùn ìbéèrè àròsọ nípa ibi tí a fẹ́ dé, nítorí náà kò lè fi hàn pé iṣẹ́ náà gba ìṣàn. Fi àwọn onírúurú ẹ̀rí méjì yẹn sínú àwọn ọ̀wọ̀n ọ̀tọ̀ọ̀tọ̀, nítorí ipa ọ̀nà tí ó ní ìlera lẹ́gbẹ̀ẹ́ ìsopọ̀ tí a kọ̀ jẹ́ èsì gidi àti èyí tí ó wọ́pọ̀. Lẹ́yìn náà fi ohun èlò gidi rán ìbéèrè aláìléwu kan tí a ti gbà láàyè, tí a bẹ̀rẹ̀ nínú àyíká A gẹ́gẹ́ bí olùlò rẹ̀ tí kò ní àǹfààní, pẹ̀lú àyẹ̀wò ẹ̀rí-ìjẹ́rìí àti ìfọwọ́sí ohun èlò tí ó wà láìláìsí, kí o sì kọ èsì náà pẹ̀lú àdírẹ́sì orísun tí iṣẹ́ náà rí. Ya A pọ̀ nípasẹ̀ olùní tirẹ̀ kí o sì tún gbogbo ìlà ìpìlẹ̀ ṣe fún B, ní kíkọ gbogbo ìyípadà ìṣètò tí o bá ṣe, bí bẹ́ẹ̀ kọ́ ìlà ìpìlẹ̀ méjèèjì kò ní ṣeé fiwéra mọ́.
Méjèèjì lókè, lẹ́yìn náà ọ̀kan lẹ́sẹ̀ẹ̀sẹ̀
Ipò tí ó dúró ṣinṣin ni apá tí ó rọrùn. Pẹ̀lú àwọn ọ̀nà méjèèjì tí ó so pọ̀, tún ìwádìí àti ìbéèrè ohun èlò gbogbo àyíká ṣe, lẹ́yìn náà já ọ̀nà kan kí o sì ṣàyẹ̀wò èkejì. Tún sopọ̀ ní ìtòlẹ́sẹẹsẹ ìdàkejì nígbà tí ìtòlẹ́sẹẹsẹ ìsopọ̀ fúnra rẹ̀ bá jẹ́ ìbéèrè náà.
sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20Gbígba ń yanjú àwọn àríyànjiyàn tí èsì ohun èlò kò lè yanjú: ó fi hàn bóyá ìbéèrè jáde nípasẹ̀ ojú-ọ̀nà tí o ń retí tàbí nípasẹ̀ ohun mìíràn pátápátá. Fún gbogbo ìyípadà kọ ìgbésẹ̀ olùní, èdìdì àkókò, èsì ipa ọ̀nà, èsì orúkọ àti èsì ohun èlò. Lẹ́yìn náà ṣàyẹ̀wò ìbéèrè ìpapadé àìléwu nínú ààyè orúkọ tí ó kàn, nítorí ìpínyà kì í ṣe yíyí ìmọ́lẹ̀. Ààyè orúkọ ń pa ọ̀nà méjì mọ́ sọ́tọ̀; kò dá ọ̀kan nínú wọn lẹ́kun láti gbé ìṣàn nígbà tí ìtàn rẹ̀ bá sọ pé ìṣàn gbọ́dọ̀ dúró.
Ohun tí àkọsílẹ̀ yìí lè sọ àti ohun tí kò lè sọ
Àṣeyọrí kan ń fi àwọn àkíyèsí yẹn hàn fún ìṣètò yìí, lórí agbàlejò yìí, ní àkókò yẹn. Kò sọ ohunkóhun nípa àwọn alábàákẹ́gbẹ́ méjì tí ó ń pín tábìlì ìtọ́sọ́nà ojú-ìwé kan, kò sì sọ ohunkóhun nípa ìwọ̀n ìgbékalẹ̀ nígbà tí àwọn ọ̀nà méjèèjì ń gbé ẹrù. Ìwọ̀nwọ́ ni àwọn ìbéèrè ọ̀tọ̀ọ̀tọ̀ pẹ̀lú àwọn ìdánwò ọ̀tọ̀ọ̀tọ̀, àti pé ìfiwéra kan dára tó bí àyíká tí a so mọ́ gbogbo ìlà.
Fi àwọn ìkùnà pamọ́ nínú àkọsílẹ̀ lẹ́gbẹ̀ẹ́ àwọn àṣeyọrí, pẹ̀lú àmì ọ̀nà tí ó wà lókè ní àkókò yẹn. Ojú-ìwé mímọ́ tí ó fi ipò ní àkókò ìdíwọ̀n pamọ́ burú ju èyí tí ó ní àwòrán búburú tí ó fi hàn. Ohun tí ó mú kí àkọsílẹ̀ lè tún ṣeé lò lẹ́yìn náà ni àyíká, kì í ṣe àmì-ìdájọ́.
Àwọn ọ̀nà méjì lórí ẹ̀rọ kan lè jẹ́ ìfiwéra òtítọ́, ṣùgbọ́n kìkì nínú iye àyíká tí ìwọ fúnra rẹ ṣàkóso. Ohunkóhun tí ó ju bẹ́ẹ̀ lọ jẹ́ ìfẹ́ àfọwọ́kọ̀ tí ó ní àmì ewé lẹ́gbẹ̀ẹ́.