ubuntuusers.de

wireguard 'wg0' virtual Interface lässt sich nicht entfernen

Status: Gelöst | Ubuntu-Version: Server 20.04 (Focal Fossa)
Antworten |

Nanomo

Anmeldungsdatum:
5. April 2021

Beiträge: 12

Hallo liebes Forum,

ich komme mal wieder mit einem neuen Problemchen auf Euch zu und hoffe das Ihr mir helfen könnt dieses zu lösen. Ich möchte gerne iptables erweitern und muss dazu die wireguard services reloaden bzw am Besten das virtuelle Interface einfach wiederlöschen, um es später wieder anzulegen. Leider gelingt mir das nicht und nun bin ich mit meinem Wissen am Ende angelangt und benötige dringend Hilfe. Eine Neuinstallation von Wireguard habe ich bislang noch nicht gemacht, da ich dieses Problem als Lerneffekt sehe und am liebsten eine ganghafte Lösung finden möchte um in Zukunft es selber lösen zu können, sollte es erneut auftreten.

Mein System: Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-187-generic x86_64)

Thema: WireGuard Interface lässt sich nicht herunterfahren

Doings: systemctl status wg-quick@wg0

root@kgs-server:~# systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-07-02 10:44:20 CEST; 2min 6s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 37751 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=1/FAILURE)
   Main PID: 37751 (code=exited, status=1/FAILURE)

Jul 02 10:44:20 kgs-server systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Jul 02 10:44:20 kgs-server wg-quick[37751]: wg-quick: `wg0' already exists
Jul 02 10:44:20 kgs-server systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=1/FAILURE
Jul 02 10:44:20 kgs-server systemd[1]: wg-quick@wg0.service: Failed with result 'exit-code'.
Jul 02 10:44:20 kgs-server systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.
root@kgs-server:~#

journalctl -u wg-quick@wg0

Jul 02 10:44:20 kgs-server systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Jul 02 10:44:20 kgs-server wg-quick[37751]: wg-quick: `wg0' already exists
Jul 02 10:44:20 kgs-server systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=1/FAILURE
Jul 02 10:44:20 kgs-server systemd[1]: wg-quick@wg0.service: Failed with result 'exit-code'.
Jul 02 10:44:20 kgs-server systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.

Prüfung: wg-quick down wg0

