Raspberry Pi mit WireGuard als VPN Server

Aufbau und Setup

  • Raspberry Pi 3 mit Raspberry Pi OS Bullseye
  • der Pi hängt im LAN hinter dem Hauptrouter
  • LAN: 192.168.150.0/24 (PI: 192.168.150.200)
  • VPN Netz: 10.10.10.0/24 (VPN Server: 10.10.10.1, VPN Client1: 10.10.10.2, VPN Client2: 10.10.10.3)
  • Clients als Road Warrior (Android Smartphone und Windows 10 Notebook)

Installation

WireGuard auf dem Raspberry Pi installieren. (Zur Vereinfachung alles als root.)
WireGuard ist ab Linux-Kernel Version 5.6 im Kernel enthalten. Das Paket wireguard-dkms muss nicht mehr zwingend installiert werden.

$ modinfo wireguard
filename:       /lib/modules/6.1.21-v7+/kernel/drivers/net/wireguard/wireguard.ko.xz
alias:          net-pf-16-proto-16-family-wireguard
alias:          rtnl-link-wireguard
version:        1.0.0
author:         Jason A. Donenfeld <Jason@zx2c4.com>
description:    WireGuard secure network tunnel
license:        GPL v2
srcversion:     B5257F7548E6FF763F8DAFB
depends:        libcurve25519-generic,udp_tunnel,ip6_udp_tunnel,libchacha20poly1305,ipv6,curve25519-neon
intree:         Y
name:           wireguard
vermagic:       6.1.21-v7+ SMP mod_unload modversions ARMv7 p2v8

Raspberry Pi OS Bookworm

$ apt update
$ apt upgrade
$ apt install wireguard-tools iptables

Raspberry Pi OS Bullseye

$ apt update
$ apt upgrade
$ apt install wireguard-tools iptables

Raspbian Buster

$ apt-get update
$ apt-get upgrade 
$ apt-get install raspberrypi-kernel-headers
$ echo "deb http://deb.debian.org/debian/ unstable main" | tee --append /etc/apt/sources.list.d/unstable.list
$ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
$ printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' | tee --append /etc/apt/preferences.d/limit-unstable
$ apt-get update
$ apt-get install wireguard 
$ reboot

Aktivieren von IPv4 forwarding in der /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward = 1

Den Pi neu starten und die Änderungen nochmal überprüfen.

$ sysctl net.ipv4.ip_forward 
net.ipv4.ip_forward = 1

Keys generieren

Die Erstellung der keys wird im Verzeichnis /etc/wireguard durchgeführt.
Um sicherzustellen dass alle Dateien die richtigen Berechtigungen haben, muss die umask auf 077 gesetzt sein.

$ umask 077

Server Key generieren

private und public key für den Server

$ wg genkey | tee server-private.key | wg pubkey > server-public.key

$ ls -l server*
-rw------- 1 root root 45 Mar 31 10:38 server-private.key
-rw------- 1 root root 45 Mar 31 10:38 server-public.key

Client Keys generieren

private und public key für die Clients

$ wg genkey | tee client1-private.key | wg pubkey > client1-public.key
$ wg genkey | tee client2-private.key | wg pubkey > client2-public.key
 
$ ls -l client*
-rw------- 1 root root 45 Mar 31 10:41 client1-private.key
-rw------- 1 root root 45 Mar 31 10:41 client1-public.key
-rw------- 1 root root 45 Mar 31 10:41 client2-private.key
-rw------- 1 root root 45 Mar 31 10:41 client2-public.key

Server Konfiguration

Dazu wird die Datei /etc/wireguard/wg0.conf erstellt. (Die neue VPN Schnittstelle ist wg0.)
Bei den iptables Regeln muss ggf. noch der Name der Netzwerkschnittstelle angepasst werden! Bei mir ist es eth0.

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820

PrivateKey = <server-private.key einfügen>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Client1 Smartphone
[Peer]
PublicKey = <client1-public.key einfügen>
AllowedIPs = 10.10.10.2/32

# Client2 Notebook
[Peer]
PublicKey = <client2-public.key einfügen>
AllowedIPs = 10.10.10.3/32

Client Konfiguration

Für jeden Client erstelle ich eine eigene Konfigurationsdatei.

/etc/wireguard/client1.conf

[Interface]
PrivateKey = <client1-private.key einfügen>
Address = 10.10.10.2
DNS = 192.168.150.20

[Peer]
PublicKey = <server-public.key einfügen>
Endpoint = vpn.your-public-server.net:51820
AllowedIPs = 0.0.0.0/0, 192.168.150.0/24
PersistentKeepalive = 25

/etc/wireguard/client2.conf

[Interface]
PrivateKey = <client2-private.key einfügen>
Address = 10.10.10.3
DNS = 192.168.150.20

[Peer]
PublicKey = <server-public.key einfügen>
Endpoint = vpn.your-public-server.net:51820
AllowedIPs = 0.0.0.0/0, 192.168.150.0/24
PersistentKeepalive = 25

Als DNS Server nutze ich meinen eigenen im lokalen LAN und mit 0.0.0.0/0 wird alles (der komplette traffic) durch das VPN geroutet.
Da ich mich hinter einem NAT befinde, wird mit PersistentKeepalive = 25 versucht die Verbindung aufrecht zu halten.

WireGuard starten

$ wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip address add 10.10.10.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

WireGuard beim Systemstart automatisch laden.

$ systemctl enable wg-quick@wg0
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.

WireGuard Status

Status der aktiven wg0 Schnittstelle.

$ wg
interface: wg0
  public key: 9EHJpPuO59RsFbejPZacyZ34TkT7Exas/ZKQsAfTU0U=
  private key: (hidden)
  listening port: 51820

peer: mSOXtoZPSCoZL48u9IZGlpov5T4jAwZ7yhETTDosHVU=
  allowed ips: 10.10.10.2/32

peer: 9q9PAKC5MUNaF4QmcH5hoqwpWoX2R4/KewvLi0SebmQ=
  allowed ips: 10.10.10.3/32

Firewall Konfiguration

Der UDP Port 51820 muss an den internen VPN Server weitergeleitet werden. (hier für meinen MikroTik Router)

/ip firewall filter
add action=accept chain=forward dst-port=51820 protocol=udp

/ip firewall nat
add action=dst-nat chain=dstnat dst-port=51820 in-interface=wan protocol=udp to-addresses=192.168.150.200 to-ports=51820

Road Warrior – Android Client

Für Android nehme ich die offizielle WireGuard App aus dem Google Play Store.

Die Einstellungen der App kann mittels einer Datei, QR-Code oder manuell erfolgen. Auf dem Server wird ein QR-Code für den Client1 erstellt.

$ apt install -y qrencode

QR-Code für den Client1 erstellen.

$ qrencode -t ansiutf8 < client1.conf

Abscannen und fertig. Ohne die mühselige tipperei auf dem Smartphone.

Road Warrior – Windows Client

Für Windows nehme ich den offiziellen WireGuard Client.
Nach der Installation die (auf dem Server erzeugte) client2.conf importieren

und die VPN Verbindung aktivieren.

WireGuard updaten

Ist nich mehr notwendig.

Das hat mich schon viel Nerven gekostet, weil nach einem Kernel Update des Systems wireguard-dkms nicht mehr kompiliert und mit einer Fehlermeldung abbricht.
Sollte es mal Probleme geben, kann man folgendes versuchen.

# Variante A (nach jedem Kernel Update)
$ dpkg-reconfigure wireguard-dkms

# Variante B
$ apt remove wireguard*
$ apt install bc libncurses5-dev
$ apt install wireguard

Mittlerweile kompiliere ich mir dir WireGuard Kernel Module und das wg Tool selber. Ist super einfach und schnell erledigt.
WireGuard nicht aus den Repos installieren und ggf. installierte Pakete vorher deinstallieren!

# Toolchain installieren
$ apt-get install libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-config

