Hallo zusammen!
Nach längerem Herumprobieren habe ich endlich eine stabile Lösung gefunden, um Mullvad VPN zusammen mit firewalld auf openSUSE Leap 16.0 zum Laufen zu bringen – inklusive funktionierendem Kill Switch!
🔴 DAS PROBLEM:
Auf Leap 16.0 (Kernel 6.12.x, reines nftables) gab es bei mir ständige Konflikte zwischen Mullvads Kill Switch und firewalld:
- Beim Systemstart konnte ich mich nicht verbinden
- Mullvad-GUI zeigte Fehlermeldungen ("Firewallregeln konnten nicht angewendet werden")
- Kill Switch funktionierte nicht oder blockierte das gesamte Internet
- Ich musste nach jedem Boot "nft flush ruleset" ausführen, um überhaupt ins Internet zu kommen
🟢 DIE LÖSUNG:
Statt firewalld zu deaktivieren oder Mullvad ohne Kill Switch zu nutzen, habe ich eine dedizierte firewalld-Zone für das Mullvad-Interface erstellt. Ein NetworkManager-Dispatcher-Skript sorgt automatisch dafür, dass das WireGuard-Interface beim Verbinden in diese Zone verschoben wird.
✅ SCHRITT-FÜR-SCHRITT-ANLEITUNG:
📦 QUELLE DER MULLVAD-RPM:
Die funktionierende Version habe ich direkt von Mullvad bezogen:
https://mullvad.net/download/app/rpm/latest
Das openSUSE-Community-Paket aus den OBS-Repositories hatte bei mir
Probleme mit systemd/nftables unter Leap 16.0. Die offizielle RPM von
Mullvad ist aktuell, korrekt gepackt und funktioniert stabil.
1️⃣ Dedizierte firewalld-Zone erstellen (einmalig):
sudo firewall-cmd --permanent --new-zone=mullvad
sudo firewall-cmd --permanent --zone=mullvad --set-target=ACCEPT
sudo firewall-cmd --reload
2️⃣ NetworkManager-Dispatcher-Skript erstellen:
sudo tee /etc/NetworkManager/dispatcher.d/10-mullvad.sh > /dev/null <<'EOF'
#!/bin/bash
IFACE="$1"
ACTION="$2"
# Mullvad nutzt Interfaces wie wg-mullvad oder *-wg-*
if [[ "$IFACE" == *wg* && "$ACTION" == "up" ]]; then
firewall-cmd --zone=mullvad --add-interface="$IFACE"
logger -t mullvad-dispatcher "Added $IFACE to mullvad zone"
elif [[ "$IFACE" == *wg* && "$ACTION" == "down" ]]; then
firewall-cmd --zone=mullvad --remove-interface="$IFACE"
logger -t mullvad-dispatcher "Removed $IFACE from mullvad zone"
fi
EOF
sudo chmod 755 /etc/NetworkManager/dispatcher.d/10-mullvad.sh
sudo chown root:root /etc/NetworkManager/dispatcher.d/10-mullvad.sh
Alles anzeigen
3️⃣ NetworkManager neu laden:
sudo systemctl reload NetworkManager
4️⃣ Mullvad verbinden – fertig!
🎯 WAS PASSIERT HIER?
- Das Skript wird automatisch ausgeführt, sobald NetworkManager ein WireGuard-Interface erstellt
- Das Mullvad-Interface wird in die "mullvad"-Zone verschoben (TARGET=ACCEPT = kein Filtering)
- firewalld blockiert nicht mehr Mullvads eigene nftables-Regeln
- Der Kill Switch kann jetzt funktionieren, ohne mit firewalld zu kollidieren
- Beim Trennen wird das Interface automatisch wieder entfernt
✅ ERGEBNIS:
- ✅ firewalld bleibt aktiv (Schutz für andere Interfaces)
- ✅ Mullvad Kill Switch funktioniert
- ✅ Keine manuellen Eingriffe nach dem Boot nötig
- ✅ Automatisches Verbinden funktioniert
- ✅ System bleibt sicher und stabil
🔍 TESTEN:
# Prüfen ob das Interface in der richtigen Zone ist
sudo firewall-cmd --zone=mullvad --list-interfaces
# Sollte z.B. "wg-mullvad" ausgeben, wenn VPN verbunden ist
💡 HINTERGRUND:
Das Problem war, dass firewalld und Mullvad beide versuchen, nftables zu verwalten. Durch die dedizierte Zone entziehe ich das Mullvad-Interface firewallds Filter-Logik, ohne firewalld komplett zu deaktivieren.
Hoffe, das hilft anderen Leap-16-Nutzern! Bei Fragen gerne melden.
Viele Grüße,
nilsholgerson