Dva návrhy slibují totéž: když tunel spadne, nic neodejde ven v otevřené podobě. Jeden spustí při odpojení skript a odřízne rozhraní. Druhý nechá pravidlo firewallu v platnosti a po klientovi VPN nic nechce. Liší se v tom, kdo má oprávnění jednat, co se děje během mezery a jak se stroj potom vrátí do sítě. Srovnávat je v těchto třech bodech je užitečnější než hádat se, které je přísnější.

Stejná práce dvěma mechanismy

Klient může spouštět háky při navázání tunelu i při jeho odpojení, pokud profil povoluje spouštění skriptů. Tento hák běží uvnitř životního cyklu klienta, v okamžiku, kdy se spojení zavírá. Pravidlo firewallu naopak patří systému a nezajímá ho, zda klient běží, spadl nebo byl zabit.

PropertyTeardown scriptFirewall unit
Runs when the client is killedNoYes
Needs privilege at teardown timeUsually yesConfigured once, at boot
Acts on the whole machineOften, including recovery pathsOnly on the flows it matches

Celý argument je v této tabulce. Skript, který běží jen při řádném ukončení, pokrývá případ, který vás zneklidňoval nejméně; důležitý případ je pád nebo zmizení sítě a ani jeden z nich neposkytuje čisté odpojení.

Co hák při odpojení umí a co ne

Zdokumentovaný vzor prochází síťová rozhraní a shazuje vše kromě loopback. Když je fyzické zařízení dole, nic nemůže uniknout mimo tunel, což je přesně záměr.

#!/bin/sh
for dev in /sys/class/net/*; do
  name=$(basename "$dev")
  [ "$name" = lo ] || ip link set dev "$name" down
done

Shodí také místní síť, jakoukoli službu, kterou stroj hostuje, a cestu, kterou byste použili k opravě problému. Na notebooku občas bezdrátové zařízení potřebuje potom ruční přepnutí, takže krátký výpadek se změní v opravnou seanci. Horší je, že háku to nemusí být vůbec dovoleno: když klient odhodí oprávnění, skript při odpojení běží pod neprivilegovaným účtem a každá změna rozhraní selže s chybou oprávnění zapsanou v okamžiku, kdy nikdo nečte log.

Než háku uvěříte, zkontrolujte, jak se klient spouští. Skript, který funguje při ručním spuštění jako root, nic nedokazuje o službě, která startuje při bootu.

Co pravidlo firewallu dělá jinak

Pravidlo, které povoluje jen provoz tunelu, funguje dál i tehdy, když proces klienta zmizí, protože jádro na něm nezávisí. Pravidlo je také užší: blokuje přesně toky, na které sedí, a nechává loopback, místní podsíť a cestu pro obnovu na pokoji, a proto stroj neuvízne.

Cena je v tom, že pravidlo musí napsat a udržovat ten, kdo vlastní firewall hostitele, a musí pojmenovat tunelové zařízení, které klient skutečně vytváří. To znamená, že pravidlo a profil se musí udržovat společně; přejmenované rozhraní zanechá firewall, který blokuje všechno a nic nevysvětlí.

Ani jeden mechanismus nečiní ten druhý nadbytečným. Pravidlo firewallu, které se po úpravě nikdy znovu nenačte, je stejně fiktivní jako skript, který nikdy neběží.

persist-tun rozhoduje, zda mezera existuje

Když tunelové zařízení přežije odpojení, přežijí i trasy, které do něj míří. Provoz se pak zahazuje místo přesměrování, takže výchozí trasa nespadne zpět na fyzickou bránu. Právě toto chování činí únik nepravděpodobným ještě dřív, než do hry vstoupí jakékoli pravidlo firewallu.

Bez tohoto nastavení se zařízení odstraní i s trasami a výchozí trasa může znovu ukázat na fyzickou bránu. Zda to udělá, závisí na platformě a klientovi, a právě proto se má stav pozorovat, ne předpokládat. Berte nastavení jako součást kill switch, ne jako volbu výkonu.

Udržte cestu pro opětovné připojení živou a pak otestujte čtyři stavy

Přísný blok může klientovi zabránit i v opětovném připojení, protože klient stále potřebuje trasu k serveru přes fyzickou bránu, zatímco všechno ostatní je zakázané. Nainstalujte hostitelskou trasu pro tuto jedinou adresu dřív, než tunel vstane, a nejprve přeložte jméno, protože DNS může být v době, kdy ho potřebujete, zablokované.

ip route add 198.51.100.20/32 via 192.168.0.1 dev wlan0

Pak ověřujte stavy, ne etiketu. Záměrně projděte čtyři okamžiky: studený start bez tunelu, zdravou relaci, výpadek, který nikdo nevyžádal, a relaci po obnovení. V každém okamžiku přečtěte výchozí trasu a odešlete jeden požadavek, jehož výstupní adresa je vidět. Aplikace, která to vzdá, dokud je tunel dole, nic neříká o poštovním klientovi nebo aktualizátoru, takže poslední kontrolu zopakujte s jednou aplikací na pozadí. Zapište pravidlo, názvy rozhraní i kroky obnovy, protože kill switch, který nikdo nedokáže ověřit, je jen pověst.

Související články