# WireGuard empfiehlt den aktuellen Snapshot zu verwenden
$ wget https://git.zx2c4.com/WireGuard/snapshot/WireGuard-0.0.2019mmdd.tar.xz

# Kernel Module und das wg Tool kompilieren (dauert noch keine 2 Minuten)
$ cd WireGuard-0.0.2019mmdd/src
$ make

# als root installieren
$ make install

# neustarten und fertig
$ reboot

WireGuard Compiling the Kernel Module from Source | current Snapshot versions

Die installierte Version kann man gut mit dmesg herausfinden.

$ dmesg | grep wireguard
[ 26.708518] wireguard: WireGuard 1.0.0 loaded. See www.wireguard.com for information.
[ 26.708537] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.

# etwas kompakter
$ dmesg | awk '/WireGuard/ {print $4,$5}'
WireGuard 1.0.0

Fazit

Im Vergleich zu OpenVPN ist die Einrichtung und Konfiguration, trotz der langen Anleitung, in wenigen Minuten erledigt.
Der Tunnelaufbau und das Routing funktionierten auf Anhieb reibungslos und schnell.

17.05.2019 – Nach ca. 6 Wochen bin ich immer noch mehr als zufrieden! Schneller Tunnelaufbau und immer eine stabile Verbindung!

Links

