WireGuard kan ikke oprette sin grænseflade: kerne eller tilladelse?
Oprettelsen af grænsefladen mislykkes, før nogen peer har sendt et håndtryk. Læs fejlen for at skelne et manglende modul fra en privilegrænse eller en eksisterende ejer af grænsefladen.
WireGuard kan ikke oprette sin grænseflade, så der er ingen enhed at konfigurere, ingen nøgle at udveksle og intet håndtryk at fejlfinde. Fejlen ligger helt på den lokale maskine, og fejlteksten siger, hvilken del af den lokale stak der afviste. At læse den rigtigt er hurtigere end at geninstallere peerens konfiguration. Lagene kan skilles ad, og beskeden navngiver det lag, der afviste.
Fejlen sker, før nogen peer taler
At oprette en grænseflade er én netlink-anmodning til kernen om en enhed af typen wireguard. Kernen har enten en driver, der forstår den type, eller ikke, og svaret kommer med det samme. Ingen pakker forlader maskinen i dette trin, og derfor kan endepunktsadresser og servernøgler ikke være årsagen.
Den rækkefølge betyder noget for diagnosen. Hvis kommandoen aldrig oprettede en enhed, kan problemet ikke være en forkert offentlig nøgle eller en blokeret UDP-port. Ret først den lokale oprettelsesvej og kig derefter udad.
Hvilken implementering skal eje enheden
To implementeringer kan svare på den anmodning. Modulet i kernen registrerer enhedstypen wireguard, og en implementering i brugerrummet som wireguard-go tilbyder den samme grænseflade via en anden mekanisme. Hvis modulet mangler, afviser kernen anmodningen med en fejl om en ikke-understøttet enhed, og løsningen er enten at indlæse modulet eller at pege værktøjerne mod implementeringen i brugerrummet.
Kontroller, hvad der faktisk er til stede, før du vælger mellem dem. Den første kommando viser, om modulet er indlæst, og den anden spørger kernen direkte:
lsmod | grep wireguard
ip link add wgtest0 type wireguard
Den anden kommando er den mindst mulige gengivelse: den beder om en enhed og intet andet. Hvis den fejler med en besked om en ikke-understøttet type, er det manglende stykke implementeringen og ikke 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 |
Privilegier og containergrænser
At oprette og konfigurere en netværksenhed kræver privilegier, enten som root eller med evnen til at administrere netværket. En normal brugersession kan ikke gøre det, og den begrænsning er designet og ikke en forhindring, der skal omgås ved at køre et installationsprogram, du ikke har gennemgået.
Inde i en container fordobles grænsen. Containeren skal have adgang til tunneleenheden og evnen til at konfigurere den, og de flag, der giver det, er de samme, som en Linux VPN-container bruger. En begrænset gæst, der normalt kan browse på nettet, kan stadig ikke oprette en grænseflade, fordi browsing ikke kræver den evne. Giv evnen til den tjeneste, der har brug for den, og ikke til hver session på værten.
Løs navnekonflikten, og prøv igen
En grænseflade, der allerede findes, er ikke automatisk en rest. En anden manager kan eje navnet og bruge det lige nu, så undersøg den, før du sletter noget:
ip link show wg0
sudo wg show wg0
Hvis ejeren er en aktiv tjeneste, skal du konfigurere den tjeneste i stedet for at oprette en anden enhed. Hvis den virkelig er forældet, skal du fjerne den via det værktøj, der oprettede den, og derefter bringe grænsefladen op med den dokumenterede klient eller unit, så konfigurationen og enheden forbliver i takt.
Når oprettelsen lykkes, hører den næste fejl til et senere trin, og en unit, der rapporterer fejl, efter at enheden findes, er et andet problem end en enhed, der aldrig blev oprettet. Adskil de to, før du ændrer tilladelser igen.