Kotiverkon VPN:llä ei ole mitään tekemistä, kun kannettava istuu jo siinä verkossa. Houkutteleva oikotie on valmistelukomento, joka poistuu nollasta poikkeavalla koodilla; se epäonnistuttaa unitin ja saa jokaisen hallintapaneelin näyttämään rikkinäiseltä. systemd:ssä on direktiivi juuri tällaiselle päätökselle, ja se erottaa tarkoituksellisen ohituksen todellisesta viasta. Oikein tekeminen on enimmäkseen sen kirjaamista, mitä kukin poistumiskoodi tarkoittaa.

Miksi epäonnistuva esiehto on väärä muoto

ExecStartPre pitää nollasta poikkeavaa poistumista käynnistysvirheenä, mikä on oikein palvelua valmistevalle komennolle. Sen käyttäminen ehtona tekee käytäntöpäätöksestä erottamattoman rikkinäisestä riippuvuudesta. ExecCondition on olemassa, jotta unit voi kieltäytyä käynnistymästä tulematta merkityksi epäonnistuneeksi.

Tämä ero on merkityksellinen kolmelta aamuyöllä, kun kukaan ei halua triagea punaista unitia, joka käyttäytyi suunnitellusti. Epäonnistunut unit myös kätkee todelliset viat tarkoituksellisten joukkoon.

Kirjoita ensin poistumiskoodisopimus

Kirjoita sopimus ennen skriptiä. Poistuminen nollalla tarkoittaa jatkamista, poistuminen yhdellä tarkoittaa jäljellä olevien käynnistyskomentojen ohittamista ja poistuminen 255:llä tarkoittaa, ettei ehto itse voinut suorittua. Koodit kahden ja 254:n välillä tarkoittavat yleensä myös ohittamista, mikä on helppo unohtaa, kun apuri palauttaa satunnaisen virhekoodin. Alla oleva drop-in liittää apurin unitin todelliseen nimeen.

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

Tarkista tehollinen unit perittyjen SuccessExitStatus- tai stop-post-asetusten varalta ennen oletusarvoisen semantiikan olettamista. Testaa sitten jokainen kolmesta lopputuloksesta tarkoituksellisesti.

Verkkovihje ei ole todiste sijainnista

Tavoitettavissa oleva reitittimen osoite tai tunnettu MAC voi viitata oikeaan verkkoon, eikä kumpikaan todista sitä. Toinen verkko voi käyttää samaa osoitetta uudelleen, ARP-tiedot voivat olla vanhentuneita ja tunnisteita voidaan jäljitellä. Kohtele koetusta käytännön kanssa yhdenmukaisena optimointina, ei todennuksen tuloksena.

Päätä etukäteen, mitä epävarmuus tarkoittaa. VPN:n käynnistäminen epävarmana on turvallista asiakkaalle, joka yksinkertaisesti ei saisi yhteyttä; sen ohittaminen epävarmana ei ole. Tee koetuksesta rajattu ja lue aktiivinen liitäntä sen sijaan, että olettaisit listan ensimmäisen. Jumittuva koetus on huonompi kuin ei-vastauksen antava, koska unit odottaa sitä.

Kirjaa nämä oletukset unit-tiedoston viereen, jotta seuraava henkilö tietää, mitä apuri uskoo. Kommentti skriptin alussa on halvin paikka pitää ne.

Verkkojen välisen siirtymän käsittely

Ehto suoritetaan palvelun käynnistyessä, eikä sitä arvioida uudelleen myöhemmin. Ohitettu unit pysyy ohitettuna, kun kannettava siirtyy kahvilaan, ja käynnissä oleva tunneli pysyy pystyssä, kun kannettava tulee kotiin. Yhdistä verkkovaihdon elinkaari käynnistys- ja pysäytyspäätökseen erillisellä mekanismilla.

systemctl cat home-vpn.service

Testaa neljä tapausta: käynnistys kotona, käynnistys poissa, koetus joka ei voi suorittua ja siirtymä verkkojen välillä unitin ollessa aktiivinen. Pidä ohituksen syy näkyvissä lokissa, jotta tarkoituksellinen päätös ei näytä koskaan todennusvirheeltä. Palveluviite dokumentoi poistumisen semantiikan ja vähimmäisversion.

Aiheeseen liittyvät artikkelit