Vybral jsem Importovat ze souboru… v nastavení GNOME, vybral jsem profil, který funguje s klientem poskytovatele, a dialog se zavřel, aniž by do seznamu něco přidal. Na druhém notebooku se import dokončil, připojení se objevilo pod názvem profilu a pak selhalo při prvním ověření. NetworkManager nikdy nespustí tvůj soubor .ovpn ani wg-quick tak, jak je. Předá soubor parseru, parser ho převede do vlastního formátu připojení NetworkManageru a od té chvíle se tunel staví z tohoto parsovaného objektu — tajemství, trasy, DNS a všechno ostatní. Užitečná otázka tedy není, proč je soubor rozbitý, ale zda k parsování došlo a co si zachovalo.

Co import se souborem skutečně dělá

Pro OpenVPN žije parser v balíčku zásuvného modulu a připojení, které vytváří, ukazuje na službu D-Bus, například org.freedesktop.NetworkManager.openvpn. Bez modulu není parser: typ je pro nmcli neznámý a grafický seznam pro přidání VPN nemusí vůbec zobrazovat položku importu. WireGuard se liší v jednom důležitém bodě — NetworkManager má vlastní nastavení WireGuard od řady 1.30, takže neexistuje samostatný balíček modulu, ale čtečka wg-quick existuje jen v sestaveních, která ji dodávají.

Ať tak či onak, soubor se čte jednou. Výsledek se zapíše jako keyfile do /etc/NetworkManager/system-connections/, pojmenovaný podle připojení, vlastněný rootem a pro ostatní uživatele nečitelný, protože obsahuje klíčový materiál. Ten keyfile je teď připojení; pozdější úprava původního .ovpn nic nezmění.

Tři příznaky patří ke třem různým fázím. Žádná položka importu nebo neznámý typ znamená, že chybí modul nebo verze. Chyba importu, která jmenuje direktivu, znamená, že parser soubor přečetl a část odmítl. Připojení, které existuje, ale nikdy se neaktivuje, znamená, že parsovaný objekt je neúplný nebo ho server odmítá. Rozhodni, který ze tří případů máš, než cokoli upravíš.

Potvrď modul, než začneš ladit profil

Chybějící modul vypadá přesně jako poškozený profil, takže nejdřív zkontroluj balíček. V Debianu a Ubuntu se podpora OpenVPN dodává jako network-manager-openvpn plus pomocník pro plochu; ve Fedoře jsou to balíčky NetworkManager-openvpn a NetworkManager-openvpn-gnome; v Archu je to networkmanager-openvpn.

dpkg -l network-manager-openvpn-gnome | tail -n 2
rpm -q NetworkManager-openvpn
pacman -Q networkmanager-openvpn

Pak importuj z absolutní cesty: nmcli connection import type openvpn file /home/you/profile.ovpn. Relativní cesty obvykle fungují, ale shell, který změnil adresář, z rychlého importu udělá objížďku. Pro WireGuard zkontroluj nmcli --version a ujisti se, že strana jádra existuje s modprobe wireguard; import, který uspěje na stroji bez modulu, tě nechá s připojením, jehož zařízení se nikdy neobjeví. reference nmcli dokumentuje podpříkaz import a přijímané názvy typů. Pokud je type wireguard rovnou odmítnut, sestavení je starší než funkce a správným krokem je balíček distribuce nebo backport — ne kopírovat konfiguraci do libovolného adresáře a doufat, že ji něco přečte.

Čti připojení OpenVPN, ne .ovpn

Když připojení existuje, čti parsovaná nastavení místo opětovného čtení souboru: nmcli connection show "Work VPN" | grep -E '^vpn\.'. Chceš remote a port, transport, identitní materiál — ca, cert, key, tls-auth nebo tls-crypt — a metodu ověření. U profilu s heslem soukromého klíče přidej sudo nmcli --show-secrets connection show "Work VPN" a podívej se na secret flagy: 0 je none, takže tajemství leží v keyfile; 1 je agent-owned; 2 je not-saved, což znamená, že se nikdy nezapíše do keyfile; 4 je not-required, což znamená, že tajemství vůbec není potřeba. Jsou to bity, ne škála, takže 3 je prostě agent-owned plus not-saved. Tajemství, na které se ptá jednou za relaci, je agent-owned (1), přičemž o něj žádá agent; samostatné číslo flagu pro to neexistuje. Neshoda flagů je obvyklý důvod, proč se profil připojí z appletu na ploše a selže ze skriptu nebo při startu.

Nejrychleji uvidíš, co parser zahodil, když požádáš modul, aby soubor zapsal zpět, a pak ho porovnáš: nmcli connection export "Work VPN" /tmp/roundtrip.ovpn. Direktivy, které v tom porovnání zmizí, při připojení nebudou existovat. Hooky jsou obvyklí podezřelí — script-security, up, down a route-up očekávají skript spouštěný se zvýšenými právy a záměrně se nepřenášejí. Nesnižuj ověřování a nedávej extra oprávnění, aby import prošel; nepodporovaná volba obvykle odráží sadu funkcí modulu, ne nedostupný server. Přesuň to chování do dispatcher skriptu NetworkManageru nebo do politiky na straně serveru.

