Getur OpenVPN-kroksskrift notað göngin sem hún byggði rétt í þessu?
OpenVPN keyrir króka inni í eigin ræsingu, svo skrift sem þarf göngin bíður ganga sem bíða hennar. Aðskildu vinnuna og veldu krókinn eftir atburði.
Hvort króksskrift nær hinum enda ganganna fer eftir þremur skilyrðum: við hvaða atburð hún er tengd, hvort OpenVPN er enn inni í ræsingaröðinni þegar skriftin keyrir, og hvort vinnan hefur verið aðskilin frá þeirri röð. Flestar skriftir mistakast á því þriðja. Að bæta við svefni meðhöndlar lífsferilsvandamál sem tímasetningarvandamál, og það virkar rétt nógu oft til að blekkja.
Ákveddu fyrst atburðinn, síðan fyrirkomulagið til að fresta vinnu, síðan staðinn þar sem frestuð vinna keyrir. Þessar þrjár ákvarðanir eru óháðar, og að rugla þeim saman er hvernig tveggja línu krókur verður að heilum síðdegis.
Hvers vegna krókurinn bíður ganga sem bíða hans
OpenVPN kallar króka sína samstillt, inni í sama ferlinu og flytur pakkana. up kviknar þegar tun- eða tap-tækið er til en áður en nokkur leið er bætt við, og route-up kviknar eftir leiðirnar; hvorugt augnablikið lofar því að mótaðili svari. Meðan skrift frá hvorum krók sem er keyrir enn er púkinn ekki að framsenda, svo skipun sem býst við að umferð fari í gegnum göngin bíður ganga sem bíða skipunarinnar. Þessi hringlaga bið er ástæðan fyrir því að handvirk keyrsla gengur og krókurinn rennur út á tíma.
Hin augljósa bót, að sofa í nokkrar sekúndur, virkar stundum vegna þess að fjarlægi endinn reis sjálfur, ekki vegna þess að svefninn lagaði eitthvað. Hjálpari sem spyr um tilbúið ástand er önnur lausn: krókurinn snýr aftur, framsendingin hefst, og hjálparinn fær það sem hann þarf þegar það er raunverulega til staðar.
Veldu krókinn eftir atburði, ekki eftir þægindum
Tengdu up við vinnu sem þarf aðeins tækið, route-up við vinnu sem þarf leiðir, og geymdu client-connect og client-disconnect fyrir verk fyrir hvern skjólstæðing á netþjónshlið. Hreinsun við aftengingu verður að þola að keyra tvisvar, því endurtengingar yfir varanlegt viðmót fylgja ekki sömu röð og full endurræsing. Á netþjóninum kviknar client-connect þegar skjólstæðingur auðkennir sig, ekki þegar púkinn ræsist, sem er þess virði að staðfesta áður en rökfræðin er flutt þangað. Ef vinnan tilheyrir lífsferli þjónustunnar en ekki einni tengingu, er systemd-eining betri heimili en nokkur krókur.
Krókskipanir keyrir púkinn beint, án skeljar á milli, svo ifconfig_remote í up-línu kemur sem bókstaflegur texti. Vefðu skipunina í skýra skel, eða haltu rökfræðinni í skrift sem les umhverfið. ipchange er ein tilskipun sem bætir við eigin rökum: hún afhendir skipuninni vistfangið og gáttina, svo skrift sem skrifuð er fyrir enga sér tvær óvæntar.
Þrjár leiðir til að aðskilja vinnuna
Fyrsti valkosturinn er að senda hjálparann í bakgrunn innan úr króknum: ræstu hann með setsid eða systemd-run --scope, lokaðu arfberu lýsingunum og farðu út með núlli undir eins. Sá annar er að láta krókinn skrifa litla stöðuskrá og láta systemd-tímamæli eða slóðaeiningu bregðast við henni, sem heldur króknum einföldum og setur endurtekningastefnuna þar sem annálar eru. Sá þriðji er að henda króknum algjörlega og flytja vinnuna í einingu sem raðað er eftir VPN-þjónustunni, sem er rétta svarið þegar vinnan er alls ekki fyrir hverja tengingu. Allir þrír deila einni reglu: krókurinn verður að snúa aftur áður en hann þarf ganganna.
Hvað sem þú velur, gerðu hjálparann idempotent og sýnilegan. Tvö skarast köll eiga ekki að keyra sömu óafturkræfu aðgerðina tvisvar, og hjálpari sem mistekst verður að skilja eftir eitthvað sem maður getur lesið.
Aðskildu bilanir sandkassans frá bilunum lífsferilsins
Þegar skrift keyrir frá root-keðju og mistekst sem þjónusta er orsökin venjulega sandkassi en ekki netið. Takmarkandi ProtectHome, skrifvarið ProtectSystem eða vinnumappa sem er ekki til geta gert skriftina eða gögn hennar óaðgengileg, og á SELinux-þjóni þarf skráin líka samhengi sem leyfir keyrslu. Lestu eininguna með systemctl cat openvpn-server@server og annálinn með journalctl -u openvpn-server@server -n 80, og leitaðu þá að heimildar- eða samhengisvillu í stað tengitímamarks. Slökkt á sandkassanum ætti að vera síðasta skrefið, ekki það fyrsta.
Lífsferilsbilun lítur öðruvísi út: krókurinn byrjar, hjálparinn keyrir, og sambandið er einfaldlega ekki komið enn. Skrifaðu tímasetta línu frá króknum sjálfum, aftengdu og tengdu aftur, og lestu atburðina í röð. Þegar hjálparinn þarf sannarlega göngin, láttu hann spyrja um tilbúið ástand í stað þess að sofa fast tímabil.
Þrjú svið gera næstu skýrslu gagnlega: hvaða krókur rann, hvaða reikning hann notaði og hvar hann stöðvaðist. Án þeirra byrjar hver síðari rannsókn að nýju.