Fi àṣẹ ìsopọ̀ mìíràn sínú hóòkù oorun, ìṣòro náà yóò dàbí ẹni tí a ti yanjú. A kìkì yanjú rẹ̀ bí hóòkù náà bá ṣiṣẹ́ lẹ́yìn tí nẹ́tíwọ́kì wà, gẹ́gẹ́ bí ìdánimọ̀ tí alátìlẹ́yìn mọ̀, nípasẹ̀ ọ̀nà tí alátìlẹ́yìn ń gbé ṣe gan. Ọ̀pọ̀ ìkùnà lẹ́yìn ìjídìí jẹ́ ọ̀kan nínú àwọn mẹ́ta yẹn, kò sì sí ọ̀kan tí ó farahàn gẹ́gẹ́ bí àṣìṣe nínú hóòkù fúnra rẹ̀. Hóòkù yóò dá àṣeyọrí padà bó ti wù kó rí.

Script tí ó jáde pẹ̀lú òdo kò sọ ohunkóhun fún ọ nípa bóyá tunnel kan padà wá.

Hóòkù náà ń ṣiṣẹ́, kí ni ó tẹ̀le?

#!/bin/sh
case "$1" in
  pre)
    vpn-client disconnect
    ;;
  post)
    vpn-client connect
    ;;
esac

Ìṣẹ̀lẹ̀ kọ̀ọ̀kan ń pe hóòkù lẹ́ẹ̀mejì, ṣáájú àti lẹ́yìn ìyípadà, ó ń fún un ní ìpele àti orúkọ ìṣẹ̀lẹ̀ náà. Ó ń ṣiṣẹ́ gẹ́gẹ́ bí root nínú àyíká tí ó kéré, nítorí náà àwọn ọ̀nà pípé ni ó pọn dandan, kò sì yẹ kí a retí àyípadà kan nínú ìpàdé desktop. Pípé tí àwọn ìpè méjèèjì padà kíákíá ń sọ kìkì pé script náà ti ṣiṣẹ́. Bóyá profáìlì náà gòkè wá lẹ́yìn náà jẹ́ àkíyèsí ọ̀tọ̀, ó sì nílò ẹ̀rí tirẹ̀ nínú log.

Ka àríyànjiyàn ìpele náà gẹ́gẹ́ bí apá kan ìdásílẹ̀. Ìgbìyànjú ìsopọ̀ mìíràn nínú ìpele pre ń ṣẹlẹ̀ nígbà tí ẹ̀rọ náà fẹ́ pàdánù ohun gbogbo, kò sì lè ṣàṣeyọrí.

Root, àyíká tí ó kéré, olùmúlò tí kò tọ́

Bí alátìlẹ́yìn bá ń tọ́jú token ìwọlé fún olùmúlò kọ̀ọ̀kan, ṣíṣe hóòkù gẹ́gẹ́ bí root yóò fi í sílẹ̀ láìsí ohunkóhun láti gbé kalẹ̀. Ṣàyẹ̀wò ipò lábẹ́ ìdánimọ̀ tí hóòkù ń lò gan, kì í ṣe èyí tí o dán wò láti terminal desktop. Àwọn ìkọ́ kan tún ń fi daemon kan sílẹ̀ tí ó di interface mú lẹ́yìn ìpínyà, nítorí náà ìsopọ̀ mìíràn ń bọ́ sínú ipò àtijọ́, pípa prosesì náà kí á tó ṣe yóò mú un padà pẹ̀lú iye owó ìparí tí kò mọ́. Kò sí ọ̀kan nínú ìhùwàsí méjèèjì tí ó hàn bí o bá dán ọ̀nà aláyọ̀ wò kìkì.

Kọ hóòkù pẹ̀lú àwọn ọ̀nà pípé, jẹ́ kí ó wà lábẹ́ ìní root àti kí ó lè ṣiṣẹ́, kí o sì ṣàkọsílẹ̀ ohun tí ó ṣe. Láìsí log yẹn ìwádìí tó kàn yóò bẹ̀rẹ̀ láti òdo.

Ìsopọ̀ aládàáṣe kì í ṣe ọ̀nà VPN

NetworkManager ń pèsè ọ̀nà ìmúṣiṣẹ́ méjì: àmì ìsopọ̀ aládàáṣe lórí profáìlì, àti àwọn ìsopọ̀ ẹlẹ́ẹ̀kejì tí ó bẹ̀rẹ̀ nígbà tí profáìlì àkọ́kọ́ bá ṣiṣẹ́. Àwọn irú ẹ̀rọ abínibí ń ṣe èkíní; àwọn ohun àfikún VPN ti ṣe èkejì nìkan ní ìtàn, nítorí náà fífi àmì ìsopọ̀ aládàáṣe sórí profáìlì OpenVPN lè má ní ipa rárá. Ṣàyẹ̀wò àwọn ànímọ́ méjèèjì, lẹ́yìn náà so VPN mọ́ gẹ́gẹ́ bí ẹlẹ́ẹ̀kejì profáìlì Wi-Fi tàbí Ethernet.

[Unit]
PartOf=NetworkManager.service
Requires=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service

Interface WireGuard tí unit systemd ń ṣàkóso nílò drop-in yẹn dípò hóòkù, tí a ṣètò lẹ́yìn tí nẹ́tíwọ́kì wà lórí ayélujára.

Dúró de nẹ́tíwọ́kì, pẹ̀lú òpin

timer=1
while ! ping -c1 -n -w1 203.0.113.1 >/dev/null; do
  sleep 1; timer=$((timer+1))
  [ $timer -ge 300 ] && exit 0
done
nmcli connection up "work-vpn"

Nígbà ìjídìí tunnel lè di bèèrè nígbà tí Wi-Fi ṣì ń tún sopọ̀, èyí tí ó sọ gbogbo oorun tí ó dúró di àròsọ. Dúró de àdírẹ́sì tí ó lè dé, lẹ́yìn náà gbé profáìlì sókè, kí o sì fi òpin sí ìdúró náà kí hóòkù má lè di ọ̀nà ìjídìí mú lọ́wọ́ láìlópin. Yan orúkọ profáìlì ju atọ́ka nọ́mbà lọ, bí profáìlì tí ó tọ́ bá sì yàtọ̀ nípa nẹ́tíwọ́kì, jẹ́ kí tunnel tí ó nílera ṣàkọsílẹ̀ yíyàn rẹ̀ sínú fáìlì ṣáájú.

Dáàbò bo ara rẹ pẹ̀lú àwọn ìjì ìtúnbẹ̀rẹ̀, nípa kíkà àwọn ìgbìyànjú àti dídúró. Olùṣọ́ tí ó ń dáhùn sí gbogbo àyẹ̀wò tí ó kùnà yóò sọ ìdálẹ́sẹ̀ kan di loop.

Da ìdúró sí ẹ̀rọ náà lẹ́ẹ̀kan, lẹ́yìn náà ka ìwé ìròyìn fún ìjáde hóòkù fúnra rẹ̀. Ìyẹn ni àyẹ̀wò kan ṣoṣo tí ó ń fi ìtòlẹ́sẹẹsẹ hàn.

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