Skip to content

Wireguard - Client installieren

Wireguard
  • Da wir ja jetzt an dem Punkt ankommen, wo Wireguard im Mainstream ankommt 😉 hier mal eine Vorgehensweise, wie man Wireguard als Client auf einem ROCKPro64 installiert.

    Hardware

    • ROCKPro64v2.1 2GB RAM
    • PCIe NVMe SSD und Adapterkarte

    Software

    • Release 0.10.9 vom Kamil
    • Linux rockpro64 5.6.0-1132-ayufan-g81043e6e109a #ayufan SMP Tue Apr 7 10:07:35 UTC 2020 aarch64 GNU/Linux
    • u-boot im SPI

    Hintergrund Wireguard

    Seit der Veröffentlichung vom Kernel 5.6 sind die benötigten Kernelmodule im Kernel enthalten. Das heißt, wir müssen uns nicht mehr darum kümmern. Hier die Liste der Module, wenn Wireguard läuft.

    root@rockpro64:/etc/wireguard# lsmod | grep wireguard
    wireguard              90112  0
    libchacha20poly1305    16384  1 wireguard
    ip6_udp_tunnel         16384  1 wireguard
    udp_tunnel             16384  1 wireguard
    libcurve25519_generic    36864  1 wireguard
    libblake2s             16384  1 wireguard
    

    Voraussetzung

    Ich gehe von einer funktionierenden Installation auf dem ROCKPro64 aus. Dazu setze ich schon immer Debian in folgender Version ein.

    https://github.com/ayufan-rock64/linux-build/releases/download/0.10.9/buster-minimal-rockpro64-0.10.9-1180-arm64.img.xz

    Ergibt dann

    root@rockpro64:/etc/wireguard# cat /etc/debian_version
    10.3
    

    Installation

    Backports

    In Debian Buster 10.3 fehlt das Wireguard Paket. Um das nun installieren zu können, benötigen wir die Backports.
    Dazu öffnen wir die Datei /etc/apt/sources.list und fügen ans Ende folgende Zeile hinzu.

    deb http://deb.debian.org/debian buster-backports main
    

    Danach abspeichern.

    Wireguard installieren

    Erstmal die Paketliste aktualisieren.

    apt update
    

    Danach ein

    root@rockpro64:~# apt install wireguard
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
      dkms wireguard-dkms wireguard-tools
    Suggested packages:
      python3-apport menu
    Recommended packages:
      fakeroot linux-headers-686-pae | linux-headers-amd64 | linux-headers-generic
      | linux-headers
    The following NEW packages will be installed:
      dkms wireguard wireguard-dkms wireguard-tools
    0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
    Need to get 425 kB of archives.
    After this operation, 2374 kB of additional disk space will be used.
    Do you want to continue? [Y/n] 
    Get:1 http://deb.debian.org/debian buster-backports/main arm64 wireguard-dkms all 0.0.20200318-1~bpo10+1 [253 kB]
    Get:2 http://deb.debian.org/debian buster-backports/main arm64 wireguard-tools arm64 1.0.20200319-1~bpo10+1 [89.7 kB]
    Get:3 http://deb.debian.org/debian buster-backports/main arm64 wireguard all 1.0.20200319-1~bpo10+1 [7464 B]
    Get:4 http://cdn-fastly.deb.debian.org/debian buster/main arm64 dkms all 2.6.1-4 [74.4 kB]
    Fetched 425 kB in 0s (1214 kB/s)
    Selecting previously unselected package dkms.
    (Reading database ... 41667 files and directories currently installed.)
    Preparing to unpack .../archives/dkms_2.6.1-4_all.deb ...
    Unpacking dkms (2.6.1-4) ...
    Selecting previously unselected package wireguard-dkms.
    Preparing to unpack .../wireguard-dkms_0.0.20200318-1~bpo10+1_all.deb ...
    Unpacking wireguard-dkms (0.0.20200318-1~bpo10+1) ...
    Selecting previously unselected package wireguard-tools.
    Preparing to unpack .../wireguard-tools_1.0.20200319-1~bpo10+1_arm64.deb ...
    Unpacking wireguard-tools (1.0.20200319-1~bpo10+1) ...
    Selecting previously unselected package wireguard.
    Preparing to unpack .../wireguard_1.0.20200319-1~bpo10+1_all.deb ...
    Unpacking wireguard (1.0.20200319-1~bpo10+1) ...
    Setting up dkms (2.6.1-4) ...
    Setting up wireguard-dkms (0.0.20200318-1~bpo10+1) ...
    Loading new wireguard-0.0.20200318 DKMS files...
    It is likely that 5.6.0-1132-ayufan-g81043e6e109a belongs to a chroot's host
    Building for 5.6.0-1132-ayufan-g81043e6e109a
    Building initial module for 5.6.0-1132-ayufan-g81043e6e109a
    Error!  The dkms.conf for this module includes a BUILD_EXCLUSIVE directive which
    does not match this kernel/arch.  This indicates that it should not be built.
    Skipped.
    Setting up wireguard-tools (1.0.20200319-1~bpo10+1) ...
    Setting up wireguard (1.0.20200319-1~bpo10+1) ...
    

    Danach ist Wireguard in folgender Version vorhanden.

    root@rockpro64:~# wg version
        wireguard-tools v1.0.20200319 - https://git.zx2c4.com/wireguard-tools/
    

    Wirguard Keys erzeugen

    root@rockpro64:/etc/wireguard# wg genkey > private.key
    Warning: writing to world accessible file.
    Consider setting the umask to 077 and trying again.
    root@rockpro64:/etc/wireguard# wg pubkey > public.key < private.key
    root@rockpro64:/etc/wireguard# wg genpsk > psk.key
    Warning: writing to world accessible file.
    Consider setting the umask to 077 and trying again.
    

    Nehmt den Warnhinweis ernst, auf einem Server sollte man das so nicht lassen!

    Inhalt von /etc/wireguard

    root@rockpro64:/etc/wireguard# ls
    private.key  psk.key  public.key
    

    Wireguard wg0.conf

    [Interface]
    Address = 10.10.1.2, <IPv6 Adresse>
    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
    

    Zur <IPv6 Adresse>

    Auf meinem Server sieht die Konfiguration so aus.

    #ROCKPro64
    [Peer]
    PublicKey = <Public-Key Client>
    PresharedKey = <psk.key>
    AllowedIPs = 10.10.1.12, 2a01:xxx:xxx:59e6:100::12
    

    Mein Wireguard Server und mein Heimnetz sind voll IPv6 tauglich. Deshalb weise ich den Geräten auch IPv6 Adressen vom Server zu. Ohne diese IPv6 Adresse hat man keine Internetverbindung, sondern kann nur das interne Netz erreichen. Erst mit der IPv6 Adresse wird der gesamte Netzwerkverkehr ins Internet geroutet.

    Wireguard starten

    Dazu nimmt man den Befehl wg-quick

    root@rockpro64:/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.12 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
    [#] ip6tables-restore -n
    [#] 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
    [#] iptables-restore -n
    

    Kontrolle

    root@rockpro64:/etc/wireguard# wg
    interface: wg0
      public key: 4gGlCmgVYs4jjPfm7qaq5hkls3n4tVM53e/BBSV+xyU=
      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: 92 B received, 324 B sent
    

    So, läuft 🙂

    Ausschalten

    wg-quick down wg0
    
  • @FrankM
    hallo Frank

    Bei mir läuft Wireguard auf einem Raspberry 4 mit 2 GB RAM an einer fritzbox 4040 hinter einem Vodafone Kabelanschluss. (LAN Anschluss) Dort ist auch ein Pihole installiert.
    Und nun zu meinem Problem. Da ich viel herumkomme wollte ich mein Smartphone per VPN in fremden Netzen verwenden. Ich habe ein xioami redmi note 4 mit Lineage 9 und Stormguard Kernel mit Wireguard Unterstützung. Seit Januar läuft das ganze. Anfangs hatte ich das Problem, wenn ich per LTE oder fremden WLAN Wireguard VPN nutzte, kam ich nicht über 60 KB/s Geschwindigkeit. Nach vielen Versuchen hatte ich ab Anfang Februar super Geschwindigkeiten. (Etwa 30 % weniger als ohne VPN) Während eines Israel Urlaub war ich der einzigste, der die Tagesschau streamen konnte. Seit Anfang März (vermutlich nach einem Lineage Update) kommt die Geschwindigkeit nicht mehr über die 60 KB/s.
    Mit der neuen Android Wireguard APP kann man jetzt temporär die Kernelintegration abschalten, dann läuft normales VPN mit der gleichen niedrigen Geschwindigkeit.
    Wer weiss eine Lösung für die "Bremse".

    Gruß
    Osnh

  • Ich kann dir nicht ganz folgen. Mein Wireguard Server ist eine VM im Netz. Mein Smartphone baut zu diesem eine Verbindung auf und ich habe mal eben nachgeschaut, was da so geht. Mein Smartphone ist aktuell im meinem WLan angemeldet.

    6e0016dc-7e11-41e1-bba2-e52a3f1348df-image.png

    iperf3 -s -B 10.10.1.1
    -----------------------------------------------------------
    Server listening on 5201
    -----------------------------------------------------------
    Accepted connection from 10.10.1.10, port 44246
    [  5] local 10.10.1.1 port 5201 connected to 10.10.1.10 port 44248
    [ ID] Interval           Transfer     Bitrate
    [  5]   0.00-1.00   sec  4.98 MBytes  41.7 Mbits/sec                  
    [  5]   1.00-2.00   sec  5.52 MBytes  46.3 Mbits/sec                  
    [  5]   2.00-3.00   sec  4.80 MBytes  40.3 Mbits/sec                  
    [  5]   3.00-4.00   sec  4.17 MBytes  35.0 Mbits/sec                  
    [  5]   4.00-5.00   sec  5.04 MBytes  42.3 Mbits/sec                  
    [  5]   5.00-6.00   sec  5.43 MBytes  45.6 Mbits/sec                  
    [  5]   6.00-7.00   sec  5.75 MBytes  48.3 Mbits/sec                  
    [  5]   7.00-8.00   sec  5.70 MBytes  47.8 Mbits/sec                  
    [  5]   8.00-9.00   sec  5.73 MBytes  48.1 Mbits/sec                  
    [  5]   9.00-10.00  sec  5.65 MBytes  47.4 Mbits/sec                  
    [  5]  10.00-10.04  sec   206 KBytes  46.5 Mbits/sec                  
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bitrate
    [  5]   0.00-10.04  sec  53.0 MBytes  44.3 Mbits/sec                  receiver
    -----------------------------------------------------------
    Server listening on 5201
    -----------------------------------------------------------
    Accepted connection from 10.10.1.10, port 44250
    [  5] local 10.10.1.1 port 5201 connected to 10.10.1.10 port 44252
    [ ID] Interval           Transfer     Bitrate         Retr  Cwnd
    [  5]   0.00-1.00   sec  4.80 MBytes  40.2 Mbits/sec    0    253 KBytes       
    [  5]   1.00-2.00   sec  14.7 MBytes   123 Mbits/sec  181    379 KBytes       
    [  5]   2.00-3.00   sec  9.68 MBytes  81.2 Mbits/sec   58    294 KBytes       
    [  5]   3.00-4.00   sec  8.88 MBytes  74.5 Mbits/sec    1    227 KBytes       
    [  5]   4.00-5.00   sec  7.76 MBytes  65.1 Mbits/sec    0    245 KBytes       
    [  5]   5.00-6.00   sec  8.88 MBytes  74.5 Mbits/sec    0    266 KBytes       
    [  5]   6.00-7.00   sec  9.81 MBytes  82.3 Mbits/sec    0    289 KBytes       
    [  5]   7.00-8.00   sec  7.82 MBytes  65.6 Mbits/sec   35    235 KBytes       
    [  5]   8.00-9.00   sec  5.59 MBytes  46.9 Mbits/sec    4    186 KBytes       
    [  5]   9.00-10.00  sec  6.64 MBytes  55.7 Mbits/sec    0    207 KBytes       
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bitrate         Retr
    [  5]   0.00-10.04  sec  84.6 MBytes  70.6 Mbits/sec  279             sender
    -----------------------------------------------------------
    Server listening on 5201
    -----------------------------------------------------------
    ^Ciperf3: interrupt - the server has terminated
    

    Im zweiten Teil ist der Wireguard Server der Sender.

    Bis jetzt hatte ich eigentlich nie Probleme, auch nicht unterwegs. Aber, ich gehe davon aus, das ich dich nicht 100% verstanden habe 😉

  • 0 Stimmen
    1 Beiträge
    254 Aufrufe
    Niemand hat geantwortet
  • Mainline 5.11.x

    Images
    1
    0 Stimmen
    1 Beiträge
    220 Aufrufe
    Niemand hat geantwortet
  • Nextcloud - Upgrade auf 19.0.1

    Nextcloud
    1
    0 Stimmen
    1 Beiträge
    213 Aufrufe
    Niemand hat geantwortet
  • Wireguard 1.0.0

    Wireguard
    1
    0 Stimmen
    1 Beiträge
    209 Aufrufe
    Niemand hat geantwortet
  • Wireguard - Nach Kernel-Update ohne Funktion

    Wireguard
    1
    0 Stimmen
    1 Beiträge
    299 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 🙂

  • Wireguard - VPN Server

    Wireguard
    2
    0 Stimmen
    2 Beiträge
    477 Aufrufe
    FrankMF

    Das DNS-Problem ist gelöst. Da die Erklärung was umfangreicher ist, wird das heute nichts mehr. Genug getippt für heute 😁

  • Wireguard

    Verschoben Wireguard
    4
    0 Stimmen
    4 Beiträge
    785 Aufrufe
    FrankMF

    Etwas schnellerer Weg den Tunnel aufzubauen, Voraussetzung

    wireguard modul installiert Keys erzeugt

    Danach dann einfach

    ip link add wg0 type wireguard wg setconf wg0 /etc/wireguard/wg0.conf Datei /etc/wireguard/wg0.conf [Interface] PrivateKey = <Private Key> ListenPort = 60563 [Peer] PublicKey = <Public Key Ziel> Endpoint = <IPv4 Adresse Zielrechner>:58380 AllowedIPs = 10.10.0.1/32

    Die Rechte der Dateien von wireguard müssen eingeschränkt werden.

    sudo chmod 0600 /etc/wireguard/wg0.conf

    Das ganze per rc.local beim Booten laden. Datei /root/wireguard_start.sh

    ############################################################################################### # Autor: Frank Mankel # Startup-Script # Wireguard # Kontakt: frank.mankel@gmail.com # ############################################################################################### ip link add wg0 type wireguard ip address add dev wg0 10.10.0.1/8 wg setconf wg0 /etc/wireguard/wg0.conf ip link set up dev wg0

    Danach Datei ausführbar machen

    chmod +x /root/wireguard_start.sh

    In rc.local

    /root/wireguard_start.sh

    eintragen - Fertig!