Ka àwọn ìlànà OpenVPN kí o tó fọwọ́ kan profaili kan. Pi tí ó ń gba àwọn olùṣàmúlò roaming tí ó sì tún ń pe iṣẹ́ upstream kan ń ṣiṣẹ́ daemon méjì, àti pé ẹnìkọ̀ọ̀kan wọn ń ka fáìlì ìṣètò tí orúkọ instance tí o tẹ̀ yàn. Àwọn àwòrán package náà wá fún daemon kọọkan ní àkójọpọ̀ iṣẹ́ tirẹ̀, fáìlì ipò runtime tirẹ̀ àti ẹ̀rọ tunnel tirẹ̀. Bí ìpín yìí bá ṣe àṣìṣe, ìwọ yóò lo àṣálẹ́ kan ń yí ètò tí ó tọ́ padà nínú fáìlì tí ìlànà tí ń ṣiṣẹ́ kò ṣí rí.

Orúkọ instance kọọkan yan fáìlì tirẹ̀

Nínú àwọn fáìlì unit tí ó wá pẹ̀lú OpenVPN 2.6, àwọn àríyànjiyàn ìbẹ̀rẹ̀ ń gbé ààyè instance tí a fi ọ̀rọ̀ tí ó wà lẹ́yìn àmì @ kún. Àwòrán server ń ṣiṣẹ́ láti àkójọpọ̀ ìṣètò server ó sì yanjú àríyànjiyàn rẹ̀ pẹ̀lú %i.conf tí ó wà níbẹ̀, nígbà tí àwòrán client ń ṣe bẹ́ẹ̀ láti àkójọpọ̀ client. Nítorí náà [email protected] ń ka admits.conf nínú àkójọpọ̀ server àti [email protected] ń ka uplink.conf nínú àkójọpọ̀ client, kò sì sí orúkọ kan nínú wọn tí ó ní ìtumọ̀ kankan nínú àkójọpọ̀ kejì.

Jẹ́rìí ìsopọ̀ náà lórí ẹ̀rọ náà dípò kí o rò pé package náà ti pa àwọn iye àkọ́kọ́ upstream mọ́. Drop-in ti ìpínkiri le rọ́pò àkójọpọ̀ iṣẹ́ tàbí àríyànjiyàn ìṣètò pátápátá.

systemctl cat [email protected]
systemctl cat [email protected]

Ka ìlà WorkingDirectory àti àríyànjiyàn ìṣètò nínú ìjáde yẹn, nítorí pé unit tí a ti mú ṣiṣẹ́ nìkan ni ó ń pinnu fáìlì tí a gbé wọlé. Drop-in tí ó ń fi --config kún ExecStart ń borí àwòrán náà kódà nígbà tí ọ̀nà àwòrán náà dàbí ẹni tí ó tọ́. Béèrè àwọn ọ̀nà fragment àti drop-in nígbà tí o bá fẹ́ mọ̀ bóyá àtúnṣe àdúgbò ń ṣiṣẹ́. Bí àwọn ipa méjèèjì bá yanjú sí fáìlì kan, o ní ìlànà kan tí ń gbìyànjú láti jẹ́ server àti client lẹ́ẹ̀kan, àṣàyàn tí ó wá lẹ́yìn nínú fáìlì yẹn sì ń borí ní ìdákẹ́jẹ́.

Ìgbéwọlé àdúgbò àti payload tí a fi lọ́nà ń pàdé àwọn hook ọ̀tọ̀ọ̀tọ̀

Ìsopọ̀ tí a fi ààtò ṣe ti server pẹ̀lú olùṣàmúlò roaming kọọkan ni a dá lórí Pi fúnra rẹ̀, nítorí náà àwọn ìdáhùn ita rẹ̀ ń jáde nípasẹ̀ hook ìjáde àdúgbò. Ìsopọ̀ client pẹ̀lú ẹlẹgbẹ́ upstream rẹ̀ pẹ̀lú jẹ́ ìjáde tí a dá ní àdúgbò, bí ó tilẹ̀ jẹ́ pé ó dé nẹ́tíwọ́kì ọ̀nà jínjìn. Payload tí a fi lọ́nà ń jẹ́ ẹ̀ka kẹta, kernel sì ń bá a mu lẹ́yìn tí ó ti yan ẹ̀rọ ìjáde fún packet náà.

FlowHook that sees itWhat to inspect
Roaming user handshakes to the serverLocal input and local outputListener socket, bind address, rule admitting the UDP port
User payload leaving through the upstream tunnelForwardIPv4 forwarding switch, selected route, permission rule, any translation
Pi's own connection to the upstream peerLocal outputUnderlay route to the provider endpoint, not the tunnel route

Òfin tí ó bá interface ìjáde mu nínú ẹ̀wọ̀n forward le gba packet tí ìtọ́sọ́nà ti yàn fún interface yẹn láàyè tàbí kí ó kọ̀ ọ́, ṣùgbọ́n kò yan interface náà rí. Nígbà tí host kan parí tunnel kan tí ó sì bẹ̀rẹ̀ èkejì, ìlànà tí ń fi payload olùṣàmúlò ránṣẹ́ sínú tunnel upstream àti ìlànà tí ń dáàbò bo àwọn ìdáhùn ààtò ti Pi fúnra rẹ̀ jẹ́ ìpinnu méjì ọ̀tọ̀ọ̀tọ̀. Wọ́n wá gun orí NIC ti ara kan náà, ìdí nìyẹn tí wọ́n fi ń dàrú.

