VPNSmith
self-host-vpnINFO

WireGuard unter macOS: die zwei Installationen und der Schnittstellenname, der Linux-Anleitungen scheitern lässt

Die App aus dem Mac App Store und brew install wireguard-tools sind nicht dasselbe Produkt. Welches wählen, wie eine .conf importieren, und warum wg0 unter macOS scheitert, utun aber funktioniert.

Von Eric Gerard · Gründer · VPNSmith - Spezialist für selbstgehostete VPNs & DSGVO-VPS3 Min. LesezeitFoto über Pixabay

WireGuard auf einem Mac zu installieren wirkt trivial, bis die Anleitung, der Sie folgen, für Linux geschrieben war. Zwei Dinge bringen Leute zu Fall: Es gibt zwei verschiedene WireGuard-Produkte für macOS, und der Schnittstellenname, den alle Beispiele verwenden, wg0, kann auf einem Mac nicht existieren.

Die zwei Installationen, laut offizieller Seite

Die WireGuard-Installationsseite nennt beide, und es ist tatsächlich unterschiedliche Software:

Die App aus dem Mac App Store. Ein grafischer Client mit Eintrag in der Menüleiste, Tunnelimport und Aktivierung bei Bedarf. Das wollen die meisten.

Die Kommandozeilenwerkzeuge.

brew install wireguard-tools
# oder, mit MacPorts
port install wireguard-tools

Sie erhalten wg und wg-quick, dieselben Befehle wie auf einem Server. Darunter läuft die Go-Implementierung im Userspace statt eines Kernelmoduls, denn macOS hat kein WireGuard im Kernel.

Beide teilen sich die Tunnelliste nicht. Ein in der App importierter Tunnel taucht nicht in wg show auf, und umgekehrt. Wählen Sie pro Maschine eines, sofern Sie keinen Grund für beides haben.

Nahaufnahme eines Terminalbildschirms mit einer Unix-Verzeichnisliste in Grün und Blau
Nahaufnahme eines Terminalbildschirms mit einer Unix-Verzeichnisliste in Grün und Blau

Was Linux-Anleitungen scheitern lässt: wg0 gibt es hier nicht

Das ist der häufigste Fehlschlag, und die Fehlermeldung erklärt ihn selten.

Unter Linux legen Sie wg0 an und machen weiter. Unter macOS laufen Tunnel über den utun-Treiber, und die plattformübergreifende WireGuard-Dokumentation formuliert die Einschränkung unmissverständlich: Der utun-Treiber kann keine beliebigen Schnittstellennamen haben. Man muss utun gefolgt von einer Zahl verwenden, etwa utun0, oder schlicht utun, damit der Kernel wählt.

# scheitert unter macOS
sudo wg-quick up wg0

# funktioniert
sudo wg-quick up utun

Wenn Sie eine Anleitung mit wg0 kopiert haben, benennen Sie die Konfigurationsdatei und jeden Befehl um, der sie referenziert. Schlüssel, AllowedIPs, Endpoint und DNS sind nicht betroffen: Nur der Schnittstellenname ist plattformabhängig.

Herausfinden, welches utun Sie bekommen haben. Wenn Sie den Kernel wählen lassen, brauchen Sie einen Weg, das Ergebnis zu erfahren. Setzen Sie WG_TUN_NAME_FILE, bevor Sie den Tunnel hochfahren, und der gewählte Name wird dort hineingeschrieben:

export WG_TUN_NAME_FILE=/tmp/wg-name
sudo -E wg-quick up utun
cat /tmp/wg-name    # zum Beispiel utun4

Sonst lesen Sie die Ausgabe von ifconfig und raten, welches utun Ihnen gehört: einmal in Ordnung, in einem Skript mühsam.

Eine vorhandene Konfiguration importieren

Haben Sie eine Client-Konfiguration auf dem Server erzeugt, lässt sie sich unverändert übernehmen. In der App nutzen Sie den Import und wählen die .conf-Datei; der Tunnel erscheint in der Liste und ist bereit. Auf der Kommandozeile legen Sie sie unter /opt/homebrew/etc/wireguard/utun.conf (Apple Silicon) oder /usr/local/etc/wireguard/utun.conf (Intel) ab, benennen die Datei nach der Schnittstelle und führen wg-quick up utun aus.

Eine für ein Telefon erzeugte Konfiguration funktioniert auch auf einem Mac. Sie ist eine Peer-Definition, kein gerätespezifisches Artefakt, vorausgesetzt jedes Gerät hat sein eigenes Schlüsselpaar statt eines geteilten.

Prüfen, ob es wirklich funktioniert

Fahren Sie den Tunnel hoch und bestätigen Sie zwei Dinge, statt sie anzunehmen.

sudo wg show

