Příkaz funguje, když jste přihlášeni, takže ho dáte do spouštěcího skriptu a jdete domů. Další ráno je stroj online a tunel ne. Mýtus je, že funkční volání je funkční služba. V praxi je rozdíl obvykle jedna ze dvou věcí: profil patří vaší uživatelské relaci, nikoli systému, nebo tajemství odemyká něco, co existuje až po přihlášení. Obojí perfektně funguje při ručním testu a selže přesně ve chvíli, kdy se nikdo nedívá.

Proč přihlášení způsobí, že to funguje

Grafické přihlášení spouští sběrnici relace a agenta služby tajemství, a právě tam mnoho klientů orientovaných na plochu drží heslo profilu nebo přístupovou frázi soukromého klíče. Aktivace, která se po přihlášení spouští jako váš uživatel, může tohoto agenta požádat o tajemství a uspět. Stejná aktivace provedená jednotkou při spouštění nemá relaci, sběrnici ani agenta, takže vyhledání selže nebo se zablokuje na výzvě, kterou nikdo nevidí.

Spusťte stejný profil před přihlášením a po něm a dostanete dva různé výsledky z jedné konfigurace. To je podpis závislosti na přihlašovacích údajích, ne na rozbitém tunelu, a vysvětluje, proč ruční test v terminálu dokazuje méně, než se zdá. Tunel je v pořádku; chybí to, co odemyká jeho tajemství.

Rozhodněte, který vlastník spouští tunel

Existují dva podporované vzory a jejich míchání je druhý způsob, jak to selže. NetworkManager může aktivovat připojení v rozsahu systému, což je vhodné, když stroj už zde centralizuje svou síť. Alternativně samostatná jednotka systemd spouští VPN přímo a sama vlastní rozhraní.

systemctl list-unit-files 'openvpn*'
systemctl list-unit-files 'wg-quick*'
nmcli connection show --active
systemctl enable --now wg-quick@wg0

Nespouštějte oba vlastníky proti jedné konfiguraci. Pokud NetworkManager spravuje rozhraní a jednotka ho také zvedá, budou bojovat o trasy a DNS a výsledný stav závisí na tom, kdo skončil poslední.

Umístěte tajemství tam, kde ho služba může přečíst

Služba na pozadí nemůže odpovědět na výzvu. Přihlašovací fráze certifikátů, hesla účtů a odkazované soubory pro ověřování potřebují takové uspořádání úložiště, ke kterému se jednotka dostane bez člověka, které vlastní účet spouštějící službu a které je pro všechny ostatní nečitelné.

Lákavá zkratka je udělat soubor čitelný pro všechny, dokud chyba oprávnění nezmizí. To vymění selhání při spouštění za dlouhodobé vystavení přihlašovacích údajů a je to ten druh změny, ke které se nikdo nevrací. Použijte mechanismus, kterému nasazení už důvěřuje: omezený soubor s přihlašovacími údaji, nešifrovaný klíč chráněný oprávněními souboru nebo připojení v rozsahu systému s vlastním úložištěm tajemství.

Otestujte událost, která skutečně nastane

Ruční spuštění služby po přihlášení netestuje téměř nic. Restartujte nebo na jeden cyklus vypněte grafické přihlášení a sledujte, jak jednotka sama naskočí. To je jediný test, který současně procvičuje dostupnost přihlašovacích údajů, připravenost sítě a pořadí jednotek. Je to také test, který reprodukuje selhání, které uživatel nahlásil, což ruční spuštění nikdy neudělá.

systemctl is-enabled wg-quick@wg0
journalctl -u wg-quick@wg0 -b --no-pager
systemctl status systemd-networkd-wait-online --no-pager

Pořadí je stejně důležité jako přihlašovací údaje. Jednotka, která se spustí dřív, než je nakonfigurováno základní odchozí spojení, to vzdá, a některé distribuce se liší v tom, zda čekají na konektivitu. Pokud jednotka při spouštění hlásí selhání, ale při ručním spuštění o třicet sekund později uspěje, našli jste problém pořadí, nikoli problém tajemství.

Ověřujte trasy a DNS, ne jen rozhraní

Rozhraní, které existuje, není funkční tunel. Po spuštění bez dozoru zkontrolujte trasy, stav resolveru a jeden cíl podle adresy, než zkontrolujete jméno. Potom zkontrolujte aplikaci, pro kterou tunel existuje.

ip -4 route show
resolvectl status
ping -c 3 10.61.0.1
curl -sS --max-time 5 https://internal.example/ -o /dev/null -w '%{http_code}\n'

Pokud adresa funguje a jméno ne, zbývajícím problémem je politika DNS, a ne tunel. Zapište, který vlastník spouští službu a kde žije tajemství, protože další člověk, který tento stroj restartuje, bude potřebovat obě skutečnosti.

Související články