Potvrď také, že identitní pole přežila: odkaz na CA, remote-cert-tls a jakoukoli kontrolu názvu, na kterou se profil spoléhal. Připojení, které se zvedne bez nich, může mluvit s čímkoli, co na té adrese odpovídá.

Čti připojení WireGuard, ne soubor wg-quick

Soubor wg-quick je formát se sémantikou shellu; importované připojení je sada nastavení. PrivateKey se stane soukromým klíčem rozhraní, Address se stane jednou nebo více adresami IPv4 a IPv6, DNS se mapuje na vlastnosti resolveru NetworkManageru, MTU se mapuje na wireguard.mtu (vlastní výchozí hodnota wg-quick je 1420) a každý blok peer se stane záznamem peer s veřejným klíčem, endpointem, povolenými IP a persistent keepalive. Vypiš, co se uložilo, pomocí nmcli --show-secrets connection show wg0; pokud se seznam peerů v tomto výstupu neobjeví, přečti keyfile:

sudo sed -n '/^\[wireguard\]/,/^\[/p' /etc/NetworkManager/system-connections/wg0.nmconnection

Nepřežije shellová polovina wg-quick. PreUp, PostUp, PreDown, PostDown a Table jsou chování toho nástroje, ne atributy rozhraní WireGuard, takže je po importu nic nespustí. Pokud originál používal Table = off, aby nechal výchozí trasu na pokoji, novější vydání NetworkManageru vystavují pro stejný účel ip4-auto-default-route a ip6-auto-default-route; nastav je explicitně, místo abys předpokládal, že se připojení chová jako skript. Hook, který přidával vlastní trasu, potřebuje tu trasu v nastavení směrování připojení, jinak prostě chybí.

Dej připojení přesně jednoho vlastníka

Klasická následná porucha je připojení, které funguje do dalšího startu a pak se zacyklí. Obvykle byl [email protected] ještě zapnutý z dřívějšího experimentu, nebo klient poskytovatele spouštěl vlastního daemona, a dva vlastníci psali trasy a DNS pro stejný cíl. NetworkManager nastavuje resolver svou cestou, wg-quick píše přes resolvconf a vyhrává poslední pisatel — takže překlad jmen funguje, pak přestane, pak zase funguje. Zkontroluj systemctl status wg-quick@wg0, nmcli connection show --active a ip link show type wireguard, a pak druhého vlastníka vypni, místo abys ladil jeho metriku.

Pokud opravdu potřebuješ oba, dej jim samostatná rozhraní a disjunktní povolené IP a nech přesně jednoho z nich nainstalovat výchozí trasu. Dvě výchozí trasy s různými metrikami nejsou split tunnel; je to závod, který rozhodne služba startující druhá. A po opětovném připojení znovu prohlédni aplikovaný stav — jednorázová ruční úprava resolveru, která všechno rozchodí, není důkaz, že import je kompletní.

Ověř provozem a přežij restart

Zvedni připojení pomocí nmcli connection up "Work VPN" a pak čti stav, adresu a trasy, místo abys věřil ikoně: nmcli device show wg0 | grep -E 'GENERAL.STATE|IP4.ADDRESS|IP4.ROUTE', ip route show default a skutečné vyhledání jména, které se překládá jen uvnitř tunelu. Handshake nebo úspěšný ping dokazuje jen to, že kryptografie funguje; nic neříká o forwardingu, prefixech split tunnelu nebo privátním DNS — a to jsou části, které se obvykle lámou.

Pak restartuj a zopakuj to. Chování autoconnect, přejmenované rozhraní a modul, který se načítá až po zařízení, jsou poruchy, které vidíš jen při čistém startu. journalctl -u NetworkManager -b --no-pager | tail -n 40 ukazuje, co daemon s tímto připojením při tomto startu udělal. Pro druhý počítač zkopíruj keyfile a drž ho ve vlastnictví roota s režimem 600, nebo použij nmcli connection export pro OpenVPN a znovu importuj výsledný .ovpn — cesta exportu nemá ekvivalent pro WireGuard, takže tento směr je kopie souboru nebo nový import z chráněného originálu.

Krátká verze, popořadě: potvrď modul nebo verzi NetworkManageru, importuj z absolutní cesty, přečti parsovaná nastavení včetně secret flagů, porovnej export OpenVPN s originálem, zkontroluj hooky a trasy na straně WireGuardu, vypni každého druhého vlastníka, a pak po restartu ověř překlad jména a směrovací tabulku. Když připojení projde tím vším, soubor profilu, který ho spustil, se může vrátit do chráněného úložiště.

Související články