Báwo ni alábàákẹ́gbẹ́ OpenVPN lẹ́yìn NAT ṣe di àbájáde íńtánẹ́ẹ̀tì
Àbájáde náà fúnra rẹ̀ pe jáde, nítorí náà róútà rẹ̀ kò nílò èbúté tí ń wọlé. Tẹ̀lé ohun tí hub náà ń darí, ohun tí àbájáde ń tẹ̀síwájú àti ibi tí ọ̀nà ìpadà wá.
Àwọn olùgbàlejò Linux mẹ́ta, àpẹẹrẹ kan: hub OpenVPN tí gbogbo ènìyàn lè dé, kọ̀mpútà gbé kiri ti olùmúlò àti ẹ̀rọ àbájáde kan lẹ́yìn róútà ilé lasan tí kò tẹ́síwájú ohunkóhun sínú. Àbájáde náà fúnra rẹ̀ pe hub náà. Lẹ́yìn náà, ìṣàn íńtánẹ́ẹ̀tì olùmúlò wọ inú ihò náà ní kọ̀mpútà gbé kiri, ó sì jáde nípasẹ̀ ọ̀nà òkè ti àbájáde fúnra rẹ̀. Ohun gbogbo tí ó ya ènìyàn lẹ́nu nínú ìṣètò yìí wá láti inú kúlẹ̀kúlẹ̀ kan: àbájáde náà ló bẹ̀rẹ̀ ìsopọ̀ náà, nítorí náà ọ̀nà wọlé ti wà tẹ́lẹ̀, kò sì nílò gbígbé èbúté láti dá a.
Ohun tí ó tẹ̀le ń tẹ̀lé ọ̀nà pákẹ́tì náà, kì í ṣe ìtòlẹ́sẹẹsẹ ìṣètò, nítorí pé ìṣètò ní ìtumọ̀ nìkan nígbà tí o bá mọ ẹ̀ka wo ni ó ní ìpinnu wo. Ẹ̀ka kọ̀ọ̀kan ní ìpinnu kan pátápátá, àwọn àṣìṣe sì ń kóra jọ níbi tí a ti ka ẹ̀ka méjì sí ọ̀kan.
Àwọn ìpàdé gbígbé méjì, ọ̀nà inú kan
Olùgbàlejò kọ̀ọ̀kan ń pa ìsopọ̀ òde tirẹ̀ mọ́ sí hub náà, kò sì sí ọ̀kan nínú wọn tí ó mọ nípa èkejì. Ìṣàn olùmúlò sí íńtánẹ́ẹ̀tì jẹ́ ṣíṣàn inú ọ̀tọ̀ọ̀tọ̀ tí ó ṣẹlẹ̀ pé a ń gbé inú ihò olùmúlò, lẹ́yìn náà a tún gbé e jáde láti inú ihò àbájáde. Ṣíṣàn inú yìí ni hub náà gbọ́dọ̀ darí, àbájáde sì gbọ́dọ̀ tẹ̀síwájú rẹ̀.
outer: consumer --TLS--> hub
outer: exit --TLS--> hub
inner: consumer --tun--> hub --internal--> exit --tun--> uplink
Nítorí pé ìsopọ̀ òde méjèèjì ń jáde láti ẹ̀gbẹ́ alábàákẹ́gbẹ́, róútà àbájáde kò ní rí SYN tí ń wọlé láé, kò sì ní nílò ìlànà NAT ibi-àfojúsùn láé. Ó kàn gbọ́dọ̀ pa gbígbé tí a ti dá mọ́ láàyè, èyí tí ó ti ń ṣe fún ìsopọ̀ gígùn kankan. Kò sí ohunkóhun lórí íńtánẹ́ẹ̀tì gbangba tí ó gbọ́dọ̀ kọ́kọ́ dé àbájáde, ìdí nìyẹn tí àdírẹ́sì aláyípadà lórí ọ̀nà òkè yẹn kì í ṣe ìṣòro. Róútà ṣì gbọ́dọ̀ gba ìpàdé tí ń jáde láàyè, ṣùgbọ́n ìyẹn ni àṣẹ kan náà tí aṣàwákiri ti ń lò.
Kí ni iroute ń gbé kalẹ̀ ní inú olùpín
Hub náà ni ẹ̀rọ kan ṣoṣo tí ó ń pinnu ẹlẹgbẹ́ wo ni ó ní ibi-àfojúsùn wo, ó sì ń ṣe ìpinnu yẹn nínú tábìlì ìdarí ààyè olùmúlò tirẹ̀, kì í ṣe ti kérnẹ́lì. Àkọsílẹ̀ client-config-dir fún àbájáde tí a ń pè ní exit-node lè béèrè àfọ̀mọ́ àìlófin níbẹ̀:
# /etc/openvpn/server/ccd/exit-node
iroute 0.0.0.0 0.0.0.0
Líìnì yẹn sọ fún ìlànà olùpín pé "àwọn pákẹ́tì inú tí ó ní ibi-àfojúsùn kankan jẹ́ ti alábàákẹ́gbẹ́ yìí". Kò fi ọ̀nà àìlófin kún ẹ̀rọ ìṣiṣẹ́ hub náà, kò sì sọ hub náà di ẹnubodè íńtánẹ́ẹ̀tì. Ìwé ìtọ́kasí OpenVPN 2.6 ń pa ìdarí inú tí ó yàtọ̀ fún alábàákẹ́gbẹ́ àti ìdarí kérnẹ́lì mọ́ gẹ́gẹ́ bí ọ̀nà ọ̀tọ̀ọ̀tọ̀, ìyapa yẹn sì ni ìdí tí àpẹẹrẹ yìí fi ń ṣiṣẹ́ láìfi ọwọ́ kàn ọ̀nà àìlófin hub náà.
Olùmúlò nílò ìtọ́ni dígí, tí a fi push rán, kí ìṣàn tirẹ̀ lè wọ inú ihò dípò kí ó jáde nípasẹ̀ ẹnubodè àdúgbò. Nínú ẹ̀ka-àwòrán subnet, àkójọ náà jẹ́ ọ̀nà tí a so mọ́ ẹ̀rọ tun àbájáde, nítorí náà ọ̀nà ìpadà kò nílò push àfikún; ohun tí àbájáde kò gbọ́dọ̀ gbà ni ìdarí tí ó wà nísàlẹ̀, èyí tí yóò rán ìṣàn ọ̀nà òkè tirẹ̀ padà sínú ihò tí ó ń gbìyànjú láti lò. Fi ránṣẹ́ sí olùmúlò nìkan, kí o sì ka àwọn ọ̀nà tí a lò lórí alábàákẹ́gbẹ́ dípò gbígbàgbọ́ pé a ti yan fáìlì CCD.
# /etc/openvpn/server/ccd/consumer-01
push "redirect-gateway def1"
Kérnẹ́lì àbájáde ni ó ń tẹ̀síwájú
Nínú àbájáde, pákẹ́tì láti ọ̀dọ̀ olùmúlò dé lórí interfeces tun tí a darí sí àdírẹ́sì olùgbàlejò íńtẹ́nẹ́ẹ̀tì kan. Kérnẹ́lì ń wo tábìlì ìdarí rẹ̀, ó ń wá ọ̀nà òkè gidi gẹ́gẹ́ bí ìbámu tí ó dára jù, lẹ́yìn náà ó ń lo ìlànà méjì tí ó yàtọ̀: ṣé a lè tẹ̀síwájú pákẹ́tì yìí rárá, ṣé ó lè jáde nípasẹ̀ interfeces yẹn pẹ̀lú àdírẹ́sì orísun yẹn. Gbígbé síwájú jẹ́ sysctl kan, a sì pa á ní àìlófin nínú ọ̀pọ̀ ìpín.
Nítorí náà àbájáde nílò gbígbé IPv4 tí ó wà ní ṣíṣí nígbà gbogbo, ìlànà tí ó gba àwọn orísun ihò olùmúlò sí ọ̀nà òkè, àti ọ̀nà ìdáhùn tí ó padà nípasẹ̀ tun. Ṣíṣí gbígbé fún gbogbo olùgbàlejò tún ń yí ìhùwàsí ohun gbogbo mìíràn tí a ń darí nípasẹ̀ rẹ̀ padà, nítorí náà ìlànà gbọ́dọ̀ dárúkọ àwọn orísun àti interfeces dípò gbígbà ohun gbogbo.
Ìtumọ̀ orísun ni ó ń ra ọ̀nà ìpadà
Olùgbàlejò íńtánẹ́ẹ̀tì kò ní ọ̀nà sí àdírẹ́sì 10.90.0.x, nítorí náà a óò sọ àwọn ìdáhùn nù kí wọ́n tó dé àbájáde. Kíkọ orísun tuntun nígbà tí pákẹ́tì ń fi ọ̀nà òkè sílẹ̀ ń yanjú ìyẹn, ìtọpinpin ìsopọ̀ sì ń yí ìkọ tuntun yẹn padà ní ọ̀nà ìpadà.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.90.0.0/24 -o enp1s0 -j MASQUERADE
ip -4 route get 10.90.0.9 # run on the exit: must point at the tun
Ìlànà tí ó wà lókè jẹ́ ibi ìbẹ̀rẹ̀ fún interfeces ọ̀nà òkè kan, kì í ṣe ìlànà ògiri iná. Dín orísun kù sí àwọn ìpín tí o ti gbà láṣẹ ní gidi, kí o sì pa ìlànà ìwọlé àbájáde fúnra rẹ̀ mọ́ lọ́tọ̀, kí ìbòmọ́lẹ̀ fún ìṣàn ihò má baà fi àwọn iṣẹ́ àdúgbò hàn ní ìdákẹ́jẹ́. Lórí olùgbàlejò tí ó ní àdírẹ́sì ọ̀nà òkè aláyípadà, ìbòmọ́lẹ̀ tún gbà ọ́ lẹ́wọ̀n láti tọpinpin àdírẹ́sì pẹ̀lú ọwọ́.
Ibẹ̀ tí hub náà lè fi ipá mú àti ibẹ̀ tí kò lè
Pẹ̀lú client-to-client àti ọ̀nà dátà ààyè olùmúlò ìbílẹ̀, hub náà ń fi àwọn pákẹ́tì inú lé àwọn ẹlẹgbẹ́ lọ́wọ́ nínú ìlànà olùpín. Wọn kì í la ẹ̀wọ̀n FORWARD kérnẹ́lì hub náà kọjá láé, nítorí náà ìlànà kérnẹ́lì níbẹ̀ kò lè dín ìrìnàjò láàárín àwọn ẹlẹgbẹ́ kù, bí a ti kọ ọ́ pẹ̀lú ìṣọ́ra tó. Fífi ipá mú gbọ́dọ̀ wà nínú ìlànà olùpín fúnra rẹ̀: ẹni tí a gbà láàyè láti sopọ̀, fáìlì CCD wo ni ó ń gbà, àti bóyá a ń fi ẹ̀tọ́ níní àìlófin àbájáde fúnni rárá.
Ìdí nìyẹn tí iroute àìlófin fi jẹ́ ìpinnu ìgbẹ́kẹ̀lé gbòòrò. Àbájáde gbọ́dọ̀ gba ìṣàn ìpadà láti àwọn àdírẹ́sì íńtánẹ́ẹ̀tì àìlẹ́gbẹ́ pẹ̀lú ẹ̀tọ́, ó sì gbọ́dọ̀ jẹ́ ẹ̀rọ tí ìwọ ń darí, ń tún ṣe àti ń ṣọ́. Fífi ẹ̀tọ́ níní kan náà fún ẹlẹgbẹ́ tí ìwọ kò ní fi róútà lé lọ́wọ́ ni àṣìṣe tí àpẹẹrẹ yìí ń pè.
Ìdí ẹgbẹ́ ni ìṣàkóso gidi. Alábàákẹ́gbẹ́ kankan tí ó lè ṣètò àwọn ọ̀nà tirẹ̀ lè gbìyànjú láti lo àbájáde, nítorí náà díndín ẹni tí a gbà láàyè láti sopọ̀, tàbí àwọn ẹlẹgbẹ́ tí àbájáde yóò sìn, jẹ́ apá kan àpẹẹrẹ náà kì í ṣe èrò tí ó wá lẹ́yìn.
Kùnà lọ́nà àìléwu nígbà tí àbájáde pòórá
Pa àbájáde kúrò lórí ìlà, ẹ̀tọ́ níní inú àìlófin pòórá pẹ̀lú ìpàdé rẹ̀. Ohun tí kò gbọ́dọ̀ ṣẹlẹ̀ ni pé hub náà di àbájáde àròwọ́rọ́ ní ìdákẹ́jẹ́: kò sí ọ̀nà àìlófin láti àkójọ VPN sí ọ̀nà òkè hub náà, kò sì sí ìlànà ìbòmọ́lẹ̀ gbòòrò lórí hub tí yóò fi tayọ̀tayọ̀ tẹ̀síwájú ìṣàn kan náà. Dán ìkùnà yẹn wò pẹ̀lú ìmọ̀ọ́mọ̀, lẹ́yìn náà dán ìmúbọ̀sípò wò pẹ̀lú ṣíṣàn tuntun kì í ṣe ojú-ìwé tí ó ti ṣí sílẹ̀ tẹ́lẹ̀.
# on the consumer, with the exit up and then down
ip -4 route get 1.1.1.1
curl -sS -o /dev/null -w '%{http_code}\n' https://example.com
Bí ìṣàn olùmúlò bá ṣì dé íńtánẹ́ẹ̀tì lẹ́yìn tí àbájáde ti lọ, ohun mìíràn ni ó ń gbé e, ààlà tí o ní lọ́kàn kò sì sí. Tọ́jú DNS àti IPv6 pẹ̀lú gẹ́gẹ́ bí ìpinnu ọ̀tọ̀ọ̀tọ̀: ọ̀nà IPv4 pẹ̀lú ìbòmọ́lẹ̀ kò sọ ohunkóhun nípa ìṣàn AAAA, olùyẹnú tí hub náà ti ta yóò sì dáhùn láti ibi tí ìbéèrè ti jáde ní gidi.