127 Gedanken zu „Raspberry Pi mit WireGuard als VPN Server“

  1. unter Debian BUSTER musste ich noch im ersten Schritt die PGP Keys installieren:

    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010

    Antworten
  2. Danke für die Anleitung. Kann ich mit dieser Konfiguration auch auf die Geräte im Heimnetz (bei Dir 192.168.150.0/24) zugreifen. Ich habe einen Medienserver und möchte über die Wireguard-Anbindung im Urlaub darauf zugreifen können. Zudem möchte ich auch ssh Zugriff auf den Pi haben.

    Danke

    Antworten
  3. Hallo,
    mit dem Artikel konnte ich wunderbar schnell folgendes erreichen (Danke!):
    * Smartphone (iOS) baut erfolgreich Tunnel auf: Handshake wird in App und wg angezeigt. OK
    * Über DNS-Angabe in client.conf werden mir die DNS-Anfragen des Clients auch in Pi-hole angezeigt. OK
    * Es gibt im Client aber keinen Seitenaufbau. Ich gehe davon aus, dass der Traffic (sprich Request an gewünschten Server) den WireGuard-Server nach erfolgreichem DNS gar nicht verlässt, also weder mit der VPN-IP (weil: im MikroTik-Router in ARP-Liste kein Eintrag) aber offensichtlich auch nicht auf die IP des Servers umgesetzt von der NAT-Maquerade-Regel.

    Haben Sie andere Ideen, wo es haken könnte am “Tunnelausgang”? Iptables? Etwas anderes?

    Danke und viele Grüße

    Antworten
    • Da würde ich spontan auf die Firewall tippen. Einfach mal zum testen kurz deaktivieren.
      Hast du auch im MikroTik Router die beiden Firewall Regeln gesetzt?

      Antworten
      • Danke für Deine Antwort: Ja. Beide liefern auch hochzählende Paketzahlen.
        Aber: wenn ich die beiden Regeln richtig verstehe sind sie für den INBOUND des VPN-Tunnels zuständig. Der Handshake kommte ja zu Stande; dort hatte ich daher keine Fehlerquelle mehr gesehen.

        Wenn ich in meinem DNS-Resolver (pi-hole) die passenden Requests mit der IP aus dem Tunnel sehe, scheint der DNS-Teil am “Tunnelende” ja auch zu gehen (wireguard + pi-hole laufen auf dem selben Server).

        Mir scheint daher plausibel: Entweder kommt die DNS-Antwort nicht zum VPN-Client oder in der Folge der (zur IP aufgelöste) Request des VPN-Clients kommt nicht aus dem Requesttunnel per NAT. Im MikroTik müsste doch dann Traffic mit der LAN-IP meines Servers zu sehen sein, weil der NAT am Tunnelende den Traffic der Clients auf sich NATted, richtig? Wenn dem so wäre, dann müsste doch die “PostUp”-Anweisung an iptables nicht greifen. Sehen kann ich Sie zumindest in iptables nach start von wireguard.

        Dummerweise weiß ich darüber hinaus überhaupt nicht, wie man so etwas prüft/analysiert. Ich habe noch nie an irgend einem Sever mit iptables etwas zu tun gehabt, weil ich immer schon Fritzbox + MikroTik im Einsatz habe…

        Antworten
        • Nun habe ich doch selber die Ursache gefunden:
          Analyse iptables mit sudo iptables -t nat -L -nv zeigt: Keine Pakete.
          in ifconfig noch mal nachgeschaut: Finde dort kein eth0 (mehr), aber heute em1 (zumindest bei ubuntu server). Wenn man in wg0.conf die iptables-Anweisung entsprechend anpasst, geht es auch! Blöde Falle, viel Zeit zum EInkreisen der Ursache gebraucht und am Ende ist es immer ganz einfach gewesen – wenn man es vorher gewusst hätte.

          Vielelicht wäre oben im Text ein Hinweis sinnvoll, dass die Wired-Schnittstelle bei manchen Systemen statt eth0 em1 heißt und das ggf. angepast werden muss. Vielleicht spart es einem anderen die Forschungsarbeit… :)

          Noch mal: Danke Dir für Deine wirklich hilfereiche Anleitung!

          Antworten
  4. Hi mb-press,
    ich habe auf meinem Raspberry PI das Wireguard nach deiner Anleitung installiert und es läuft auch soweit. Nur wenn ich nun versuche von meinem Iphone über die App eine Verbindung zu meinem Tunnel aufzubauen kommt immer die Meldung im Log
    “Handshake did not complete after 5 seconds”
    “Sending Handshake initiation”
    Und das immer wieder.
    Zudem hab ich in den VPN Option von IOS beim Server immer die IP 127.0.0.1 also Localhost. Hast du ne Idee woran das liegen könnte das die Verbindung nicht aufgebaut wird.

    Zudem wundert mich noch in der Serverconfig warum du oben bei der IP des Servers nen /24 Netz hast und unten bei den Clients ein /32 Netz?

    Würde mich über ein Feedback von dir freuen.

    Grüße Henrik

    Antworten
    • Hallo Henrik,

      den “Handshake did not complete after 5 seconds” Fehler hatte ich (zum Glück) noch nicht.
      Mein Windows 10 Notebook und Android Smartphone funktionieren bisher mit dem Setup problemlos.

      was du mal versuchen könntest:
      – andere Geräte funktionieren?
      – aktuelle WireGuard IOS App?
      – localhost beim Server ist sehr merkwürdig, kannst du das ändern?
      – entferne mal in der client.conf den DNS Eintrag
      – ändere mal in der client.conf die allowed ips von 0.0.0.0/0 auf

      Der VPN Server hängt in einem /24 Netz.
      Da der Client dem Server kein komplettes Netzwerk zur Verfügung stellt, sondern nur einen Host, ist bei einem Road Warrior Setup die Netzmaske /32.

      Gruß, Michael …

      Antworten
    • Hallo Henrik,
      das hatte ich auch mal kurz. Ursache war bei mir, dass der QR-Code augenscheinlich alles ins iphone lieferte, aber der Public-Key leider nicht der richtige war. Schau Dir mal oben den Screenshot mit den beiden Public-Keys an und vergleiche mit den beiden wg.conf und client1.conf… so muss es aussehen. War bei mir aber nicht. Nachdem ich den Public-Key des Clients anpasste (entweder im iphone oder in conf), ging der handshake auf Anhieb. :)

      Mir war auch etwas rätselhaft, wie der pubic-Key des Clients in den QR-Code kommen sollte, wenn er gar nicht in der conf für die qrencode enthalten ist. Ich habe vermutet, dass das iphone sich dann selber einen generiert aus dem Private-Key. Wohlmöglich ist der QR-Code korrekt, wenn man in der client1.conf auch noch zusätzlich den Public-Key des Clients unter [Interace] einfügt. Hab’s noch nicht versucht (Wegen meines anderen Problems siehe oben), aber wäre denkbar.

      Antworten
  5. Ergänzung nach Test:
    * Es geht nicht, den erzeugten public-key des client in client1.conf zusätzlilch zu legen.
    * Mit dem selben Private-Key des clients erzeugt zumindest bei mir wg pubkey einen anderen Key als der iOS-Client beim einlesen des QR-Codes. Das ist bei Dir vermutlich auch die Ursache. Unglücklich irgendwie…bis diese technisch Abweichung gelöst ist, muss man wohl manuell den Code vom iphone auf den Server bringen und in der wg0.conf eintragen.

    Die Frage ist: Das müssten ja alle iOS-User haben und was kann man daran ändern. Gibt es eine Paramter zu wg pubkey, um die selbe Ableitung wie der iOS-Client zu bekommen?

    Antworten
    • Ergänzung:
      Es scheint so, dass der generierte public key nur manchmal abweicht zwischen wg pubkey und iOS. Ich hatte jetzt wieder einige Fälle ohne Abweichungen, aber einzelne mit. Wenn man den manuellen workaround nicht mag, kann man also einfach eine neue private/public key-Kombi erzeugen und schauen, ob es passt.

      Thema habe ich wireguard bereits gemeldet mit reproduzierbarem Beispiel; man darf nicht vergessen, es ist halt noch immer beta-Phase… :)

      Antworten
  6. Hallo,

    Danke für die Anleitung. Installation auf dem Pi3 neuste Raspbian (Buster) funktionierte wunderbar. Die Verbindung wird aufgebaut. Nur leider habe ich keinen Zugriff auf das Internet bzw. aud die lokale Resourcen.

    Heimnetz (FritzBox 6490 10.0.0.1) 10.0.0.0/24 Netz
    Pi3 10.0.0.60
    Der Rest ist wie bei Dir. Also Wireguard-Server 10.0.1.1, Client1 10.0.1.2, Client2 10.0.1.3. Portweiterleitung in der FritzBox usw.

    root@raspberrypi:/etc/wireguard# wg
    interface: wg0
    public key: gQ5/FY3ReWV+ZTZP+v8R….
    private key: (hidden)
    listening port: 51822

    peer: QYR2wdtKD6rGZPcsS4lJzGLiHv+…….
    endpoint: 46.114.xx.xxx:55702
    allowed ips: 10.0.1.2/32
    transfer: 9.11 KiB received, 5.66 KiB sent

    peer: 1PBMEIQRqIxOLEtlHr2b27valj5/8a…..
    allowed ips: 10.0.1.3/32

    Da ich nicht der größte Netzwerkexperte bin, hoffe ich auf Hilfe. Welche Informationen kann ich senden um
    1. Internet zu nutzen
    2. auf das Netzt 10.0.0.0/24 zuzugreifen.

    Danke Jones

    Antworten
    • Hallo Jones,

      von was für einem Client aus geht es denn nicht? (Gerät / Betriebssystem)

      Überprüfe mal die Server Config.
      – dein WireGuard Port ist 51822, richtig?
      – stimmt der Name der Netzwerkschnittstelle bei den iptables Regeln? (den Fehler hatten wir nämlich schon mal)

      Antworten
      • Habs gelöst. Die FritzBox Kindersicherung war für den Pi aktiviert. Habe es hiermit gemerkt:

        root@raspberrypi:/etc/wireguard# curl ip.stigok.com
        302 Document moved302 Document movedThis document has moved here.
        root@raspberrypi:/etc/wireguard#

        Nach der Freischaltung klappte dann auch der Handshake.

        Danke noch einmal für die Anleitung. Vielleicht baust du den “Onlinetest” ja in deine Beschreibung ein. Sozusagen als Vorbedingung für alle weiteren Schritte.

        Danke

        Antworten
  7. Habe noch eine abschließende Bemerkung/Hilfegesuch. Mit der Geschwindigkeit scheint in einigen Situationen etwas nicht zu stimmen. Ich habe eine 100/50 (FB 6490) Anbindung. Diese wird auch voll geliefert. Zuhause an der FritzBox hängt der Pi3B+ per Gbit an der FB. Ein lokaler Speedtest auf dem Pi (speedtest-cli) lieferte die volle Geschwindigkeit (100/50). Auf der Wireguard Gegenseite (Netzwerkanbindung 500/500) steht mein Reiserouter GL.Inet 750S-Ext. Der Wireguard Client ist hier bereits vom Hersteller impementiert.

    Nun mein Problem: Steht die Wireguard Verbindung und führe ich mit dem Client ein Speedtest durch (auch mit Kabel verbunden), liefert der Speedtest die Werte (ca. 40/45). Soweit so gut. Wenn ich jetzt aber eine Plex Video Stream (23Mbit/s) starte, dann ist die Verbindung offenbar auf 15-20 Mbit/s begrenzt (sehe ich im FritzBox Onlinemonitor). Alle 5-10 Sekunden gibt es daher Aussetzer im Video. Ein 23 Mbit/s Plex Stream ohne Wireguard Verbindung läuft einwandfrei. Auch höhere Streamraten (bis 40 Mbit) habe ich bereits geschafft.

    Wie kommt es, dass ein Speedtest 45 Mbit/s schafft, ein Plex Stream aber nicht einmal die Hälfte. Die Prozessoren beider Geräte (Pi und Gl.Inet) sind bei weitem nicht ausgelastet. An der Vernetzung der Geräte kann wie gesagt nicht liegen. Habt ihr ein paar Ansatzpunkte?

    Antworten
  8. @Jones: Der GBit LAN Port des Pi3B+ schafft maximal ca. 300 Mbit/s Durchsatz = ca. 37,5 MB/s.
    Die Performance im “echten Leben” wird bspw. bei Streamen von Videos von einer angeschlossenen USB Festplatte niedriger sein – da alle Daten (USB Ports und LAN) trotzdem durch den SoC und den einen USB 2.0 Port laufen müssen.

    Erst der Pi4 bietet vollen GBit Durchsatz (ca. 940Mbit) da dieser voll angebunden ist.

    Antworten
  9. Hallo,
    leider klappt es bei mir auf einem 3B+ mit Buster nicht. Die unstable-sourcen werden abgelehnt, weil sie nicht signiert sind und das Paket Wireguard wird nicht gefunden. Was muss ich tun, damit ich es installieren kann?
    Danke und Gruß

    Antworten
  10. Hallo,

    vielen Dank für die Anleitung, VPN funktioniert, und auch der Zugriff vom Client auf’s Heimnetz klappt.
    Da ich eine Fritzbox habe wollte ich jetzt am Handy einen SIP Client nutzen. Dabei ist mir aufgefallen:

    Das Handy ist mit seiner VPN Adresse nicht aus dem Heimnetz erreichbar.
    Abhilfe: Auf der Fritzbox eine Statische IPv4 Route setzen die aufs Wireguard Netz verweist.

    Um bei den Verwendeten Beispieladressen zu bleiben:
    Auf der Fritzbox wird eine Route mit dem
    Ziel-Netz: 10.10.10.0/24
    Gateway: 192.168.150.200
    gesetzt, damit klappt auch SIP Telefonie und der direkte Zugriff aus dem Heimnetz (192.168.150.0/24) aufs VPN Netz (10.10.10.0/24)

    Viele Grüße,
    Sven

    Antworten
  11. @Sven_A: Danke für den Tip. Nach der Lösung für mein VoIP Problem über WireGuard habe ich schon lange gesucht. Einfach die IPv4 Route in der FB angelegt und schon klappt es auch mit der FritzApp Fon von unterwegs.

    Antworten
  12. Hallo,

    ich habe noch ein Problem. Ich habe Wireguard wie hier beschrieben. Es läuft auf einem Pi 3B+ parallel zu Pi-Hole mit Stubby hinter einer Fritzbox. Das läuft so weit alles gut und ich kann mich problemlos per Wireguard verbinden und auch auf alle lokalen Geräte zugreifen. Nur komme ich über Wireguard nicht ins Internet -> Meldung “DNS_PROBE_FINISHED_BAD_CONFIG”. Als DNS ist in der WG-Config der Pi angegeben.

    Leider habe ich keinen Ansatz, wo ich anfangen könnte zu suchen. Habt ihr Tipps oder vielleicht sogar eine Lösung für dieses Problem?

    Antworten
  13. Wenn ich die FritzBox als DNS angebe funktioniert es. Die FritzBox verweist als DNS wieder auf den Pi. Wenn ich den Pi direkt als DNS angebe funktioniert es nicht. Fehlt da evtl. noch eine Route auf dem Pi? Die hier in den Kommentaren genannte Route auf der FritzBox habe ich eingetragen.

    Antworten
  14. Moin,

    ich bekomme beim Aufruf von
    sudo apt-get install wireguard
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    E: Unable to locate package wireguard

    cat /etc/os-release
    PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
    NAME="Raspbian GNU/Linux"
    VERSION_ID="9"
    VERSION="9 (stretch)"
    ID=raspbian
    ID_LIKE=debian

    Kann ich bitte einen Tipp bekommen, was ich nun tun sollte?

    Antworten
  15. egal was ich probiere ich bekomm immer die Meldung:
    gpg: Empfangen vom Schlüsselserver fehlgeschlagen: Server indicated a failure
    bei allen 3 keys hier auf der seite der selbe fehler…

    Antworten
  16. Hallo,

    beim Starten von WireGuard über “$ wg-quick up wg0” erhalte ich in der dritten Zeile diese Fehlermeldung:

    Key is not in the correct lenght or format :
    Configuration parsing error

    Kennt jemand von euch diese Meldung und kann mir weiterhelfen?

    Danke

    Antworten
    • Dann stimmt was mit dem Format des eingefügten keys nicht! ;)

      Hast du vielleicht den Pfad zu der Datei dort eingetragen?
      Hier muss nur der Inhalt der entsprechenden *.key Datei rein.

      Antworten
  17. Super Anleitung. Hat alles auf Anhieb ohne Probleme funktioniert!

    Eine Frage hätte ich noch: Wenn eine neue Wireguard Version rauskommt, einfach
    apt-get update
    apt-get upgrade
    machen?

    Antworten
    • Ja, Wireguard kann über die Paketverwaltung aktualisiert werden.

      Aber aus eigener Erfahrung:
      Backup machen! WireGuard configfiles (/etc/wireguard) und auch mal ein komplettes Image der SD Karte!
      Bei einem Wireguard Update hat es mir mal den kompletten Pi zerschossen, da ging nix mehr.

      Vorsicht auch bei Kernel Updates des Pi. Danach passen die WireGuard Module natürlich nicht mehr zum neuen Kernel.
      Lässt sich meistens mit einer Neuinstallation von Wireguard wieder hinbekommen, aber auch nicht immer. ;)

      Antworten
  18. Hallo,

    bin absoluter Neuling.
    VPN Verbindung steht, allerdings keine Verbindung auf die Synology im eigenen Netzwerk…
    QR- Code klapte also auch.
    Fehlermeldung auf IOS: “Handshak did not cpmplete after 5 sec…”

    Ich gehe davon aus, dass es am Port liegt:

    /ip firewall filter
    add action=accept chain=forward dst-port=51820 protocol=udp
    /ip firewall nat
    add action=dst-nat chain=dstnat dst-port=51820 in-interface=wan protocol=udp to-addresses=192.168.150.200 to-ports=51820

    Wo genau trage ich das ein?

    Den Rest habe ich fünfmal gecheckt…

    Wie gesagt, Neuling :-)

    Danke!

    Antworten
    • Zur IOS Fehlermeldung gibt’s hier schon einige Kommentare.

      Die Einträge für die Firewall und das Portforwarding sind vom verwendeten Router abhänging.
      In meinem Fall bezieht sich das auf einen MikroTik Router. Die Regeln weden über das CLI (Terminal) eingegeben.

      Was für einen Router hast du denn?

      Antworten
  19. Hallo,

    danke für die schnelle Antwort.
    Ich habe einen Telekom Hybrid Router…. Ich weiß, würde auch lieber auf FB oder ähnliches umstellen.
    Doch leider ist das aufgrund meines Anschlusses nicht möglich, da ich ohne Hybrid wahrscheinlich den langsamsten Anschluss der Welt habe :-(

    Firewall ist beim hybrid- Router leider nicht deaktivierbar… Die o.g. Lösungen habe ich alle schon probiert… Leider ohne Erfolg.
    Beim Router habe ich den Port 51820 geöffnet.

    Wahrscheininlich ist die Frage zu trivial aber ich stelle sie mal trotzdem : Wie und wo gebe ich die Regeln über das CLI ein :-)

    Wie gesagt, ist das erste mal das ich etwas „programmiere „:-))

    Vielen Dank und schönes WE
    Stephan

    Antworten
  20. Ganz großes Lob. Für mich die beste Anleitung zu Wireguard die ich nach umfangreicher Recherche gefunden habe.
    Dank dieser Anleitung war die Einrichtung von Wireguard auf meinem Raspberry Pi4 ein Klacks, während andere Anleitungen nur ein Fragezeichen hinterließen…
    Habe nun Handy und Windows-Notebook über Wireguard angebunden. – Vielen Dank !

    Antworten
      • Was mich noch interessieren würde: Momentan betreibe ich neben dem Wireguard-Raspberry noch eine LAN-2-LAN Kopplung über das Internet mit der VPN-Funktion von zwei Fritzboxen.
        Diese VPN Verbindung ist wegen der Fritzbox-CPU-Leistung leider nicht sehr performant. – Hier wäre die Frage, wenn ich auf beide Seiten/in beide lokalen Netze Wireguard-Gateways (=Raspberrys) packe, wie müsste ich die dann für eine LAN-2-LAN-Kopplung einrichten ? – An den Fritzboxen müsste ich dann nur die IP des jeweiligen Wireguard-Raspberrys als Gateway für das jeweils andere Netz als statische Route angeben, denke ich. – Der normale Internetverkehr der beiden Standorte soll ja ganz normal über die Fritzbox direkt ins Internet laufen.

        Antworten
          • Hast du mal irgendwo eine Beispielkonfig beider Seiten für mich, an der ich mich entlanghangeln kann ? Ich stelle mir z.B. die Frage, ob beide Raspberrys auf beiden Seiten einen Wireguard Server haben müssen, oder ob nur einer der beiden Raspberrys dann ein Wireguard Server ist, und der andere ein Wireguard Client. – Dann wäre die Frage, wie genau ich dem Wireguard-Raspi-Client sage, dass er Pakete von anderen Rechnern im lokalen LAN über Wireguard ins entfernte LAN weiterreichen soll.

            Meine aktuelle Netz-Umgebung ist so:
            Ort 1; Netzadresse 172.16.0.0/16; Öffentlicher DynDNS: Ort1.my-wan.de
            Ort 2; Netzadresse 192.168.178.0/24; Öffentlicher DynDNS: Ort2.my-wan.de

            Wenn ein beliebiger Client aus Ort 1 (172.16.0.0/16), dessen Gateway die dort lokal installierte Fritzbox ist, Pakete für das Netz von Ort 2 hat, soll die Fritzbox mithilfe einer statischen Route diese an den dort lokal laufenden Wireguard-Raspi weitergeben, der diese dann an den Wireguard-Raspi von Ort 2 weiterleitet.
            Umgekehrt soll es genauso funktionieren, also wenn ein beliebiger Client aus Ort 2 (192.168.178.0/24) Pakete für Ort 1 (172.16.0.0/16) hat, sollen diese von der ebenfalls in Ort 2 stehenden Fritzbox an den dort installierten Wireguard-Raspi an den Raspi von Ort 1 weitergeleitet werden. Der teszliche normale Internetverkehr soll nicht über den Tunnel laufen, sondern ganz normal direkt ins Internet.

            Wie ich statische Routen in den Fritzboxen setze ist klar, aber wie ich letztlich eine LAN zu LAN Kopplung mithilfe von zwei Wireguard-Raspberrys auf beiden Seiten konfiugurationstechnisch hinbekomme istz mir aktuell noch nicht klar.

            (All das übrigens, weil die Performance der bisher dafür eingesetzten Fritzbox-eigenen VPN Funktion/LAN-zu-LAN-Kopplung sehr dünn ist)

  21. Moin,
    bei mir läuft alles wunderbar.

    Nur:
    Hat jemand eine Idee, wie man den Android-Client nach der nächtlichen Zwangstrennung des DSL-Anschlusses wieder neu startet,
    um die neue IP-Adresse zu bekommen?

    Antworten
    • Hallo,

      gibt es für das Problem inzwischen eine Lösung? Ich habe das Problem auch, nutze eine DynDNS. Aber scheinbar kommt Wireguard damit nicht klar. Ich habe zwar zusätzlich noch Unbound installiert und als DNS-Server, denke aber nicht dass es daran liegt.

      Ansonsten tolle Anleitung, danke.

      Gruß,Klaus

      Antworten
  22. Könnt ihr etwas zur Performance sagen? Ich habe 100Mbit Upstream und würde gerne wissen, ob der Pi3 dies hier in Wireguard rausholen kann.
    Auf meinem DD-WRT Router (Linksys WRT1900ACS v2) ist die Performance unterirdisch, ich kriege maximal 8-10 MBit/sec Transferrate. OpenVPN hingegen läuft auf demselben Router mit ca. 30MBit/sec. Dies ist insbesondere deshalb seltsam, weil alle die Performance von Wireguard loben, aber ich vermute, dass es im DD-WRT nicht vernünftig integriert wurde.

    Wie sieht es hier mit der Raspi Performance aus?

    Antworten
  23. Hallo,
    Eine Frage: gibt es schon eine Möglichkeit, WireGuard auf einem RasberryPi 4 mit neuem Buster zu nutzen? Welche Vorteile hat dies: höherer Durchsatz/ Geschwindigkeit? Hat es schon jemand erfolgreich probiert?

    Antworten
  24. Hallo,
    erstmal Danke für die sehr verständlich geschriebene Anleitung…
    ich bekomme jedoch bei dem Kommando:

    ‘wg-quick up wg0’

    folgende Fehlermeldung:

    [#] ip link add wg0 type wireguard
    RTNETLINK answers: Operation not supported
    Unable to access interface: Protocol not supported
    [#] ip link delete dev wg0
    Cannot find device “wg0”

    komme irgendwie nicht weiter

    Antworten
    • Dann sind bei dir die wireguard Kernel Module nicht geladen!
      Hast du vielleicht vergessen die kernel-headers zu installieren oder nach der Installation neu zu starten?

      Antworten
      • Danke für die prompte Antwort!

        vergessen habe ich es nicht, aber wahrscheinlich folgende Fehlermeldung übersehen:

        Entpacken von raspberrypi-kernel-headers (1.20190925+1-1) über (1.20190925+1-1) …
        raspberrypi-kernel-headers (1.20190925+1-1) wird eingerichtet …
        run-parts: executing /etc/kernel/header_postinst.d/dkms 4.19.75+
        run-parts: executing /etc/kernel/header_postinst.d/dkms 4.19.75-v7+
        run-parts: executing /etc/kernel/header_postinst.d/dkms 4.19.75-v7l+
        run-parts: executing /etc/kernel/header_postinst.d/dkms 4.19.75-v8+
        Error! echo
        Your kernel headers for kernel 4.19.75-v8+ cannot be found at
        /lib/modules/4.19.75-v8+/build or /lib/modules/4.19.75-v8+/source

        welche jetzt – beim reinstall – ausgegeben wurde

        Antworten
        • Hast du ein Kernel Update installiert?
          Da hatte ich auch schon so meine Probleme mit.

          versuch mal ein:
          dpkg-reconfigure wireguard-dkms

          oder:
          apt remove wireguard*
          apt install bc libncurses5-dev
          apt install wireguard

          Hab das auch mal in meiner Anleitung im Abschnitt “WireGuard updaten” ergänzt.

          Antworten
  25. Guten Abend,
    mein Wireguard lief bisher immer super stabil und auch recht perfomant. Nun hab ich nach dem letzten Update auf Raspbian Buster Lite wieder das Problem das der Handshake bei meinem Iphone nicht mehr klappt. Er sagt in der App das der Tunnel verbunden ist, aber ich kann keine Seiten mehr aufrufen. Zudem wird mir in der App auch nur angezeigt das ich angeblich nur Daten senden würde. Im Raspberry sehe ich auch keine Verbindung wenn ich wg0 eingebe. Auf dem Notebook ist es ähnlich. Viellleicht weiß jemand woran es liegt.

    Antworten
  26. Halo MB-Press

    Ich habe vor Weihnachten auf einem Raspberry pi 4 (2 GB Ram) neben einem PiHole einen Wireguardserver eingerichtet. Über ein Xioami Redmi Note 4 mit Kernel für Wireguardunterstützung hat es auch direkt funktioniert. (Betriebssystem Lineage 9 Elektrakernel) Der Akkuverbrauch ist bei 1 Prozent pro Tag und man hat offensichtlich ein reines Roaming über seinen VPN Server. Was mich allerdings stört ist die Geschwindigkeit. Man kommt egal ob man LTE hat oder H+ oder auch in einem fremden Wlan ist nicht über 60 KB/s hinaus. Andere berichten von viel höherem Durchsatz. Ist überhaupt ein höherer Durchsatz möglich und wenn ja, wie?

    Antworten
      • Sorry für die späte Antwort.
        Nachem ich
        AllowedIPs = 0.0.0.0/0, 192.168.178.0/24 (Fritzboy IP) bei dem Clients auf
        AllowedIPs = 0.0.0.0/24, 192.168.178.1/24 abgeändert habe, läuft die Verbindung. Ebenfalls kann ich auch so direkt auf Fritz.nas zugreifen.
        Der Traffic ist jetzt ca. 20 bis 25 % lagsamer als ohne Wireguard (statt 5000 KB/s 4000 KB/s) Einfach toll, aber warum die Bremse drin war kann ich nicht nachvollziehen. Vielleicht hat jemand eine Erklärung dafür.

        Ich war in Israel in Urlaub, ich habe den Wireguard immer am laufen gehabt. Bei mir sind keine Probleme aufgetaucht. (Einzig dauert es bis zu 3 Sekunden, bis der Traffic läuft, das mag aber an dem Elektrakernel liegen, der extrem stromsparend ist.) Ich war der einzigste, der dem Tagesschau Lifestream in der Reisegruppe hinbekam. (musste aber den Standortzugriff bei Firefox abschalten)

        Noch einmal vielen Dank für die Anleitung.

        Antworten
  27. Was mich noch interessieren würde: Momentan betreibe ich neben dem Wireguard-Raspberry noch eine LAN-2-LAN Kopplung über das Internet mit der VPN-Funktion von zwei Fritzboxen.
    Diese VPN Verbindung ist wegen der Fritzbox-CPU-Leistung leider nicht sehr performant. – Hier wäre die Frage, wenn ich auf beide Seiten/in beide lokalen Netze Wireguard-Gateways (=Raspberrys) packe, wie müsste ich die dann für eine LAN-2-LAN-Kopplung einrichten ? – An den Fritzboxen müsste ich dann nur die IP des jeweiligen Wireguard-Raspberrys als Gateway für das jeweils andere Netz als statische Route angeben, denke ich. – Der normale Internetverkehr der beiden Standorte soll ja ganz normal über die Fritzbox direkt ins Internet laufen.

    Diese Frage interessiert mich ebenfalls brennend! Ich versuche zur Zeit die dafür richtige Konfiguration der wg0 herauszufinden. Mir ist bisher noch nicht klar geworden, was in der wg0 Datei beim Clienten bzw. Server verändert werden muss.
    Wie wird dann erreicht, dass die eingestellten/importierten Keys aus der wg0 in das Unterverzeichnis Keys übernommen. Wenn ich nur die wg0 ändere, dann bekomme ich bei der Überprüfung mit pivpn eine Fehlermeldung.

    Antworten
  28. Hallo,

    vielleicht hat einer einen Tipp für mich.
    Ich komme mit VPN nun auf alle meine Rechner im Heimnetz 192.168.178.x. Aufruf klappt mit IP Adresse und Name des Rechners.

    Will ich aber weiter in Internet klappt es nicht. Egal ob IP oder Name.

    Antworten
    • Fehler gefunden. Ich musste iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE anpassen. eht0 gibt es bei mir nicht. Der Name ist in einer Proxmox VM anders. Aber jetzt klappts.
      Außerhalb von meinem W-Lan Always On. Super schnell. :-)

      Antworten
  29. Hallo,
    super vielen Dank für deine Beschreibung.
    Ich habs via Fritzbox Gigabit Kabelinternet Anschluss zu einem dahinterliegenden Unifi USG Router in Betrieb.
    AVM Fritzbox 6591 läuft als Exposed Host. Unifi USG Router ist der Hauptrouter im Netz.
    Ein Raspi 4 spielt im Netz des USG dann den Wireguard Server.
    Läuft alles Bestens, wenn man die Statische Route im USG auf 10.10.10.0 beachtet.

    Antworten
    • Hall Hr. Janssen,

      Ich habe eine sehr ähnliche Konfiguration:
      Fritz!Box 6499 > USG 4P > Raspberry 4 als WG-Server
      Es klappt alles, bis auf die Fritz Fon app, Verbindung klappt, Anrufe kommen sogar durch, nur wird kein Ton übertragen.
      ich denke mit der statischen Route klappt es dann bei mir auch, nur kann ich diese in der USG4 nicht einstellen.

      bitte um Unterstützung
      …..
      wenn man die Statische Route im USG auf 10.10.10.0 beachtet.

      Antworten
  30. Hallo alle zusammen,

    ich bekomme das irgendwie nicht hin..Handshake funktioniert, aber ich kann keine Verbindung zum Internet herstellen,
    mit einem Ipad und der iosapp.

    Fritzbox hat die IP 192.168.10.1, und der pi 192.168.10.32

    wg0.conf sieht so aus:
    [Interface]
    Address = 10.10.10.1/24
    ListenPort = 51820

    PrivateKey = xxxxxxxxxxxxxxxxxxx=
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

    # Client1
    [Peer]
    PublicKey = 7lxxxxxxxxxxxxxxxxxxxxx=
    AllowedIPs = 10.10.10.2/32

    # Client2
    [Peer]
    PublicKey = Kxxxxxxxxxxxxxxxxx=
    AllowedIPs = 10.10.10.3/32

    und

    client1.conf:
    [Interface]
    PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxx=
    Address = 10.10.10.2
    DNS = 192.168.10.1

    [Peer]
    PublicKey = xxxxxxxxxxxxxxxxx=
    Endpoint = 91.xxxxxxxxxxxxx:42891
    AllowedIPs = 0.0.0.0/0, 192.168.10.1/24
    PersistentKeepalive = 25

    Hab eine Fritzbox 7490 und portforwarding ist eingestellt in der Fritzbox für den pi auf 51820 und auch eine statische route.
    My dyndns ist der MyFritzdyndns: mit der Internetadresse; https://hdxxxxxxxbf:42891 bzw. 91.xxxxxxxx:42891.
    et0 gibt es auch.

    Habe schon das gesamte Wochenende alles probiert aber es funktioniert einfach nicht. Vielleicht kann mir ja einer helfen?

    Antworten
          • Also die statische Route hatte ich schon rausgenommen und ip6 habe ich komplett deaktiviert.
            Überlege ob es vielleicht an der dnydns von myfritz zu tun hat, weil über https und der portangabe, die ja eine andere ist als 52180?! Was macht mir noch vielleicht einfällt , ist dass wenn ich wg eintippe er mir die schlüssel anzeigt, aber bei mir zeit er unten kein datenverkehr mut transferred in kb. Woher weiss ich denn ob er eine Verbindung zu wg0 herstellt? Ein Notebook habe ich leider nicht zum Testen.

          • Das hat nix mit der kompletten MyFritzadresse zu tun.

            Deine Box ist extern über die Fritz DynDNS Adresse erreichbar? (irgendwas0815.myfritz.net)
            Dann richtest du eine Portweiterleitung von Port 51820 UDP an den Pi auf Port 51820 ein.

            Als Endpoint nimmst du dann: irgendwas0815.myfritz.net:51820

            Stolperfalle bei den Fritzboxen ist wohl auch die Kindersicherung! Muss für den Pi deaktiviert werden.
            (Hatte mal einer in den Kommentaren geschrieben.)

  31. Es muss irgendwie an der Fritz DynDNS Adresse liegen. In der Fritzbox steht da: https://bxxxxxxxxxxxxx.myfritz.net:42891. Gebe ich auf meinem Computer im Browser nur bxxxxxxxxxxxxx.myfritz.net läuft die Verbindung ins leere. Erst wenn ich komplett https://bxxxxxxxxxxxxx.myfritz.net:42891 eingebe kommt eine Verbindung zustande und die Meldung wegen dem Zertifkat der Fritzbox erscheint. Frage wäre dann natürlich wie ich sowas dann bei endpoint eingeben kann?Der eigentliche Port ist ja 51280 und er will ja https.
    Portweiterleitung mit 51280 hatte ich gemacht und die Kindersicherung ist nicht aktiviert.

    Antworten
      • Ok das hatte ich ja auch auch schon ausprobiert. Dass ist zum Haare raufen. Für das portwarding in der fritzbox wähle ich doch den pi aus und udp und 51280?!
        Beim DNS Server habe ich auch schon alles probiert, kann ich da eigentlich die IP Adresse meiner FRITZ!Box angeben?

        Antworten
        • Ja, portforwarding auf den Pi und udp port 51820. (nicht 51280)
          Ich würde erstmal nen Google DNS nehmen, wenns damit läuft dann die FB als DNS probieren.

          So langsam fällt mir aber nix mehr ein. (Hab keine FB und kein Apple Gerät.)

          Vielleicht solltest du einfach alles nochmal auf null setzen und von vorne anfangen.

          Antworten
          • Ja ich werde das alles komplett neu aufsetzen. Habe noch eine leere sd karte.
            Vielen dank für die hilfestellungen👍

  32. Danke für die Anleitung.

    Also ich bin echt überrascht (und mich kann nach fast 40 Jahren Erfahrung mit 0 und 1 nicht viel überraschen) wie schnell und einfach sich wireguard einrichten lässt. Sofort volle und einwandfreie Funktion auch in einer komplexen Vernetzung.

    Gruß!

    Antworten
  33. Hallo,
    ich hatte die Server Konfiguration geändert

    [Interface]
    Address = 10.10.10.1/24


    # Client1 Smartphone
    [Peer]
    PublicKey =
    AllowedIPs = 10.10.10.2/32

    Bei den AllowedIPs des Client2 habe ich noch 192.168.178.0/24 (Fritz Box Netzwerk) und 192.168.2.0/24 eingetragen.
    Leider brach beim “wg up wg0” die Verbindung zum Raspberry ab.
    Seitdem komme ich nicht mehr per ssh rauf.
    Eine Idee?

    Viele Grüße
    Kai

    Antworten
  34. Hallo mb-press

    ich hatte mich bereits am 10.02.20 an dich gewand mit dem Problem, das ich trotz laufenem Wireguard mit Kernel Modul auf dem Phone auch bei LTE nicht über 60 kb/s Traffic kam. Nachem ich die AllowedIPs auf 0.0.0.0/0 umgestellt hatte war die Bremse weg (warum auch immer).
    Vor zwei Wochen habe ich ein OTA Update von Lineage 16 auf dem Redmi Note 4 gefahren, das alte war von Jannuar. Seit dem ist die alte Geschwindigkeit wieder da. Die Geschwindigkeit kommt nicht über ca. 60 kb/s. Der Tunnel steht, ich kann die Verbindungen auf dem Raspberry sehen, das Kernelmodul ist auf dem Phone geladen und wird auch genutzt. An dem Raspberry ist seit Anfang Februar nichts geändert worden. Offensichtlich liegt es an dem LineageUpdate. Die alte Version hatte ich nicht mehr, deshalb habe ich eine clean Installation von Lineage 16 neu gemacht. Aber Wireguard ändert sich nicht. Dann habe ich noch eine clean Installation von Lineage 16 microG (hatte ich vorher schon drauf, als die Geschwindigkeit noch hoch war, allerdings über Nanolox geflasht). Ich habe die aktuellen Wireguard Apps und auch ältere probiert, aber an der Geschwindigkeit ändert sich nichts. Versuche ich es mit dem Originalkernel baut sich eine normale VPN Verbindung auf mit exakt den gleichen Geschwindigkeiten. Flashe ich den Elektra Kernel (oder auch den Stromguard-Kernel) wird ohne die in den Einstellungen hinterlegte VPN Verbindung, wird der Tunnel aufgebaut, allerdings wieder mit der niedrigen Geschwindigkeit. Die VPN Einstellung in den Netzwerkeinstellungen des Telefons kann man auch löschen, es hat keierlei Einfluss auf die Geschwindigkeit.

    Wo kann man noch was machen?

    Antworten
  35. Besten Dank für diese Super Anleitung.
    Ich habe es soweit geschafft, dass ich mit meinem Laptop (Windows 10) zu meinem Wireguard Server (ist eine Debian VM) auf meinem Server zu Hause verbinden kann. Wenn ich auf der Client Seite die “AllowedIPs = 0.0.0.0/0” so setze, komme ich auch auf mein NAS und alles Komponenten drauf.
    Allerdings möchte ich nicht den gesamten Verkehr über den Tunnel schicken sondern nur Anfragen in mein Heimnetz 192.168.1.0/24.
    Also dachte ich ich mache beim Client den Eintrag “AllowedIPs = 10.0.0.1/24, 192.168.1.0/24”. Das wäre ja zu schön gewesen :(
    Leider kann ich so nur den Wireguard Server 10.0.0.1 pingen. 192.168.1.2 oder so sieht er leider alles nicht.
    Was mache ich falsch? Ich verstehe es nicht. :(
    Wäre froh könnte mir da jemand helfen.
    Firewall, Portweiterleitung und so sollte ja alles stimmen sonst würde es ja nicht mit AllowedIPs = 0.0.0.0/0 gehen oder mache ich da einen Denkfehler?

    Antworten
  36. Hallo zusammen,

    tolle Anleitung und tolle Kommentare!

    Was mich interessieren würde wäre wie ich eine Feste-IP (ionos VPS für 1,-€) mit meinem PI4 route.
    Den VPS mit der festen IP als Server und den Pi4 als Client, oder?
    So möchte ich dann die Ports 80 und 443 auf PI4 ansprechen um Emailserver und Webserver zu betreiben.

    Hat das jemand mal versucht und kann mir Tipps geben?

    LG und bleibt gesund!

    Antworten
  37. Auch mir hat die Anleitung sehr geholfen, danke.

    Ich habe nun aber das Problem, dass Pushnachrichten (PushTAN und Signal) nicht ankommen. Da dies bei geschaltetem Pihole ebenfalls auftritt (das zusätzlich integrierte WIreguard ist auf dem Handy ebenfalls aus) vermute ich die Ursache bei unbound. Kennt jemand das Phänomen und weiß eine Lösung? Mir würde auch ein Tipp helfen wo ich suchen könnte.

    Danke und Gruß,

    Klaus

    Antworten
  38. Moin!
    Ich habe $ apt install -y qrencode eingegeben, um die config-qr zu erstellen. Darauf wurde auf meinem Pi zwar was installiert, aber das wars dann. Schließlich habe ich noch den Befehl für den client $ qrencode -t ansiutf8 < client1.conf eingegen, da bekome ich eine Fehlermeldung -bash.

    Vielen Dank.

    Antworten
  39. Hallo zusammen,

    ich habe zwei Fragen:

    1. Das mit der statischen IPv4/IPv6 Route leuchtet mir noch nicht so ganz ein.
    Braucht man das nur um VoIP Funktionalität herzustellen oder noch für anderes?
    Bedeutet dies das das VPN-Netz dann richtig mit dem Heimnetz kommunizieren kann
    d.h. ohne ist keine Kommunikation mit dem Heimnetz möglich?
    Muss man das dies für IPv6 auch einrichten?

    2. Meine Clients (Android 10 Smartphones) sind mit einem Arbeits- und Privatprofil ausgestattet. Ich habe zwar in beiden Profilen Wireguard installiert und jeweils mit einem eigenen Wireguardzugang ausgestattet aber wenn beide Wireguard-Apps verbunden werden dann geht in einem der beiden Profile kein Internet mehr. Hat da jemand eine Idee wie man das konfigurieren muss?

    Danke und Grüße

    Antworten
    • Ergänzung zu meinen Fragen:
      zu 1.: Braucht man nicht theoretisch auch eine Route in umgekehrter Richtung also vom VPN-Netz zum Heimnetz?!?

      zu 2. Habe es mittlerweile rausgefunden, ich hatte meine Android Firewall auf dem Client vergessen korrekt einzustellen.

      Jedoch gibt es ein weiteres Problem was ich entdeckt habe:
      Eine App kann bei mir am VPN+Pihole vorbeizutelefonieren. Eine bestimmte Domain die eigentlich geblockt ist, ist über diese App weiterhin erreichbar. Im Browser auf dem Client wird diese erfolgreich geblockt und taucht dann auch in der Pihole Query log auf.
      Habt ihr in eurem Android eigentlich “Durchgehend aktives VPN” und “Verindungen ohne VPN blockieren” aktiv?

      Antworten
  40. Servus,

    danke für die Anleitung. Soweit läuft alles.
    Wenn ich von Handy client1 aufs Heimnetz zugreife geht alles auch auf den Router sogar von außen.

    Am heim PC sieht es da anders aus, sobald ich wireguard aktiviere habe ich zwar Internet und alles, kann aber nicht auf Router zugreifen oder auch auf mein Synology.

    Woran kann das liegen?

    Antworten
    • Hi,

      ich verstehe dein Problem/Frage nicht so richtig.

      Das du vom Handy aus auf’s Heimnetz kommst, ist klar.
      Aber welche Rolle spielt denn der Heim-PC? Wo steht denn dein WireGuard Server?

      Antworten
  41. Hallo Michael,

    kannst du Wireguard auf dem Raspi aktuell kompilieren? Bei mir geht das seit einigen Wochen nicht mehr (habe mehrere Raspis).
    Ich erhalte folgende Fehlermeldung und bisher keine Lösung für das Problem gefunden:

    make
    CC [M] /home/pi/WireGuard/src/main.o
    In file included from /home/pi/WireGuard/src/main.c:9:
    /home/pi/WireGuard/src/queueing.h: In function ‘wg_reset_packet’:
    /home/pi/WireGuard/src/queueing.h:100:2: error: implicit declaration of function ‘skb_reset_tc’; did you mean ‘skb_reserve’? [-Werror=implicit-function-declaration]
    skb_reset_tc(skb);
    ^~~~~~~~~~~~
    skb_reserve
    cc1: some warnings being treated as errors
    make[2]: *** [scripts/Makefile.build:266: /home/pi/WireGuard/src/main.o] Fehler 1
    make[1]: *** [Makefile:1709: /home/pi/WireGuard/src] Fehler 2
    make: *** [Makefile:38: module] Fehler 2

    Antworten
  42. Danke für die ausführliche Anleitung, klappt prima.

    Kurzer Benchmark: Ich setze Wireguard auf einem Raspberry Pi 4 ein und kann zusammen mit der offiziellen Wireguard App auf meinem iPhone 11 Pro meine Internetverbindung vollkommen auslasten, d.h. 106 Mbit/s im Download und 47 Mbit/s im Upload sind damit problemlos möglich. Vermutlich auch noch deutlich mehr, bei mir limitiert da bloß die Internetverbindung.

    Ich kann keinen messbaren Unterschied in der Geschwindigkeit mit/ohne Wireguard VPN feststellen.

    Antworten
  43. Moin ! Erstmal danke für deine Anleitung ;)

    Ich bekomme keine Verbindung hin, sehe entweder den Wald vor lauter Bäume nicht oder ich habe tatsächlich einen goßen Denkfehler.

    Mein Aufbau:

    Internet -> VodafoneModem (192.168.111.1 -> JuniperSRX 192.168.4.250 -> Wireguard 192.168.8.200 (vlan.8)
    -> PiHole DNS 192.168.2.251 (vlan.2)

    Der Wireguard VPN Server steht in einem eigenen VLAN an einen extra Port an der Juniper.
    Meine Firewall Config ist sauber, ich habe mein Notebook angeschlossen und bekomme sofort via DHCP eine IP mit den richtigen Gateway und auch geht DNS sowie alles was gehen sollte.

    Vom Wireguard komme ich via SSH Console auch überall hin, wo es anhand der Firewall Regeln möglich ist.

    Die Eiwahl von extern als auch intern, lässt sich ohne Probleme herstellen. Jedoch sehe ich am PC Client, dass 0 bytes und 0 Pakete austauscht wurden. Der Client sendet, bekommt aber keine Antworten zurück.

    In vielen Anleitungen (so auch in Deiner) wird ein anderes IP Netz verwendet, als der Wireguard an ETH0 anliegen hat. Hat das ein bestimmten Grund ? Ist hier mein Denkfehler ? Ich möchte eben das alle Clients erstmal im VLAN8 aufschlagen und dann kann ich via Firewall Zones mittels meiner Juniper ganz genau steuern, was wer darf.

    Aber ich kann vom Client aus nicht den VPN Server, den DNS Server noch irgendwas via ICMP erreichen. Auch umgekehrt nicht. Auch ist zu Testzwecken aktuell das vlan8 komplett zum Internet hin offen ist. Ich bekomme aber auch kein Connect, wenn ich 1.1.1.1 als DNS auf dem Client eintrage, geschweige dass ich 1.1.1.1 via ICMP erreichen kann.

    #####

    Server Konfig:

    [Interface]
    Address = 192.168.8.200/24
    PrivateKey = xxxxxxxx
    ListenPort = 58210
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    SaveConfig = false

    [Peer]
    # NB-Test
    PublicKey = xxxxxxx
    AllowedIPs = 192.168.8.201/32
    [Peer]
    # Handy
    PublicKey = xxxxxxx
    AllowedIPs = 192.168.8.202/32

    #####

    Client Konfig:

    [Interface]
    Address = 192.168.8.201/24
    PrivateKey = xxxxxxx
    DNS = 192.168.2.251

    [Peer]
    PublicKey = xxxxxx
    Endpoint = dyndnsadresse:58210
    AllowedIPs = 0.0.0.0/0

    # This is for if you’re behind a NAT and
    # want the connection to be kept alive.
    PersistentKeepalive = 25

    Es wäre so genial, wenn jemand den passenden Tipp für mich hat oder ne Idee wie ich noch besser troubleshooten kann.

    Antworten
  44. Vielen Dank für das ausführliche und gut nacharbeitbare Manual.
    Leider funktioniert es bei mir noch nicht ganz.
    Ich erhalte am Client (iPhone) die Anzeige, dass eine VPN-Verbindung besteht, ich bekomme aber keine Webseite angezeigt.
    Am Raspberry Pi bekomme ich auch nicht bestätigt, dass ein Peer verbunden wäre.
    Ich hoffe, es ist nur eine kleine Einstellungssache und jemand hat den entscheidenden Tipp für mich?

    Vielen Dank!

    =============================
    Hier meine Ausgangssituation:
    =============================
    – Router: Fritz!Box 7580 über Telekom im Internet
    – Raspberry Pi 4 mit Raspberry Pi OS frisch installiert. Feste IP-Adresse per DHCP von Fritz!Box bezogen: 192.168.178.88. Ist per Wlan angebunden.
    – Wireguard-Profil an iPhone an Wireguard-App per QR-Code von Raspberry PI übertragen.
    – DynDNS an Fritz!Box eingerichtet: Freigaben–>DynDNS–>dann weiter gemäß den Vorgaben von http://dynv6.com. Die DynDNS-Verbindung funktioniert.
    Dies wird im Menü der Fritz!Box bestätigt (grüner Punkt) als auch beim DynDNS Provider.
    – DNS Server habe ich keine eigenen eingerichtet.(Habe gegoogelt und dann den 1.1.1.1 für die Konfiguration ausgewählt, weil ich nicht wußte, was ich sonst eintragen sollte…
    – Portfreigaben: In der Fritz!Box Internet–>Freigaben–>Portfreigaben, dann: Bezeichnung: VPN; Protokoll: UDP; Port an Gerät 51820 bis Port 51820; Port extern gewünscht (IPv4): 51820, Freigabe aktivieren ist angekreuzt

    Am Raspberry Pi: /etc/wireguard/wg0.conf
    [Interface]
    Address = 10.10.10.1/24
    ListenPort = 51820
    PrivateKey = ***
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
    # Client1 iPhone
    [Peer]
    PublicKey = ***
    AllowedIPs = 10.10.10.2/32

    /etc/wireguard/client1.conf:
    [Interface]
    PrivateKey = ***
    Address = 10.10.10.2
    DNS = 1.1.1.1
    [Peer]
    PublicKey = ***
    Endpoint = ***.dynv6.net:51820
    AllowedIPs = 0.0.0.0/0, 192.168.178.88/24
    PersistentKeepalive = 25

    Abfrage nach dem Status der VPN-Verbindung am Raspberry Pi:
    pi@pi4-1:~ $ sudo wg
    interface: wg0
    public key: ***
    private key: (hidden)
    listening port: 51820

    Antworten
    • Ich habe das Problem lösen können. Es war mein Fehler, ich habe zwei Schlüssel falsch eingesetzt gehabt. Habe dies nun korrigiert (mit neuen Schlüsseln) und nun funktioniert es wunderbar.
      Nochmal vielen Dank für das tolle Tutorial!

      Antworten
  45. Hallo,

    ich habe ein Geschwindigkeitsproblem.
    Wireguard läuft auf einem Raspi, auf meinem Androiden läuft die offizielle Wiregurad App.
    Der Tunnel wird problemlos hergestellt, allerdings ist der Download( Betrachtet vom Android ausgehend) extrem schlecht, d.h. 524 kbit/s und ein Ping von 90.
    Der Upload liegt bei 19000 kbit/s
    DSL und Mobil habe ich grundsätzlich viel mehr Leistung, welche auch zur Verfügung steht.
    Ich habe schon einiges über den MTU Wert gelesen, den habe ich beim Raspi und beim Androiden auf 1372 gesetzt, keine Besserung.

    Antworten

Schreibe einen Kommentar zu Gustav Antworten abbrechen