Kill switchit ja päällekkäisyyden kiellon säännöt osoittavat vastakkaisiin suuntiin, mikä selittää, miksi tavalliset VPN-asetukset eivät koskaan ilmaise jälkimmäistä. Kill switch reagoi tunneliin, joka on kaatunut, kun taas tämä vaatimus reagoi tunneliin, joka on ylhäällä, ja pitää sovelluksen pois kuvasta. Yksi suunnittelupäätös ratkaisee suurimman osan: pysäytetäänkö sovellus, estetäänkö sen käynnistyminen vai poistetaanko siltä vain verkkoyhteys. Valitse se kerros ennen kuin tartut palomuurisääntöön tai prosesseja tappavaan silmukkaan, sillä havainnointiin perustuva sääntö vuotaa ikkunan joka käynnistyksellä.

Myytti: kill switch estää ohjelmien käynnistymisen

Kill switchit ovat liikenteenohjausta ja ovat siitä rehellisiä: ne sallivat tai hylkäävät paketteja tunnelin tilan mukaan. Mikään niistä ei kiellä ohjelman käynnistämistä, eikä mikään tutki, mikä suoritettava tiedosto avasi pistokkeen. Työpöydän pikakuvake, ajastettu tehtävä ja taustalla toimiva apuri pääsevät kaikki verkkoon kulkematta minkään sovelluksen nimen tuntevan kautta. Näiden kahden mekanismin välinen etäisyys on se paikka, jossa suurin osa sekaannuksesta asuu.

Järjestely, joka todella päättää, saako ohjelma käynnistyä, on sovellusohjaus. Windowsissa se tarkoittaa AppLocker tai WDAC, hallitussa macOS:ssä laiteluettelon käyttöönottamaa sallittujen luetteloa. Molemmat ovat tunnelista riippumattomia, minkä vuoksi kaksi vaatimusta sulautetaan samaan tikettiin ja sitten kumpikaan ei täyty.

Nimeä tila ennen kuin nimeät työkalun

Kirjoita sääntö tilakoneena, jossa on kolme tilaa: tavallinen käyttö, VPN-työistunto ja poistuminen. Kielletty päällekkäisyys kuuluu keskimmäiseen tilaan, ei asiakasohjelmistoon.

Tilan vaihtaja omistaa kolme toimintoa järjestyksessä: lopettaa sovelluksen työn, pyytää sen normaali sammutus ja vahvistaa, että instanssi on poissa ennen kuin tunneli nousee. Järjestys on tärkeä myös toisessa päässä, koska VPN, joka yhdistää ensin ja pysäyttää ohjelman vasta sitten, on jo sallinut päällekkäisyyden. Jos vaatimus kattaa yhteyden muodostamisen, yhdistetty-ilmaisimen odottaminen on liian myöhäistä.

Mitä kaksisuuntainen ristiriita todella tekee

Kahdelle palvelulle, joita systemd todella hallitsee, Conflicts= on symmetrinen: toisen käynnistäminen pysäyttää toisen. Unit-viite dokumentoi tämän toiminnan ja vaatii erikseen nimenomaisen järjestyksen, kun toisen on lopetettava pysäyttäminen ennen kuin toinen käynnistyy. Ilman noita järjestysmerkintöjä pysäytys ja käynnistys kilpailevat, ja tulos riippuu ajoituksesta.

Tämä ei ole estoluettelo. Kytke riippuvuus väärinpäin, ja sovelluksen käynnistäminen pysäyttää sen sijaan VPN:n, mikä on se vika, jota kannattaa epäillä, kun tunneli katkeaa itsestään ennustettavana hetkenä. Työpöytäsovellus ei ole systemd-unit, eikä NetworkManager-yhteys ole unit, joten tämä malli toimii vain palveluille, jotka käärit itse.

Testaa siirtymät, älä vain ensimmäistä käynnistystä

Neljä siirtymää ratkaisevat, pitääkö vaatimus: istuntoon siirtyminen sovelluksen ollessa käynnissä, sen uudelleenkäynnistys istunnon keskellä, epäonnistunut VPN-käynnistys ja tarkoituksellinen katkaisu. Testaa jokainen ja pidä tulos unit-tiedostojen vieressä. Alla olevat komennot lukevat nykyisen suhteen ja harjoittavat sitten siirtymää, joka merkitsee eniten.

systemctl show work-vpn.service -p Conflicts -p After
systemctl start work-vpn.service
systemctl is-active office-sync.service
nmcli connection show --active

Kolmannen komennon pitäisi jättää sovellus ei-aktiiviseksi, ja neljännen pitäisi listata vain tunneliyhteys istunnon ollessa käynnissä. Erilainen tulos tarkoittaa, että siirtymää ei lainkaan pakoteta.

Uudelleenkäynnistys istunnon aikana on tapaus, joka paljastaa kääreeseen perustuvan suunnittelun, koska työpöydältä käynnistetty pikakuvake ei koskaan konsultoi käynnistyskomentoa. Jos tämä ohitus merkitsee, pakottaminen kuuluu sovellusohjaukseen eikä VPN-asiakkaaseen. Dokumentoi myös istunnon loppu ja suosi tarkoituksellista jatkamista sen sijaan, että avaisit uudelleen jokaisen sisään tullessa pysäytetyn prosessin. Kirjaa jokaisen siirtymän tulos samaan muistiinpanoon, jossa unit-tiedostot ovat.

Aiheeseen liittyvät artikkelit