Àṣẹ kan náà so mọ́ láti inú shell, ó sì kú lábẹ́ cron, nítorí náà èrò àdánidá ni pé tunnel tàbí ìwé-ẹ̀rí ni ó jẹ̀bi. Kí o tó gbà á gbọ́, wo ohun tí àwọn ìṣiṣẹ́ méjì náà ní lórí ọ̀nà kan: bínárì, ìṣètò àti àwọn ẹ̀rí jẹ́ ìkan náà, àyíká ìlànà nìkan ni ó yí padà. Nígbà tí a kò tilẹ̀ rí ètò náà, kò sí iye àtúnṣe TLS tí yóò ràn ọ́ lọ́wọ́. Àtúnṣe máa ń wà nínú ọ̀nà kan, àpò iṣẹ́ kan àti díẹ̀ nínú àwọn oníyípadà àyíká, kì í ṣe nínú VPN.

command -v openvpn nínú shell tí ó ń ṣiṣẹ́ máa ń tẹ ìdáhùn jáde, ó sì sábà jẹ́ /usr/sbin/openvpn, àpò tí cron kò fi sínú ọ̀nà wíwá rẹ̀.

Tunnel kò bẹ̀rẹ̀ rárá, nítorí náà kì í ṣe tunnel ni ìṣòro

Àwọn iṣẹ́ tí cron bẹ̀rẹ̀ máa ń jogún àyíká kéré, ní ìbámu àṣà PATH=/usr/bin:/bin, kò sì ní terminal ìṣàkóso. Ohunkóhun tí a fi sínú /usr/sbin tàbí /usr/local/sbin kò sí nínú àkójọ yẹn rárá, ìlà àkọsílẹ̀ sì ka openvpn: not found dípò àṣìṣe TLS. subprocess Python kùnà lọ́nà mìíràn: ó jogún àyíká ìlànà onítumọ̀, tí ó lè pọ̀ ju ti cron lọ ṣùgbọ́n kò ní shell láti ṣí tilde. Àwọn ìkùnà méjèèjì máa ń ṣẹlẹ̀ kí pákẹ́tì kan tó kúrò ní ẹ̀rọ ìgbàlejò.

Ọ̀nà kíákíá láti yà wọ́n sọ́tọ̀ ni kíka àṣìṣe àkọ́kọ́ dípò èyí tí ó kẹ́yìn. Bínárì tí ó ṣáko ni ó ń dá ìyàsọ́tọ̀ shell tàbí Python, ìṣètò burúkú ń dá ìfiránṣẹ́ ìlò OpenVPN, ìkùnà ìfọwọ́sowọ́pọ̀ gidi sì ń dá àmì àkókò àti àdírẹ́sì alábàákẹ́gbẹ́. Ìkẹta nìkan ni ìṣòro tunnel.

Ọ̀nà pípé àti àkójọ àríyànjiyàn borí àwọn okùn shell

Fi ọ̀nà tí a yanjú hàn kedere, kí o sì fo shell pátápátá. subprocess.run(["/usr/sbin/openvpn", "--config", config, "--verb", "4"], capture_output=True, text=True, timeout=90) fún ọ ní kóòdù ìpadà, stdout àti stderr láìbéèrè lọ́wọ́ shell láti túmọ̀ orúkọ fáìlì. Kọ́ ọ̀nà ìṣètò láti os.environ["HOME"] tàbí pathlib.Path.home(), kí tilde má baà nílò ṣíṣí. Nígbà tí o bá nílò ìkọ̀wé shell gan-an, lo shlex.split, nítorí pípín okùn pẹ̀lú .split() yóò já ní ọ̀nà kankan tí ó ní ààyè. Ka stderr pẹ̀lú, nítorí OpenVPN máa ń kọ ọ̀pọ̀ àwọn ìkùnà àkọ́kọ́ rẹ̀ síbẹ̀.

