WireGuard kan ikke opprette grensesnittet sitt: kjerne eller tillatelse?
Opprettelsen av grensesnittet feiler før noen peer har sendt et håndtrykk. Les feilen for å skille en manglende modul fra en privilegiegrense eller en eksisterende eier av grensesnittet.
WireGuard klarer ikke å opprette grensesnittet sitt, så det finnes ingen enhet å konfigurere, ingen nøkkel å utveksle og ingen håndtrykk å feilsøke. Feilen ligger helt på den lokale maskinen, og feilteksten sier hvilken del av den lokale stakken som avviste. Å lese den riktig er raskere enn å installere peerens konfigurasjon på nytt. Lagene kan skilles, og meldingen navngir laget som avviste.
Feilen skjer før noen peer snakker
Å opprette et grensesnitt er én netlink-forespørsel til kjernen om en enhet av typen wireguard. Kjernen har enten en driver som forstår den typen eller ikke, og svaret kommer tilbake med en gang. Ingen pakker forlater maskinen i dette trinnet, og derfor kan endepunktadresser og servernøkler ikke være årsaken.
Den rekkefølgen betyr noe for diagnosen. Hvis kommandoen aldri opprettet en enhet, kan problemet ikke være en feil offentlig nøkkel eller en blokkert UDP-port. Reparer den lokale opprettelsesveien først og se utover først etterpå.
Hvilken implementasjon skal eie enheten
To implementasjoner kan svare på den forespørselen. Modulen i kjernen registrerer enhetstypen wireguard, og en implementasjon i brukerrommet som wireguard-go tilbyr det samme grensesnittet gjennom en annen mekanisme. Hvis modulen mangler, avviser kjernen forespørselen med en feil om en ikke støttet enhet, og løsningen er enten å laste modulen eller å peke verktøyene mot implementasjonen i brukerrommet.
Sjekk hva som faktisk er til stede før du velger mellom dem. Den første kommandoen viser om modulen er lastet, og den andre spør kjernen direkte:
lsmod | grep wireguard
ip link add wgtest0 type wireguard
Den andre kommandoen er den minst mulige gjengivelsen: den ber om en enhet og ingenting annet. Hvis den feiler med en melding om en ikke støttet type, er den manglende biten implementasjonen og ikke konfigurasjonsfilen din.
| 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 containergrenser
Å opprette og konfigurere en nettverksenhet krever privilegier, enten som root eller med evnen til å administrere nettverket. En vanlig brukersesjon kan ikke gjøre det, og den begrensningen er designet og ikke en hindring som skal omgås ved å kjøre et installasjonsprogram du ikke har gjennomgått.
Inne i en container dobles grensen. Containeren trenger tilgang til tunneleenheten og evnen til å konfigurere den, og flaggene som gir det er de samme som en Linux VPN-container bruker. En begrenset gjest som normalt kan surfe på nettet, kan fortsatt ikke opprette et grensesnitt, fordi surfing ikke krever den evnen. Gi evnen til tjenesten som trenger den, og ikke til hver sesjon på verten.
Løs navnekonflikten og prøv igjen
Et grensesnitt som allerede finnes er ikke automatisk en rest. En annen behandler kan eie navnet og bruke det akkurat nå, så undersøk det før du sletter noe:
ip link show wg0
sudo wg show wg0
Hvis eieren er en aktiv tjeneste, konfigurer den tjenesten i stedet for å opprette en annen enhet. Hvis den virkelig er utdatert, fjern den gjennom verktøyet som opprettet den, og hent deretter grensesnittet opp med den dokumenterte klienten eller uniten slik at konfigurasjonen og enheten holder følge.
Når opprettelsen lykkes, hører den neste feilen til et senere trinn, og en unit som rapporterer feil etter at enheten finnes, er et annet problem enn en enhet som aldri ble opprettet. Skill de to før du endrer tillatelser igjen.