Ìyàtọ̀ yẹn ń ṣàlàyé ìkùnà ìlàjì tí ó wọ́pọ̀. Àwọn olùṣàmúlò ń sopọ̀, handshake ń parí, tí traffic wọn ṣì ń jáde ní ọ̀nà tí kò tọ́, nítorí handshake jẹ́ ti àdúgbò tí payload sì jẹ́ forward àti pé ọ̀kan nínú àwọn méjèèjì nìkan ni a ti dán wò.

Ọ̀nà tí a kó wọlé le gbé àwọn ìdáhùn sí àwọn olùṣàmúlò rẹ mì

Ètò ààbò profaili client ń pinnu ohun tí upstream le ti push sínú tábìlì ìtọ́sọ́nà Pi, àti ìtọ́sọ́nà padà gbòòrò ni àṣàyàn tí ó ń sọ host ológun méjì tí ń ṣiṣẹ́ di èyí tí ó bàjẹ́. Bí ọ̀nà tí a ti push bá bo àwọn àdírẹ́sì gbogbogbò ti àwọn olùṣàmúlò roaming, àwọn ìdáhùn tí server ń dá sí wọn le tẹ̀lé ọ̀nà tuntun sínú tunnel upstream dípò kí wọ́n jáde nípasẹ̀ underlay. Àwọn ènìyàn sábà ń jẹ́rìí pé tunnel sí olùpèsè ṣì ń ṣiṣẹ́ wọ́n sì dúró níbẹ̀, nítorí traffic yẹn ni gbígbé tunnel fúnra rẹ̀ ó sì ń tẹ̀síwájú nígbà tí gbogbo ohun mìíràn ń hùwà àìtọ́.

Ìlànà tí ó dá lórí orísun tàbí mark ni ọ̀nà láti pa àwọn ṣíṣàn méjì mọ́ lọ́tọ̀. Àṣàyàn mark Linux ti OpenVPN ń fi àmì firewall sí àwọn packet ààtò daemon fúnra rẹ̀, tí òfin ìtọ́sọ́nà lè wá rán sí tábìlì àkànṣe. Àwọn àdírẹ́sì orísun ń ṣiṣẹ́ dáadáa bákan náà nígbà tí àwọn ìdáhùn ita server ń jáde láti àdírẹ́sì underlay kan ṣoṣo. Ọ̀nà méjèèjì nílò àwọn ọ̀nà tí ó wúlò nínú tábìlì tí ó yàn àti ìyọkùrò fún endpoint olùpèsè, bí bẹ́ẹ̀ kọ́ tunnel fúnra rẹ̀ kò ní gòkè.

Béèrè lọ́wọ́ kernel ọ̀nà tí ìdáhùn yóò gbà ní tòótọ́ kí o tó kọ òfin kankan. Àwọn àdírẹ́sì ní ìsàlẹ̀ jẹ́ ààyè fún àdírẹ́sì underlay Pi àti àdírẹ́sì gbogbogbò olùṣàmúlò roaming kan.

ip rule show
ip route get 198.51.100.7 from 192.0.2.10

Jẹ́rìí ìpín náà, lẹ́yìn náà dá ipa kan dúró ní ìgbà kan

Dán àwọn ṣíṣàn mẹ́ta wò lọ́tọ̀, nítorí handshake tí ó ṣiṣẹ́ kò jẹ́rìí ohunkóhun nípa àwọn méjì kejì. Gba ìsopọ̀ inbound tuntun, fi ohun èlò kan tí a gbà láàyè ránṣẹ́ nípasẹ̀ ìjáde upstream, kí o sì jẹ́rìí pé àwọn ìlànà méjèèjì ṣì ń dé ọ̀dọ̀ ẹlẹgbẹ́ wọn.

Lẹ́yìn náà dá ipa client dúró kí o sì wo ohun tí ipa server ń pa mọ́. Èyí ni ọ̀nà tí ó já mọ́ra jùlọ láti wá òfin ọ̀nà tàbí mark tí a kàn fún instance kan ṣùgbọ́n tí a lò fún méjèèjì.

systemctl stop [email protected]
systemctl status [email protected] --no-pager
ss -lunp | grep openvpn
journalctl -u [email protected] -n 20 --no-pager

Ohun tí o fẹ́ rí ni pé olùgbọ́ ṣì so mọ́, ẹ̀rọ tunnel ṣì wà, àti pé log kò ní àṣìṣe tuntun nígbà tí ipa client ti dúró. Bí dídá client dúró bá gé àwọn ìdáhùn server sí àwọn olùṣàmúlò tí ó wà pẹ̀lú, àwọn ipa méjì ń pín ohun kan tí ó yẹ kí ó jẹ́ ààlà fún ọ̀kan nínú wọn. Kọ èyí tí instance, èyí tí fáìlì ìṣètò àti ẹni tí ṣíṣàn kọọkan tí ìyípadà kọọkan fọwọ́ kàn, bí bẹ́ẹ̀ kọ́ ẹni tí yóò ṣe àtúnyẹ̀wò host yìí lẹ́yìn náà yóò tún ìwárí yẹn ṣe láti òdo.

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