[#] /sbin/iptables -D OUTPUT -t mangle -o wg0 -p tcp --sport 22 -j MARK --set-mark 2
iptables: No chain/target/match by that name.

ip a:

8: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.7.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

watch wg show

Every 2.0s: wg show                                                                                                                                                      kgs-server: Tue Jul  2 10:56:46 2024

interface: wg0
  public key: XXXXXXXX
  private key: (hidden)
  listening port: 51820

peer: XXXXXXXX=
  endpoint: 1.2.3.4:58303
  allowed ips: 10.7.0.3/32
  latest handshake: 1 minute, 30 seconds ago
  transfer: 466.25 KiB received, 98.47 KiB sent

peer: XXXXXXXX
  allowed ips: 10.7.0.2/32

Wireguard Tunnel funktionierten kürzlich noch, bevor ich ein Systemupdate gemacht habe. Danach auch noch, aber ich konnte seitdem die virtuelle Netzwerkkarte nicht mehr herunterfahren.

Ein Restart mit dem Befehl "systemctl restart wg-quick@wg0" führt zum gleichen Fehler.

Vielleicht könntet Ihr mir noch einen Tipp geben, wie es die Karte löschen und wieder anlegen kann?

Besten Dank im Voraus und liebe Grüße

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14273

Nanomo schrieb:

Vielleicht könntet Ihr mir noch einen Tipp geben, wie es die Karte löschen und wieder anlegen kann?

Versuch mal mit:

... use down to tear down and remove an interface.
sudo wg-quick down wg0
ip a

und

sudo wg-quick up wg0
ip a

Nanomo

(Themenstarter)

Anmeldungsdatum:
5. April 2021

Beiträge: 12

Hatte ich bereits versucht. Steht weiter oben. Funktioniert leider nicht. Ich habe auch den Service disabled und dann

 wg-quick down wg0

probiert aber leider auch vergeblich.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14273

Nanomo schrieb:

Hatte ich bereits versucht. ...

Als root (weil ohne sudo)?
Versuch mal:

sudo modprobe -rv wireguard

Nanomo

(Themenstarter)

Anmeldungsdatum:
5. April 2021

Beiträge: 12

Ja, als root. Im obersten Codeblock siehst Du das ich als root angemeldet war.

Moment....nun ist das Interface weg und ich weiß nicht warum!!! Habe ich gerade per ifconfig geprüft. Heute morgen hat das alles nichts geholfen.

Ok...nun habe ich den nächsten Fehler:

systemctl start wg-quick@wg0

root@kgs-server:/etc/wireguard# systemctl start wg-quick@wg0
Job for wg-quick@wg0.service failed because the control process exited with error code.
See "systemctl status wg-quick@wg0.service" and "journalctl -xe" for details.

journalctl -ru wg-quick@wg0

May 25 13:01:04 kgs-server systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
May 25 12:54:32 kgs-server systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.
May 25 12:54:32 kgs-server systemd[1]: wg-quick@wg0.service: Failed with result 'exit-code'.
May 25 12:54:32 kgs-server systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
May 25 12:54:32 kgs-server wg-quick[805554]: [#] ip link delete dev wg0
May 25 12:54:32 kgs-server wg-quick[805606]: /usr/bin/wg-quick: eval: line 295: syntax error near unexpected token `newline'
May 25 12:54:32 kgs-server wg-quick[805554]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens1 -j MASQUERADE; ip6tables -A FORWARD -i w>
May 25 12:54:32 kgs-server wg-quick[805554]: [#] ip link set mtu 1420 up dev wg0
May 25 12:54:32 kgs-server wg-quick[805554]: [#] ip -4 address add 10.7.0.1/24 dev wg0
May 25 12:54:32 kgs-server wg-quick[805554]: [#] wg setconf wg0 /dev/fd/63
May 25 12:54:32 kgs-server wg-quick[805554]: [#] ip link add wg0 type wireguard
May 25 12:54:32 kgs-server systemd[1]: Starting WireGuard via wg-quick(8) for wg0...

Welches File ist da unten gemeint?

root@kgs-server:/etc/wireguard# systemctl status wg-quick@wg0

Jul 02 15:41:10 kgs-server wg-quick[42121]: [#] wg setconf wg0 /dev/fd/63
Jul 02 15:41:11 kgs-server wg-quick[42121]: [#] ip -4 address add 10.7.0.1/24 dev wg0
Jul 02 15:41:11 kgs-server wg-quick[42121]: [#] ip link set mtu 1420 up dev wg0
Jul 02 15:41:11 kgs-server wg-quick[42121]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE; ip6tables -A FORWARD -i wg>
Jul 02 15:41:11 kgs-server wg-quick[42121]: [#] ip route add default via 85.88.29.81 dev eno1 table ssh
'''Jul 02 15:41:11 kgs-server wg-quick[42177]: RTNETLINK answers: File exists'''
Jul 02 15:41:11 kgs-server wg-quick[42121]: [#] ip link delete dev wg0
Jul 02 15:41:11 kgs-server systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Jul 02 15:41:11 kgs-server systemd[1]: wg-quick@wg0.service: Failed with result 'exit-code'.
Jul 02 15:41:11 kgs-server systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.

root@kgs-server:~#

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14273

Nanomo schrieb:

journalctl -ru wg-quick@wg0

May 25 12:54:32 kgs-server wg-quick[805606]: /usr/bin/wg-quick: eval: line 295: syntax error near unexpected token `newline'

Poste mal diese Zeile hier:

nano +295,1 /usr/bin/wg-quick

EDIT:

Poste auch die richtig anonymisierte Ausgabe, von deiner wg0.conf-Datei.

Nanomo

(Themenstarter)

Anmeldungsdatum:
5. April 2021

Beiträge: 12

root@kgs-server:~# nano +295,1 /usr/bin/wg-quick

        done
        for cmd in "${POST_UP[@]}"; do
                new_config+="PostUp = $cmd"$'\n'
        done
        for cmd in "${PRE_DOWN[@]}"; do
                new_config+="PreDown = $cmd"$'\n'
        done
        for cmd in "${POST_DOWN[@]}"; do
                new_config+="PostDown = $cmd"$'\n'
        done
        old_umask="$(umask)"
        umask 077
        current_config="$(cmd wg showconf "$INTERFACE")"
        trap 'rm -f "$CONFIG_FILE.tmp"; exit' INT TERM EXIT
        echo "${current_config/\[Interface\]$'\n'/$new_config}" > "$CONFIG_FILE.tmp" || die "Could not write configuration file"
        sync "$CONFIG_FILE.tmp"
        mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" || die "Could not move configuration file"
        trap - INT TERM EXIT
        umask "$old_umask"
}

execute_hooks() {
        local hook
        for hook in "$@"; do
                hook="${hook//%i/$INTERFACE}"
                echo "[#] $hook" >&2
                (eval "$hook")
        done
}

cmd_usage() {
        cat >&2 <<-_EOF
        Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]

          CONFIG_FILE is a configuration file, whose filename is the interface name
          followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
          configuration found at /etc/wireguard/INTERFACE.conf. It is to be readable
          by wg(8)'s \`setconf' sub-command, with the exception of the following additions
          to the [Interface] section, which are handled by $PROGRAM:

          - Address: may be specified one or more times and contains one or more
            IP addresses (with an optional CIDR mask) to be set for the interface.
          - DNS: an optional DNS server to use while the device is up.
          - MTU: an optional MTU for the interface; if unspecified, auto-calculated.
          - Table: an optional routing table to which routes will be added; if
            unspecified or \`auto', the default table is used. If \`off', no routes
            are added.
          - PreUp, PostUp, PreDown, PostDown: script snippets which will be executed
            by bash(1) at the corresponding phases of the link, most commonly used
            to configure DNS. The string \`%i' is expanded to INTERFACE.
          - SaveConfig: if set to \`true', the configuration is saved from the current
            state of the interface upon shutdown.

wg0.conf

[Interface]
##My VPN Server private IP Address
Address = x.x.x.x/24

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTRO>
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -0 wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POST>

#PostUp = ip route add 192.168.178.61/1 dev ens1
#PostDown = ip route del 192.168.178.61/1 dev ens1

PostUp = ip route add default via xx.xx.xx.xx dev eno1 table ssh
PostUp = ip rule add fwmark 0x2 table ssh
PostUp = /sbin/iptables -A OUTPUT -t mangle -o wg0 -p tcp --sport 22 -j MARK --set-mark 2

PreDown = /sbin/iptables -D OUTPUT -t mangle -o wg0 -p tcp --sport 22 -j MARK --set-mark 2
PreDown = ip rule del fwmark 0x2 table ssh
PreDown = ip route del default via x.x.x.x dev eno1 table ssh

##My VPN Server UDP Port
ListenPort = 51820

##My VPN Server private key
PrivateKey = pkey xxx

#----------------------------------------------------------------------------
##Windows Client Peer (NB)
[Peer]
My Home NB - Client Public Key
PublicKey = pkey yyyy
client Ip Address
AllowedIPs = x.x.x.x/32
#----------------------------------------------------------------------------


#----------------------------------------------------------------------------
##Dev-VM - Ubuntu Client Peer
[Peer]
PublicKey = pkey zzz
AllowedIPs = x.x.x.x/32
#----------------------------------------------------------------------------


#----------------------------------------------------------------------------
##PROD-VM - Ubuntu Client Peer
#[Peer]
#PublicKey = pkey ssss
#AllowedIPs = x.x.x.x/32
#----------------------------------------------------------------------------

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14273

Nanomo schrieb:

wg0.conf

[Interface]
##My VPN Server private IP Address
Address = x.x.x.x/24

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTRO>
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -0 wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POST>

Hast Du diese > in der wg0.conf? Siehe das Ende der langen Zeilen (Post).

Nanomo

(Themenstarter)

Anmeldungsdatum:
5. April 2021

Beiträge: 12

Nein, die Zeile geht natürlich weiter, wurde jedoch gekürzt. Sorry. Hier die korrekte lange Version:

[Interface]
##My VPN Server private IP Address
Address = x.x.x.x/24

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -0 wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eno1 -j MASQUERADE

#PostUp = ip route add 192.168.178.61/1 dev ens1
#PostDown = ip route del 192.168.178.61/1 dev ens1

PostUp = ip route add default via xx.xx.xx.xx dev eno1 table ssh
PostUp = ip rule add fwmark 0x2 table ssh
PostUp = /sbin/iptables -A OUTPUT -t mangle -o wg0 -p tcp --sport 22 -j MARK --set-mark 2

PreDown = /sbin/iptables -D OUTPUT -t mangle -o wg0 -p tcp --sport 22 -j MARK --set-mark 2
PreDown = ip rule del fwmark 0x2 table ssh
PreDown = ip route del default via x.x.x.x dev eno1 table ssh

##My VPN Server UDP Port
ListenPort = 51820

##My VPN Server private key
PrivateKey = pkey xxx

#----------------------------------------------------------------------------
##Windows Client Peer (NB)
[Peer]
My Home NB - Client Public Key
PublicKey = pkey yyyy
client Ip Address
AllowedIPs = x.x.x.x/32
#----------------------------------------------------------------------------


#----------------------------------------------------------------------------
##Dev-VM - Ubuntu Client Peer
[Peer]
PublicKey = pkey zzz
AllowedIPs = x.x.x.x/32
#----------------------------------------------------------------------------


#----------------------------------------------------------------------------
##PROD-VM - Ubuntu Client Peer
#[Peer]
#PublicKey = pkey ssss
#AllowedIPs = x.x.x.x/32
#----------------------------------------------------------------------------

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14273

Nanomo schrieb:

Nein, die Zeile geht natürlich weiter, wurde jedoch gekürzt. Sorry. Hier die korrekte lange Version:

Etwas wird m. E. aber nicht richtig sein, in der wg0.conf. Wegen der erforderlichen Anonymisierung, kannst nur Du das richtig prüfen.
Die wg0.conf ist aber ziemlich überfrachtet. Warum z. B. brauchst Du dort ip6tables-Regeln? ... oder Regeln mit dem target MARK? Die kann man auch an anderer Stelle unterbringen.

encbladexp Team-Icon

Ehemaliger
Avatar von encbladexp

Anmeldungsdatum:
16. Februar 2007

Beiträge: 17520

[#] /sbin/iptables -D OUTPUT -t mangle -o wg0 -p tcp --sport 22 -j MARK --set-mark 2
iptables: No chain/target/match by that name.

Kommentiere bitte mal diese ganzen Pre, Post und sonstige Up/Down Commands in deiner Wireguard config aus, und nimm dann das Interface per wg-quick down. Alternativ kannst du auch iproute2 direkt verwenden und damit das Interface Löschen, das Problem ist das PreDown was abbauen will was es nicht gibt, und dann wird zurecht abgebrochen.

Nanomo

(Themenstarter)

Anmeldungsdatum:
5. April 2021

Beiträge: 12

Besten Dank. Das hat funktioniert.

Lösung:

1. Alle PreUp / PostUp / PreDown / PostDown Befehle auskommentieren.
2. Virtuelles Interface (wg0) mit dem Befehl "wg-quick down wg0" entfernen.
3. Für alle PreUp / PostUp / PreDown / PostDown Befehle die Kommentare entfernen

Re-Test:

-> wg-quick up wg0
-> wg-quick down wg0

Re-Test war erfolgreich. Das virtuelle Interface konnte angelegt und wieder entfernt werden.

Vielen Dank nochmals und schönen Tag.

Thread kann geschlossen werden!

Antworten |