Bí a ṣe ń tún iṣẹ́ ṣe lórí OpenVPN up: hooks ju tun0.device lọ
Ẹ̀ka ẹ̀rọ ń tọpinpin interface, kì í ṣe ìsopọ̀. Yan up tàbí route-up fún ipò tí iṣẹ́ náà nílò, lẹ́yìn náà fi ìmúpadà tí kò dídúró ránṣẹ́.
Pípọ̀pọ̀ iṣẹ́ tó gbára lé mọ́ tun0.device dà bí ìforúkọsílẹ̀ sínú tunnel, kì í sì rí bẹ́ẹ̀. Ẹ̀ka ẹ̀rọ ń fi hàn pé interface wà, èyí tó lè jẹ́ òtítọ́ nígbà ìsopọ̀ tó kùnà àti àtúnṣopọ̀ tó tẹ̀le. Nígbà náà iṣẹ́ náà ń ṣiṣẹ́ ní àkókò tí kò tọ́, tàbí kò ṣe rárá, ní ìbámu pẹ̀lú bóyá interface náà pàdánù ní àárín. Hook tó ṣàpèjúwe ìṣẹ̀lẹ̀ tí o ń bìkítà fún ni èyí tí OpenVPN ń pè, kì í ṣe èyí tí systemd ń yọ jáde.
Pinnu ipò wo ni iṣẹ́ náà nílò kí o tó yan ohun tó ń dábàá, nítorí àwọn olùdíje mẹ́ta kò lè pààrọ̀ ara wọn.
Kí ni ẹ̀ka ẹ̀rọ ń tọpinpin gan-an
systemd ń dá ẹ̀ka ẹ̀rọ kan látì ojú kernel lórí interface nẹ́tíwọ́kì, nítorí náà tun0.device di aláìsí nígbà tí interface bá farahàn, ó sì di aláìsí nígbà tí wọ́n bá yọ ọ́ kúrò. Pẹ̀lú persist-tun, àtúnbẹ̀rẹ̀ rírọ̀ ń pa interface mọ́ sí ipò rẹ̀, nítorí náà ẹ̀ka náà kò ṣe flap rárá, kò sì sí ohunkóhun tó so mọ́ ọn tí yóò ṣiṣẹ́. Pàápàá láìsí ìdúróṣinṣin, ẹ̀ka náà kò sọ ohunkóhun nípa àwọn ọ̀nà, DNS tàbí bóyá ẹ̀gbẹ́ tó jìnnà ń dáhùn.
Ìyẹn mú kí ó jẹ́ àròpo búburú fún 'VPN ti ṣetán'. Olùgbọ́ tó kàn nílò àdírẹ́sì ìbílẹ̀ lè nítẹ́lọ́rùn pẹ̀lú wíwà interface, nígbà tí iṣẹ́ tó ń pe ohun èlò lórí nẹ́tíwọ́kì tó jìnnà nílò àwọn ọ̀nà àti ìwọlé, èyí tí ẹ̀ka ẹ̀rọ kò lè ṣàlàyé.
up, route-up àti up-restart ní ìtumọ̀ ọ̀tọ̀ọ̀tọ̀
up ń ṣiṣẹ́ lẹ́yìn tí wọ́n bá ṣí ẹ̀rọ TUN/TAP àti ṣètò interface, èyí tó jẹ́ àkókò tó tọ́ fún olùgbọ́ tó ń so àdírẹ́sì tí wọ́n yàn. route-up ń ṣiṣẹ́ lẹ́yìn tí wọ́n bá fi àwọn ọ̀nà sórí ẹ̀rọ, ní ìbámu pẹ̀lú ìdádúró ọ̀nà tí wọ́n ṣètò, ó sì bá iṣẹ́ tó nílò ìpele ọ̀nà tó parí. Kò sí èyí tó fi hàn pé ohun èlò tó jìnnà ń dáhùn. Yíyan láàrin wọn jẹ́ ìbéèrè nípa ohun tí iṣẹ́ nílò, kì í ṣe hook wo ló dà bí ó ti parí.
Pẹ̀lú persist-tun, àwọn àtúnbẹ̀rẹ̀ ń tún ẹ̀rọ náà lò, nítorí náà up kò tún ṣiṣẹ́ àyàfi tí wọ́n bá ṣètò up-restart. Yíyan yẹn ń mú kí script up ṣiṣẹ́ fún ìgbésí ayé àtúnbẹ̀rẹ̀ tí wọ́n kọ sílẹ̀, àti àyíká rẹ̀ dín kù ní ìfiwéra pẹ̀lú ìbẹ̀rẹ̀ àkọ́kọ́. Script tó ro àyíká kíkún yóò ṣiṣẹ́ ní ìsopọ̀ àkọ́kọ́, yóò sì kùnà ní èyí tó tẹ̀le.
Fi iṣẹ́ náà ránṣẹ́ láì dúró dè é
Hook tó ń pe systemctl restart lọ́nà àkókò kan lè dojú ìjà kọ ẹ̀ka tí ìtòlẹ́sẹẹsẹ rẹ̀ ń dúró de tunnel. systemctl --no-block try-restart vpn-dependent.service ń fi iṣẹ́ náà sínú ìlà, ó sì padà, èyí tó ń dá hook dúró láti dènà ìsopọ̀ tí ó ń dáhùn sí. try-restart kì í ṣiṣẹ́ ju lórí ẹ̀ka tó ń ṣiṣẹ́, nígbà tí restart tún ń bẹ̀rẹ̀ èyí tí kò ṣiṣẹ́; yan pẹ̀lú ìdánúṣe, kì í ṣe pẹ̀lú àṣà.
Sísínú ìlà kì í ṣe ìjẹ́rìí. Hook ń dá ìṣẹ́gun padà ní kété tí wọ́n bá gba iṣẹ́ náà, nítorí náà ìṣàyẹ̀wò gbọdọ̀ wáyé nínú ìwé ìrántí ẹ̀ka àfojúsùn tàbí ní ipò olùgbọ́ gidi rẹ̀.
Ìlànà àtúnbẹ̀rẹ̀ ń gbé inú ẹ̀ka, kì í ṣe inú hook
Ẹ̀ka oneshot tó ní RemainAfterExit=yes ń wà ní ṣíṣe lẹ́yìn tí àṣẹ rẹ̀ bá jáde, ìbéèrè ìbẹ̀rẹ̀ kejì kò sì ṣe ohunkóhun nítorí systemd kà á sí ẹni tí ó ti bẹ̀rẹ̀. Ìyẹn jẹ́ ànímọ́ tí a ń ṣètò yí ká, kì í ṣe àbùkù tí a ń yẹ̀ sílẹ̀ pẹ̀lú àwọn ìpè ìbẹ̀rẹ̀ lọ́pọ̀lọ́pọ̀. Bí iṣẹ́ náà bá gbọdọ̀ ṣiṣẹ́ fún ìsopọ̀ kọ̀ọ̀kan, ẹ̀ka náà nílò ìrísí tó gbà á láyè.
After= ń tò àwọn ẹ̀ka, BindsTo= sì ń so ìgbésí ayé pọ̀, ṣùgbọ́n kò sí èyí tó túmọ̀ sí 'tún èyí bẹ̀rẹ̀ nígbà gbogbo tí VPN bá tún sopọ̀'. Ẹ̀ka tó so mọ́ tunnel yóò dúró nígbà tí tunnel bá dúró; kò tún ara rẹ̀ bẹ̀rẹ̀ nígbà tí tunnel bá padà àyàfi tí ohun kan bá tún bẹ̀rẹ̀ rẹ̀.
Dán ìsopọ̀ mẹ́ta wò, kì í ṣe ọ̀kan
Ìbẹ̀rẹ̀ tútù, àtúnbẹ̀rẹ̀ alátìlẹ́yìn pípé àti àtúnṣopọ̀ rírọ̀ kọ̀ọ̀kan ń ṣe àdánwò ọ̀nà ọ̀tọ̀ọ̀tọ̀. Àtúnṣopọ̀ rírọ̀ ni èyí tó ń fi up-restart tó ṣáàsì, àyíká tó dín kù tàbí ẹ̀ka ẹ̀rọ tí kò tíì di aláìṣiṣẹ́ hàn. Ṣe àwọn mẹ́tẹ̀ẹ̀ta, kí o sì fi ìdánilójú àwọn ọ̀nà méjèèjì: iṣẹ́ náà ń ṣiṣẹ́ nígbà tí tunnel bá gòkè, kò sì tún bẹ̀rẹ̀ nígbà àwọn ìyípadà ìsopọ̀ tí kò ní í ṣe bíi roaming Wi-Fi.
Pa ọ̀nà ìmúpadà olómìnira mọ́ nígbà tí iṣẹ́ tó gbára lé bá ń gbé àǹfààní ìṣàkóso rẹ lọ. Hook tó ń tún ohun tí o ń gbà kọjá ṣe bẹ̀rẹ̀ jẹ́ ìyípadà tó lè tì ọ́ síta.