Dé ọ̀dọ̀ ìsìn lórí aṣàmúlò VPN: ọ̀nà abẹ́lẹ̀ tàbí DNAT
Dé ọ̀dọ̀ ìsìn lórí aṣàmúlò OpenVPN láìsí ìtọ́jú ibùdó: fi ọ̀nà abẹ́lẹ̀ SSH wé DNAT ní ẹ̀gbẹ́ olùpèsè àti àwọn ipò mẹ́ta tí ó yan ọ̀kan.
Kódà kọ̀ǹpútà àgbékalẹ̀ tí ó wà lẹ́yìn NAT ti olùpèsè lè ṣe ìsìn fún ẹlẹ́gbẹ́ kan, níwọ̀n tí olùpèsè VPN bá jẹ́ ibi ìpàdé. Ọ̀nà méjì ń dé ibẹ̀: aṣàmúlò náà ń pe jáde, ó sì ń béèrè lọ́wọ́ olùpèsè pé kí ó di ibùdó ìgbọ́rọ̀ kan mú, tàbí olùpèsè náà ń ṣe ìkéde ibùdó kan, ó sì ń túmọ̀ rẹ̀ sínú ọ̀nà abẹ́lẹ̀. Àwọn méjèèjì ń yanjú ìṣòro ìdérí kan náà, wọ́n sì ń hùwà ọ̀tọ̀ọ̀tọ̀ nígbà àìdá, àbójútó àti kíkọ ọ̀rọ̀. Àwọn ipò mẹ́ta ń pinnu èwo ni ó yẹ fún ètò rẹ.
Àwọn ìrísí méjì, ibi ìpàdé kan
Nínú ìrísí àkọ́kọ́, aṣàmúlò náà ń ṣí ìgbà SSH kan jáde, ó ń béèrè lọ́wọ́ olùpèsè pé kí ó gbọ́rọ̀ lórí ibùdó tí a yàn, ó sì ń dá gbogbo ìsopọ̀ padà lórí ìgbà yẹn. Kò sí ohun tí a ń tọ́jú síwájú lórí olùpèsè, kò sì sí ìtúmọ̀ pákẹ́tì, nítorí náà àwọn ohun tí a nílò ni àkọsílẹ̀ SSH, ìtọ́júsíwájú tí a gbà àti ìlànà odi iná fún ibùdó náà. Ìsìn náà ń wà ní ìdè mọ́ loopback lórí aṣàmúlò, èyí tí ó sábà jẹ́ ohun tí o fẹ́.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
Nínú ìrísí kejì, olùpèsè ni ó ni ibùdó gbangba náà, ó sì ń kọ gbogbo ìsopọ̀ padà sí àdírẹ́sì ọ̀nà abẹ́lẹ̀ aṣàmúlò. Èyí ń béèrè ìtọ́júsíwájú IP tí a ti mú ṣiṣẹ́, ìtúmọ̀ ibi-ìlọ nígbà tí a ń wọlé àti ìtúmọ̀ orísun nígbà tí a ń jáde, ó sì ń tẹ̀síwájú láti ṣiṣẹ́ nígbà tí kò sí ìgbà SSH. Olùpèsè ni ó ni ibùdó náà, kì í ṣe ìgbà kan, àti pé ànímọ́ yẹn ni ó ń pinnu ọ̀pọ̀lọpọ̀ àwọn ọ̀ràn gidi.
Kò sí ọ̀kan nínú àwọn ìrísí méjèèjì tí ó ní ààbò jù nípa ìṣẹ̀dá. Àwọn méjèèjì ń fi ibùdó ìsìn kan hàn fún ẹnikẹ́ni tí ó lè dé àdírẹ́sì gbangba olùpèsè, àwọn méjèèjì sì ṣì ń gbára lé ìjẹ́rìí ìsìn náà fúnra rẹ̀.
Ipò kìíní: ṣé ibùdó gbọdọ̀ gbé pẹ́ ju ìgbà lọ
Ìtọ́júsíwájú onípò-ìdí ń gbé ní ìwọ̀n àkókò ìgbà SSH tí ó dá a. Nígbà tí ìsopọ̀ bá já, olùgbọ́rọ̀ ń pòórá, ẹlẹ́gbẹ́ náà sì ń rí ìsopọ̀ tí a kọ̀ dípò ọ̀nà lọ́ra. Àbójútó pẹ̀lú ẹ̀ka systemd àti ìlànà àtúnbẹ̀rẹ̀ ń yanjú èyí, ExitOnForwardFailure=yes sì ń jẹ́ kí ìdè tí ó kùnà hàn lẹ́sẹ̀kẹsẹ̀ dípò fífi ìgbà tí ń ṣiṣẹ́ láìsí ìtọ́júsíwájú sílẹ̀.
Ibùdó tí a túmọ̀ ń yege àwọn àtúnbẹ̀rẹ̀ bí a bá tọ́jú àwọn ìlànà, ṣùgbọ́n ó ń gbára lé pé aṣàmúlò yóò pa àdírẹ́sì ọ̀nà abẹ́lẹ̀ kan náà mọ́. Àdúpẹ̀ oníyípadà tí ó ń fún kọ̀ǹpútà àgbékalẹ̀ ní àdírẹ́sì mìíràn lẹ́yìn àtúnsopọ̀ ń darí ìlànà náà lọ sí ibi tí kò sí nínú ìdákẹ́jẹ́. Kọ́kọ́ pa àdírẹ́sì ọ̀nà abẹ́lẹ̀ mọ́, lẹ́yìn náà kọ ìlànà náà, kí o sì ka àwọn méjèèjì sí ìyípadà kan ṣoṣo.
Bí ìsìn náà bá ní láti dáhùn ní agogo mẹ́ta òru láìsí ẹnikẹ́ni tí ń wò, ìrísí pẹ̀lú ibùdó tí olùpèsè ṣe ìkéde ni ó ní àwọn ẹ̀yà gbígbé díẹ̀, nítorí pé ìlànà kan ṣoṣo tí ó gbọdọ̀ dúró ni ọ̀nà abẹ́lẹ̀ fúnra rẹ̀.
Ipò kejì: ti ta ni odi iná àti àwọn àkọsílẹ̀
Ìrísí onípò-ìdí ń pa gbogbo ìlànà mọ́ ní ibi méjì. sshd ń pinnu nípasẹ̀ AllowTcpForwarding bóyá a gbà ìtọ́júsíwájú látọ̀ọ́ rárá, GatewayPorts sì ń pinnu bóyá olùgbọ́rọ̀ so mọ́ loopback tàbí gbogbo àdírẹ́sì. Pẹ̀lú iye àkọ́kọ́ no, ẹlẹ́gbẹ́ tí ó wà ní òde olùpèsè kò lè dé ibùdó bí ìtọ́júsíwájú bá tilẹ̀ ṣẹ́gun, èyí sì dàbí ọ̀nà abẹ́lẹ̀ tí ó bàjẹ́ nígbà tí ó jẹ́ àdírẹ́sì ìdè ní ti gidi.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
Ìrísí tí a túmọ̀ ń béèrè ìtọ́júsíwájú tí a mú ṣiṣẹ́ àti ìlànà méjì, ìlànà kejì sì ni ibi tí ọ̀pọ̀lọpọ̀ àwọn ìlànà ṣe àṣìṣe. Dídín ìtúmọ̀ orísun mọ́ ipò conntrack DNAT túmọ̀ sí pé kìkì àwọn ìsopọ̀ tí ìlànà ibi-ìlọ dá ni a ń kọ padà, kì í ṣe gbogbo pákẹ́tì tí olùpèsè rán sínú ọ̀nà abẹ́lẹ̀.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
Kíkọ padà yẹn tún ba ìsọtọ́ sí ẹni jẹ́. Lẹ́yìn náà aṣàmúlò ń rí gbogbo olùpè ní àdírẹ́sì ọ̀nà abẹ́lẹ̀ olùpèsè, èyí tí ó ń kó gbogbo ààlà ìyára fún àdírẹ́sì jọ sínú akèwì kan, ó sì ń fi ẹni tí ó rán ohun tí ó rán pamọ́. Bí ìsọtọ́ sí ẹni bá ṣe pàtàkì, parí ìsopọ̀ náà lórí olùpèsè tàbí kí o pa ìpinnu ìyọ̀ǹda mọ́ níbẹ̀, kí o sì gbé ìdánimọ̀ kọjá nínú àkọlé tí ìsìn náà gbára lé. Yíyàn láàárín àtúnṣe méjèèjì yìí dá lórí bóyá ìsìn náà ka àkọlé aṣojú rárá.
Ipò kẹta: ibùdó kan tàbí ọ̀pọ̀, àti ti ta ni orúkọ náà
Ìsìn kan lórí ibùdó kan ni ọ̀ràn tí ìtọ́júsíwájú onípò-ìdí ń ṣẹ́gun nípasẹ̀ ìsapá. O nílò àṣẹ kan, àkọsílẹ̀ kan àti ìlànà odi iná kan, ìmọ́tótó sì ni pípa ìgbà náà. Ọ̀pọ̀lọpọ̀ ìsìn lórí àdírẹ́sì gbangba kan náà ń tì ọ́ sí ìrísí tí olùpèsè ṣe ìkéde, nítorí pé ìtọ́júsíwájú onípò-ìdí kọ̀ọ̀kan nílò ibùdó olùpèsè tirẹ̀, àkójọpọ̀ sì ń pọ̀ sí i pẹ̀lú ìsìn kọ̀ọ̀kan.
Àwọn orúkọ ń mú kí ó túbọ̀ díjú. Ìtọ́júsíwájú onípò-ìdí lè wà lẹ́yìn aṣojú TCP tí ó ń darí nípasẹ̀ SNI, nígbà tí ibùdó tí a túmọ̀ sábà jẹ́ ibùdó kan fún ìsìn kọ̀ọ̀kan. Bí ìsìn náà bá fúnra rẹ̀ parí TLS, tí ó sì nílò orúkọ agbàlejò ìpilẹ̀, ọ̀nà aṣojú ń pa á mọ́, ọ̀nà DNAT sì ń pa á mọ́ kìkì bí ìsìn náà bá gba orúkọ yẹn ní ibùdó yẹn.
Kọ ẹ̀yà wo nínú àwọn ipò mẹ́ta ti pinnu ìrísí náà. Bí bẹ́ẹ̀ kọ́, ẹni tí ó bá fi ìsìn kejì kún un yóò tún ṣí ìfiwéra kan náà pẹ̀lú àyíká tí ó kéré.
Pinnu, lẹ́yìn náà dánwò láti òde
Dánwò ọ̀nà náà láti inú nẹ́tíwọ́kì tí kò ní ọ̀nà kan sí kọ̀ǹpútà àgbékalẹ̀, kí o sì wo àwọn olùkà lórí olùpèsè nígbà tí ìbéèrè ń ṣiṣẹ́. Dídánwò láti olùpèsè sí àdírẹ́sì gbangba tirẹ̀ kò fi ohunkóhun hàn níbí, nítorí pé pákẹ́tì náà ń dá ní ìbílẹ̀, kò sì lè dé ìkọ́ ìtúmọ̀ àbáwọlé, nítorí náà ìdánwò lè ṣẹ́gun nígbà tí ọ̀nà gidi bá ti já.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
Àwọn olùkà tí ó dúró pẹrẹsẹ túmọ̀ sí pé pákẹ́tì kò dé ìlànà náà, èyí tí ó ń tọ́ka sí olùpèsè tàbí odi iná agbàlejò. Àwọn olùkà tí ń gbéra nígbà tí ìsìn náà ń kọ̀ ń tọ́ka sí odi iná aṣàmúlò fúnra rẹ̀ tàbí àdírẹ́sì tí ìsìn náà ń gbọ́rọ̀ lé. Ọ̀nà abẹ́lẹ̀ tí ó gbé pákẹ́tì lọ ṣùgbọ́n tí kò dá ohunkóhun padà jẹ́ ìṣòro ọ̀nà tàbí ọ̀nà ìpadà, kí a má sì ṣe àtúnṣe èyíkéyìí nínú àwọn èsì mẹ́ta yìí nípasẹ̀ ṣíṣe àtúnṣe aṣàdàpọ̀ aṣàmúlò. Kọ olùkà tí ó gbéra kí o tó yí ohunkóhun padà, nítorí pé ìdánwò tí ń bọ̀ nílò ìlà ìpilẹ̀ yẹn.
Nígbà tí ìrísí náà bá ṣiṣẹ́, ṣe àkọsílẹ̀ ibùdó, oníni àti ọ̀nà àbójútó lẹ́gbẹ̀ẹ́ ètò ọ̀nà abẹ́lẹ̀. Àtúnṣe ìdérí tí ó wà kìkì nínú ìtàn shell ẹnìkan wà ní àtúnbẹ̀rẹ̀ kan sí ìṣẹ̀lẹ̀ àtúnṣe.