WireGuard kan inte skapa sitt gränssnitt: kärna eller behörighet?
Skapandet av gränssnittet misslyckas innan någon peer har skickat ett handskakning. Läs felet för att skilja en saknad modul från en behörighetsgräns eller från en befintlig ägare av gränssnittet.
WireGuard lyckas inte skapa sitt gränssnitt, så det finns ingen enhet att konfigurera, ingen nyckel att utbyta och ingen handskakning att felsöka. Felet stannar helt på den lokala maskinen, och feltexten säger vilken del av den lokala stacken som nekade. Att läsa den rätt är snabbare än att installera om peerens konfiguration. Lagren kan skiljas åt, och meddelandet namnger det som nekade.
Felet inträffar innan någon peer talar
Att skapa ett gränssnitt är en enda netlink-begäran till kärnan om en enhet av typen wireguard. Kärnan har antingen en drivrutin som förstår den typen eller inte, och svaret kommer tillbaka direkt. I detta steg lämnar inget paket maskinen, och därför kan slutpunktsadresser och servernycklar inte vara orsaken.
Den ordningen spelar roll för diagnosen. Om kommandot aldrig skapade en enhet kan problemet inte vara en felaktig offentlig nyckel eller en blockerad UDP-port. Reparera den lokala skapandevägen först och titta utåt först efteråt.
Vilken implementering som ska äga enheten
Två implementeringar kan svara på den begäran. Modulen i kärnan registrerar enhetstypen wireguard, och en implementering i användarutrymmet som wireguard-go erbjuder samma gränssnitt genom en annan mekanism. Om modulen saknas avvisar kärnan begäran med ett fel om en enhet som inte stöds, och lösningen är antingen att läsa in modulen eller att rikta verktygen mot implementeringen i användarutrymmet.
Kontrollera vad som faktiskt finns innan du väljer mellan dem. Det första kommandot visar om modulen är inläst och det andra frågar kärnan direkt:
lsmod | grep wireguard
ip link add wgtest0 type wireguard
Det andra kommandot är den minsta möjliga reproduktionen: det begär en enhet och inget annat. Om det misslyckas med ett meddelande om en typ som inte stöds är den saknade delen implementeringen och inte din konfigurationsfil.
| 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 |
Behörigheter och containerns gränser
Att skapa och konfigurera en nätverksenhet kräver behörighet, antingen som root eller med förmågan att administrera nätverket. En vanlig användarsession kan inte göra det, och den begränsningen är designen och inte ett hinder att kringgå genom att köra ett installationsprogram du inte har granskat.
Inuti en container fördubblas gränsen. Containern behöver åtkomst till tunneleenheten och förmågan att konfigurera den, och de flaggor som ger det är samma som en Linux VPN-container använder. En begränsad gäst som normalt kan surfa på webben kan fortfarande inte skapa ett gränssnitt, eftersom surfning inte kräver den förmågan. Ge förmågan till tjänsten som behöver den och inte till varje session på värden.
Lös namnkonflikten och försök sedan igen
Ett gränssnitt som redan finns är inte automatiskt en rest. En annan hanterare kan äga namnet och använda det just nu, så undersök det innan du raderar något:
ip link show wg0
sudo wg show wg0
Om ägaren är en aktiv tjänst konfigurerar du den tjänsten i stället för att skapa en andra enhet. Om den verkligen är inaktuell tar du bort den via verktyget som skapade den och tar sedan upp gränssnittet med den dokumenterade klienten eller uniten så att konfigurationen och enheten hålls i takt.
När skapandet lyckas, hör nästa fel till ett senare steg, och en unit som rapporterar fel efter att enheten finns är ett annat problem än en enhet som aldrig skapades. Skilj de två åt innan du ändrar behörigheter igen.