Skip to content

Wireguard - wg-quick

Wireguard
  • Es gibt auch einen wesentlich einfachere Möglichkeit einen Wireguard Tunnel zu starten. z.B. auf einem Notebook sehr praktisch, wenn man mal in einem fremden WLan unterwegs ist.

    Ich setze voraus, das der Wireguard-Server läuft! Meine Beispiele beruhen auf Debian Buster 10.3

    In /etc/wireguard liegen folgende Dateien.

    root@debian:/etc/wireguard# ls -l
    insgesamt 16
    -rw-r--r-- 1 root root  45 Apr  3 15:18 private.key
    -rw-r--r-- 1 root root  45 Apr  5 15:04 psk.key
    -rw-r--r-- 1 root root  45 Apr  3 15:19 public.key
    -rw-r--r-- 1 root root 365 Apr  5 15:11 wg0.conf
    

    Keys erzeugen:

    private.key erzeugen

    root@rp64_nextcloud:/etc/wireguard# wg genkey > private.key
    Warning: writing to world accessible file.
    Consider setting the umask to 077 and trying again.
    

    public.key erzeugen

    root@rp64_nextcloud:/etc/wireguard# wg pubkey > public.key < private.key
    

    psk.key erzeugen

    root@rp64_nextcloud:/etc/wireguard# wg genpsk > psk.key
    

    psk.key

    Der psk.key muss auf dem Server und auf dem Client gleich sein. Dieser psk.key dient der zusätzlichen Sicherheit. Im Whitpaper steht dazu folgendes:

    In order to mitigate any futureadvances in quantum computing, WireGuard also supports a mode in which any pair of peers mightadditionallypre-share a single 256-bit symmetric encryption key between themselves, in order to add an additional layer ofsymmetric encryption.

    Ok, wieder vergessen. Wir müssen nur wissen, das die beide gleich sein müssen.

    wg0.conf

    Fehlt noch die Config.

    [Interface]
    Address = 10.10.1.2
    PrivateKey = <private Key>
    ListenPort = 51820
    DNS = 10.10.1.1
    
    [Peer]
    Endpoint = <Server IP>:51820
    PublicKey = <public Key> vom Server!!
    PresharedKey = <preshared Key> Client und Server gleich!
    AllowedIPs = 0.0.0.0/0, ::/0
    

    Das [Interface] definiert die Schnittstelle. Hier setzen wir ein IP Adresse und den Port. Dazu gebe ich noch an, wo der DNS-Server liegt. Auf meinem Wireguard Server läuft da extra einer, dient der Sicherheit die wirkliche IP-Adresse nicht zu leaken.

    Das [Peer] definiert jetzt den Teilnehmer, hier unseren Wireguard Server. Wir sagen Wireguard wo er den Server findet und zum Schluß noch bei AllowedIPs was er machen soll. In diesem Beispiel tunnelt er sämtlichen Traffic zum Wireguard Server.

    wg-quick

    Damit kann man jetzt schnell die Schnittstelle wg0 starten.

    Start

    wg-quick up wg0
    

    Stop

    wg-quick down wg0
    

    Beispiel

    root@thinkpad:/etc/wireguard# wg-quick up wg0
    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip -4 address add 10.10.1.11/24 dev wg0
    [#] ip -6 address add 2a01:xxxxxxxxxxxxx::11/72 dev wg0
    [#] ip link set mtu 1420 up dev wg0
    [#] resolvconf -a tun.wg0 -m 0 -x
    [#] wg set wg0 fwmark 51820
    [#] ip -6 route add ::/0 dev wg0 table 51820
    [#] ip -6 rule add not fwmark 51820 table 51820
    [#] ip -6 rule add table main suppress_prefixlength 0
    [#] nft -f /dev/fd/63
    [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
    [#] ip -4 rule add not fwmark 51820 table 51820
    [#] ip -4 rule add table main suppress_prefixlength 0
    [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
    [#] nft -f /dev/fd/63
    
    root@thinkpad:/etc/wireguard# wg-quick down wg0
    [#] ip -4 rule delete table 51820
    [#] ip -4 rule delete table main suppress_prefixlength 0
    [#] ip -6 rule delete table 51820
    [#] ip -6 rule delete table main suppress_prefixlength 0
    [#] ip link delete dev wg0
    [#] resolvconf -d tun.wg0 -f
    [#] nft -f /dev/fd/63
    root@thinkpad:/etc/wireguard# 
    

    Hier sieht man erst den Start und dann den Stop der Schnittstelle wg0. Mir fehlte auf einem Rechner noch das Paket resolvconf. Das kann man mit

    apt install resolvconf
    

    schnell mal installieren. Das braucht man, sonst kommt eine Fehlermeldung.

    Test der Verbindung

    Und dann kann man schauen ob die Verbindung steht.

    root@thinkpad:/etc/wireguard# wg
    interface: wg0
      public key: <public Key>
      private key: (hidden)
      listening port: 51820
      fwmark: 0xca6c
    
    peer: <public Key> vom Server
      preshared key: (hidden)
      endpoint: <Server IP>:51820
      allowed ips: 0.0.0.0/0, ::/0
      latest handshake: 4 seconds ago
      transfer: 1.37 KiB received, 2.36 KiB sent
    

    Wichtig ist der latest handshake, daran kann man sehen ob der Tunnel steht. Und bei allem was man macht ändern sich natürlich die Transfer Daten.

  • Wireguard - Tunnel zur Fritz!Box 6591 Cable Part 4 (Adblocker)

    Angeheftet Wireguard
    1
    0 Stimmen
    1 Beiträge
    341 Aufrufe
    Niemand hat geantwortet
  • Wireguard - Tunnel zur Fritz!Box 6591 Cable Part 3

    Angeheftet Wireguard
    1
    0 Stimmen
    1 Beiträge
    361 Aufrufe
    Niemand hat geantwortet
  • Wireguard - Tunnel zur Fritz!Box 6591 Cable Part 1

    Angeheftet Wireguard
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    FrankMF

    Es gab wieder ein neues Update!

    Bildschirmfoto vom 2022-05-10 20-36-50.png

    Wollen wir mal sehen, ob sich im Wireguard Bereich etwas getan hat.

    Es gibt jetzt einen eigenen Reiter, wenn ich mich korrekt erinnere.

    Bildschirmfoto vom 2022-05-10 20-35-04.png

    Hier kann man jetzt die Wireguard Einstellungen sich anzeigen lassen, ein Feature was ich mir in der Feedback EMail gewünscht hatte.
    Bildschirmfoto vom 2022-05-10 20-35-47.png

    Das sieht dann so aus.
    Bildschirmfoto vom 2022-05-10 20-36-06.png

    Bildschirmfoto vom 2022-05-10 20-36-28.png

    Ich denke, jetzt hat man ausreichend Informationen, um bei Problemfällen sich mit den Einstellungen zu beschäftigen. Danke AVM, das ihr so auf das Feedback der Kunden reagiert. 👏

  • Quartz64 - Wireguard

    Verschoben Quartz64
    1
    0 Stimmen
    1 Beiträge
    240 Aufrufe
    Niemand hat geantwortet
  • ROCKPro64 - Kernel 5.6 und Wireguard 1.0

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    316 Aufrufe
    Niemand hat geantwortet
  • Wireguard 1.0.0

    Wireguard
    1
    0 Stimmen
    1 Beiträge
    268 Aufrufe
    Niemand hat geantwortet
  • Wireguard - QRCode

    Wireguard
    1
    0 Stimmen
    1 Beiträge
    367 Aufrufe
    Niemand hat geantwortet
  • Wireguard - Traffic routen

    Wireguard
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    FrankMF

    Wie ich bei meinem Hamburger Systemadministrator gelernt habe, geht das auch wesentlich einfacher. Dafür hat Wireguard einen netten Befehl schon parat, nennt sich

    wg-quick up wg0-client

    Dazu muss auf dem Client natürlich vorher alles konfiguriert sein. Das Verzeichnis /etc/wireguard sieht dann so aus.

    root@thinkpad:/etc/wireguard# ls -lha /etc/wireguard/ insgesamt 32K drwx------ 2 root root 4,0K Aug 16 08:47 . drwxr-xr-x 141 root root 12K Aug 16 08:47 .. -rw-r--r-- 1 root root 45 Aug 9 16:48 private.key -rw-r--r-- 1 root root 45 Aug 9 16:48 psk.key -rw-r--r-- 1 root root 45 Aug 9 16:48 public.key -rw-r--r-- 1 root root 275 Aug 16 08:47 wg0-client.conf

    Die drei Schlüssel sind also vorhanden, der Server ist auch entsprechend vorbereitet. Dann brauchen wir auf dem Clienten noch die wg0-client.conf mit folgendem Inhalt.

    [Interface] Address = 10.10.0.4/32 PrivateKey = oM9jWxxxxxxxxxxxxxxxxxxxxxxxxxxxtS4vW8= ListenPort = 50xxx DNS = 10.10.0.2 [Peer] PublicKey = fGg7MxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTPRqqzU= Endpoint = 136.xxx.xxx.xxx:60xxx AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 21

    Im ersten Teil [Interface] wird die Schnittstelle auf dem Clienten konfiguriert.

    Die Adresse des Clienten Privatekey, findet man in /etc/wireguard/private.key Den Port für die Wireguard Kommunikation, frei wählbar. Der DNS-Server, ist hier mein Wireguard-Server, der einen DNS Dienst bereit hält.

    Im zweiten Teil [Peer] wird die Verbindung zum Server konfiguriert.

    PublicKey, der PublicKey des Servers. Endpoint, ist die IP-Adresse des Servers. AllowedIPs 0.0.0./0 wird den gesamten IPv4 Verkehr über den Tunnel routen. Dient dazu , die Verbindung aufrecht zu erhalten?

    Mit

    wg-quick up wg0-client

    baut er nun die Verbindung auf.

    root@thinkpad:/etc/wireguard# wg-quick up wg0-client [#] ip link add wg0-client type wireguard [#] wg setconf wg0-client /dev/fd/63 [#] ip -4 address add 10.10.0.4/32 dev wg0-client [#] ip link set mtu 1420 up dev wg0-client [#] resolvconf -a tun.wg0-client -m 0 -x [#] wg set wg0-client fwmark 51xxx [#] ip -4 route add 0.0.0.0/0 dev wg0-client table 51xxx [#] ip -4 rule add not fwmark 51xxx table 51xxx [#] ip -4 rule add table main suppress_prefixlength 0 root@thinkpad:/etc/wireguard#

    Damit steht der Tunnel

    9: wg0-client: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.10.0.4/32 scope global wg0-client valid_lft forever preferred_lft forever

    Ausschalten

    root@thinkpad:/etc/wireguard# wg-quick down wg0-client [#] ip -4 rule delete table 51xxx [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0-client [#] resolvconf -d tun.wg0-client

    Auf meinem Debian 10 Buster ging das erst so nicht, weil ein Paket fehlt.

    root@thinkpad:/etc/wireguard# wg-quick up wg0-client [#] ip link add wg0-client type wireguard [#] wg setconf wg0-client /dev/fd/63 [#] ip -4 address add 10.10.0.4/32 dev wg0-client [#] ip link set mtu 1420 up dev wg0-client [#] resolvconf -a wg0-client -m 0 -x /usr/bin/wg-quick: line 31: resolvconf: command not found [#] ip link delete dev wg0-client

    Wireguard ist so nett und schreibt alles rein 😉 Eine Installation von resolcconf löst das Problem.

    root@thinkpad:/etc/wireguard# apt install resolvconf Paketlisten werden gelesen... Fertig Abhängigkeitsbaum wird aufgebaut. Statusinformationen werden eingelesen.... Fertig Die folgenden NEUEN Pakete werden installiert: resolvconf 0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert. Es müssen 74,2 kB an Archiven heruntergeladen werden. Nach dieser Operation werden 196 kB Plattenplatz zusätzlich benutzt. [gekürzt]

    Nun kann man den Tunnel mit zwei einfachen Befehlen auf- und wieder abbauen. Als nächstes kommt dann noch die IPv6 Erweiterung, weil im Moment IPv6 Traffic am Tunnel vorbei fliessen würde, wenn man eine öffentliche IPv6 Adresse zugewiesen bekommen hätte. Aber, das muss ich mir noch ein wenig erklären lassen 🙂