Ein gesunder Peer zeigt einen latest handshake innerhalb der letzten zwei Minuten und transfer-Zähler ungleich null in beide Richtungen. Gesendet, aber nichts empfangen ist die Signatur eines blockierten Rückwegs. Kommt der Handshake nie zustande, geht unser Leitfaden zur Handshake-Fehlerbehebung die Ursachen nach Wahrscheinlichkeit durch.

Bestätigen Sie dann, dass der Verkehr wirklich durch den Tunnel läuft und nicht bloß die Schnittstelle existiert: Prüfen Sie Ihre öffentliche IP im Browser, und wenn Sie DNS durch den Tunnel leiten, kontrollieren Sie, dass nichts ausleckt. Unsere Notiz zu DNS-Lecks bei WireGuard behandelt die relevanten Einstellungen.

Kurz gefasst

Zwei Produkte: die App aus dem App Store für einen grafischen Client, wireguard-tools über Homebrew oder MacPorts für dieselbe Kommandozeile wie auf dem Server. Sie teilen keine Tunnel. Und unter macOS muss die Schnittstelle utun oder utunN heißen, niemals wg0, weil der utun-Treiber keine beliebigen Namen akzeptiert. Diese eine Zeile erklärt die meisten gescheiterten Mac-Einrichtungen nach Linux-Anleitungen.

★ Nürnberger DSGVO-Rechenzentrum · ✓ Dedizierte IPv4 inklusive · 200+ Mbps garantiert

Ihr Mac ist der Client. Der Tunnel braucht einen Server → Contabo VPSEin Linux-VPS betreibt die WireGuard-Seite, mit der sich Ihr Mac verbindet, mit Kernel- statt Userspace-Implementierung. Root-Zugriff, planbarer Preis, EU-Rechenzentren.

★ Nürnberger DSGVO-Rechenzentrum · ✓ Dedizierte IPv4 inklusive · 200+ Mbps garantiert

Hoste dein VPN auf deinem eigenen VPS → ContaboVoller Root-Zugriff · öffentliche IPv4 · wähle deine Region

Häufig gestellte Fragen

Wie installiere ich WireGuard unter macOS?
Die offizielle Installationsseite nennt zwei Wege. Die grafische Anwendung kommt aus dem Mac App Store. Die Kommandozeilenwerkzeuge kommen aus einem Paketmanager: `brew install wireguard-tools` mit Homebrew oder `port install wireguard-tools` mit MacPorts. Es sind nicht dasselbe Produkt und sie teilen sich die Tunnelliste nicht. Wählen Sie eines und bleiben Sie dabei, sofern Sie nicht bewusst beide wollen.
Warum funktioniert wg0 unter macOS nicht?
Weil macOS kein WireGuard-Modul im Kernel hat: Tunnel laufen über die Userspace-Implementierung auf dem utun-Treiber, und dieser Treiber akzeptiert keine beliebigen Schnittstellennamen. Die plattformübergreifende WireGuard-Dokumentation ist eindeutig: Man muss utun gefolgt von einer Zahl verwenden oder schlicht utun, damit der Kernel eine auswählt. Eine Linux-Anleitung, die wg0 anlegen lässt, scheitert daher auf einem Mac, und die Fehlermeldung erklärt selten warum.
Wie erfahre ich, welche utun-Schnittstelle der Kernel gewählt hat?
Setzen Sie die Umgebungsvariable WG_TUN_NAME_FILE, bevor Sie den Tunnel hochfahren. Bleibt der Schnittstellenname utun, wird der tatsächlich vom Kernel gewählte Name in die angegebene Datei geschrieben. Ohne das bleibt nur, die Ausgabe von `ifconfig` zu lesen und zu raten, welches utun Ihnen gehört.
App aus dem App Store oder Homebrew-Werkzeuge?
Die App, wenn Sie ein normales macOS-Erlebnis wollen: Umschalter in der Menüleiste, Tunnelimport per Drag-and-drop, Aktivierung bei Bedarf. Die wireguard-tools, wenn Sie skripten, die Maschine per SSH verwalten oder dieselben Befehle wg und wg-quick wie auf dem Server wollen. Die App läuft in der Sandbox und aktualisiert sich über den App Store; die Kommandozeile über Ihren Paketmanager.
Kann ich die .conf von meinem Linux-Server weiterverwenden?
Ja, auf der Client-Seite. Eine Peer-Konfiguration ist reiner Text und damit portabel: Die für einen Laptop erzeugten Blöcke [Interface] und [Peer] funktionieren unverändert. Das Einzige, was nicht übertragbar ist, ist der Schnittstellenname: Benennen Sie ihn in utun oder utunN um, falls die Datei oder Ihre Befehle wg0 nennen. Schlüssel, AllowedIPs, Endpoint und DNS gehen unverändert mit.