Òfin kan náà kan cron pẹ̀lú: ìlà iṣẹ́ kì í ṣe shell ìwọlé, nítorí náà kò sí ohun tí ó gbé profáìlì rẹ, kò sì sí ohun tí ó túmọ̀ orúkọ àfihàn rẹ.

Ohun tí crontab ń jogún gan-an

Ìforúkọsílẹ̀ crontab máa ń gba àyíká tí crontab kéde pẹ̀lú àwọn ìpinnu àìpẹ́ mélòó kan tí a jogún, nítorí náà kọ ọ̀nà náà ní kíkún tàbí fi ìpè náà sínú skripti tí ó ṣe bẹ́ẹ̀. Ìlà bíi PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ní orí fáìlì máa ń bo àwọn ibi ìfisórí tí ó wọ́pọ̀, àti àtúnjúwe pẹ̀lú >> cron.log 2>&1 ni ó jẹ́ kí ìkùnà tó kàn lè kà. Profáìlì tí a fi gbólóhùn ọ̀rọ̀-ìpamọ́ dáàbò bo kò ní ọ̀nà láti béèrè àṣírí rẹ̀ lábẹ́ cron, nítorí kò sí terminal láti béèrè. Irú ìsopọ̀ bẹ́ẹ̀ yẹ kí ó wà nínú ẹ̀ka systemd tí ó lè ka fáìlì ẹ̀rí, kì í ṣe nínú iṣẹ́ tí ó díbọ́n pé òun jẹ́ alábàáṣepọ̀.

Ọ̀nà ìbátan ni pákútè kejì. Ìdánwò sábà máa ń ṣẹlẹ̀ láti inú àpò tí ó ní profáìlì, iṣẹ́ cron sì bẹ̀rẹ̀ ní ibòmíì pátápátá, nítorí náà --config office.ovpn yanjú sí fáìlì tí kò sí níbẹ̀, ìfiránṣẹ́ sì di kíka bí fáìlì tí ó ṣáko dípò tunnel tí ó ṣáko.

Fi hàn nípa bíbọ́ àyíká kúrò

Tún àyíká kéré ṣe ní tààrà: env -i PATH=/usr/bin:/bin /usr/sbin/openvpn --config office.ovpn --verb 4. Ìfẹ̀sùn nípa ọ̀nà tàbí terminal láti ìṣiṣẹ́ yẹn túmọ̀ sí pé ìṣòro wà lókè VPN. Bí ó bá so mọ́, àwọn afura tí ó kù ni àkọsílẹ̀ tí ó ń ṣiṣẹ́ lábẹ́ rẹ̀, àpò tí ó ti bẹ̀rẹ̀ àti ẹ̀rí tí ó gbé kalẹ̀. Èyíkéyìí nínú àwọn àbájáde méjèèjì sàn ju ìyípo mìíràn ti yíyẹ̀wò ìwé-ẹ̀rí lọ.

Lẹ́yìn náà jẹ́ kí ìbòrí náà máa jábọ̀ fún ara rẹ̀. Jáde pẹ̀lú ipò ọ̀tọ̀ọ̀tọ̀ fún ìpele kọ̀ọ̀kan tí ó dé, kọ àwọn ìṣàn méjèèjì pẹ̀lú àmì àkókò, ìkùnà tó kàn yóò sì sọ fún ọ bóyá ó kú ní yíyanjú ọ̀nà, ní ìjẹ́rìí, tàbí lẹ́yìn tí tunnel ti wà lókè.

Ẹ̀ka tún nílò ìtòlẹ́sẹẹsẹ tí ó tọ́: Wants=network-online.target pẹ̀lú After=network-online.target máa ń dá àbáṣepọ̀ dúró láti bẹ̀rẹ̀ kí àdírẹ́sì tàbí ọ̀nà àìpẹ́ tó wà, èyí tí yóò farahàn bí àṣìṣe ìwé-ẹ̀rí tàbí TLS tí ó máa ń pàdánù nígbà ìtúnbẹ̀rẹ̀ afọwọ́.

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