WireGuard nemůže vytvořit své rozhraní: jádro, nebo oprávnění?
Vytvoření rozhraní selhává ještě před prvním handshakeem s protějškem. Přečtěte si chybu, abyste odlišili chybějící modul od hranice oprávnění nebo od stávajícího vlastníka rozhraní.
WireGuard nedokáže vytvořit své rozhraní, takže není žádné zařízení ke konfiguraci, žádný klíč k výměně a žádný handshake k ladění. Selhání zůstává celé na místním stroji a text chyby říká, která část místního zásobníku odmítla. Přečíst ho správně je rychlejší než přeinstalovat konfiguraci protějšku. Vrstvy lze oddělit a zpráva pojmenovává tu, která odmítla.
Chyba nastane dřív, než kterýkoli protějšek promluví
Vytvoření rozhraní je jeden požadavek netlink na jádro o zařízení typu wireguard. Jádro buď má ovladač, který tomu typu rozumí, nebo ho nemá, a odpověď přichází okamžitě. V tomto kroku neopouští stroj žádný paket, a proto adresy koncových bodů a klíče serveru nemohou být příčinou.
Na tomto pořadí záleží při diagnostice. Pokud příkaz nikdy zařízení nevytvořil, nemůže být problémem špatný veřejný klíč ani zablokovaný port UDP. Opravte nejprve místní cestu vytváření a teprve potom se dívejte ven.
Která implementace má zařízení vlastnit
Na tento požadavek mohou odpovědět dvě implementace. Modul uvnitř jádra registruje typ zařízení wireguard a implementace v uživatelském prostoru, například wireguard-go, poskytuje stejné rozhraní jiným mechanismem. Pokud modul chybí, jádro požadavek odmítne chybou o nepodporovaném zařízení a řešením je buď modul načíst, nebo nasměrovat nástroje na implementaci v uživatelském prostoru.
Než mezi nimi zvolíte, zkontrolujte, co je skutečně přítomné. První příkaz ukáže, zda je modul načtený, a druhý se ptá jádra přímo:
lsmod | grep wireguard
ip link add wgtest0 type wireguard
Druhý příkaz je nejmenší možná reprodukce: žádá zařízení a nic jiného. Pokud selže se zprávou o nepodporovaném typu, chybějící částí je implementace, ne váš konfigurační soubor.
| Error text | What refused | Next step |
|---|---|---|
| Unknown device type or operation not supported | The kernel has no wireguard driver | Load the module or use the userspace implementation |
| Operation not permitted | Missing privilege | Use the service context or grant the capability |
| File exists | The name is already in use | Inspect the owner before touching it |
| No such device in a container | No tunnel device or capability | Add the device and NET_ADMIN to the container |
Oprávnění a hranice kontejneru
Vytvoření a konfigurace síťového zařízení vyžaduje oprávnění, buď jako root, nebo s možností spravovat síť. Běžná uživatelská relace to nedokáže a toto omezení je záměr, ne překážka, kterou je třeba obcházet spuštěním instalátoru, který jste neprošli.
Uvnitř kontejneru se hranice zdvojnásobuje. Kontejner potřebuje přístup k tunelovému zařízení a možnost ho konfigurovat, a příznaky, které to dávají, jsou stejné jako ty, které používá kontejner VPN na Linuxu. Omezený host, který běžně umí prohlížet web, stále nemůže vytvořit rozhraní, protože prohlížení takovou možnost nepotřebuje. Dejte možnost službě, která ji potřebuje, a ne každé relaci na hostiteli.
Vyřešte konflikt názvů a zkuste to znovu
Rozhraní, které už existuje, není automaticky zbytek. Název může vlastnit jiný správce a právě ho používat, takže ho před smazáním čehokoli prohlédněte:
ip link show wg0
sudo wg show wg0
Pokud je vlastníkem aktivní služba, nakonfigurujte tuto službu místo vytváření druhého zařízení. Pokud je opravdu zastaralé, odstraňte ho nástrojem, který ho vytvořil, a potom rozhraní zvedněte zdokumentovaným klientem nebo unitem, aby konfigurace a zařízení zůstaly v souladu.
Jakmile vytvoření uspěje, další selhání patří k pozdější fázi, a unit, který hlásí selhání poté, co zařízení existuje, je jiný problém než zařízení, které nikdy nevzniklo. Oddělte obojí, než znovu změníte oprávnění.