Wireguard Site to Site VPN für das Homeoffice oder kleinere Netze

Einen Wireguard Site to Site VPN Tunnel einrichten

Wireguard ist eine open Source VPN Lösung. Der Server, welcher hierbei als VPN Gateway fungiert, läuft im Regelfall auf einem Unix basierten OS, meist im internen Netz des Firmennetzwerks. Die Clients wiederum sind für nahezu alle Client Betriebssysteme verfügbar. Das mache ich mir zunutze, denn man kann auf diese Weise einen Client im lokalen Netzwerk (Homeoffice?) bereithalten, der stets eine Verbindung zum Firmennetzwerk aufbaut. Alle anderen PC’s im lokalen Netzwerk, können dann via statischer Route so konfiguriert werden, dass Anfragen in das Netz der Company über diesen Client geroutet werden. Das erübrigt bspw., dass ein Client im Netzwerk eine SSL-VPN Verbindung zur Company aufbauen muss.
Damit das System ständig laufen kann, sollte es ein kleines, kompaktes Gerät, mit wenig Stromverbrauch sein. Was eignet sich hier besser, als ein Raspberry Pi? Wie man den installiert, hab ich hier umfassend beschrieben.
Die „Software“ Wireguard an sich, macht aus Sicht der Installation übrigens keinen Unterschied zwischen „Server“ und „Client“, man spricht hier von sog. „Peers“. Lediglich die Konfigurationsdatei unterscheidet sich zwischen dem Server und den Clients, also den „Peers“.

Achtung Sicherheit und Flexibilität!
Wireguard benötigt auf der Client Seite einen entsprechend freigeschalteten ausgehenden UDP Port, welcher frei definierbar ist, aber auch freigeschaltet sein muss! (Hotel Hotspots, Flughafen Hotspots, etc. öffnen im Regelfall lediglich TCP 80 (HTTP), TCP 443 (HTTPS) und selten auch UDP 53 (DNS). Diese Ports können NICHT für Wireguard verwendet werden!

Auf der Server Seite muss ein Admin ran, denn der Wireguard Server muss auf dem konfigurierten Port, aus dem Internet erreichbar sein! Wer jetzt die Idee hat, UDP 53 (DNS) hierfür zu verwenden, wird vermutlich scheitern, denn Wireguard verhindert „by Design“ den Start der Wireguard VPN Schnittstelle auf diesem Port, da hier im Regelfall bereits „resolved/dnscrypt-proxy“ horcht. Nachzulesen ist dieses Problem auch hier.

Das Prinzip

Folgendes Schema dient bei der Installation als Orientierung. Eine Konstellation, die man durchaus häufiger vorfinden dürfte. Im Schema ist beispielhaft nur ein Client dargestellt, dies können natürlich im weiteren Betrieb durchaus mehr werden.

Network Overview

Grundsätzlicher Ansatz und Vorbereitungen

  • Definition des zentralen Serversystems, wie Standort, Plattform, Netzwerk (hier Labor, VM mit Raspian Desktop, Servernetz)
  • Definition der Server Management IP (10.150.150.10/24)
  • Definition des SEPARATEN Wireguard Netzwerks, welches mit keinem bestehenden Teilnetz „überlappt“. (10.172.172.0/24)
  • Definition der Server IP im Wireguard Subnetz (10.172.172.1/24)
  • Definition der Client IP(s) (10.172.172.11/24)
  • Definition der öffentlichen IP / des öffentlichen DNS Namens, des Servers im Company Netzwerk (hier nicht veröffentlicht)

Konfigurationsschritte „Serverseite“

  • Installation Raspian Buster Desktop
  • SSH aktivieren
  • Konfiguration der lokalen IP im Firmennetz, die nur dem Management des Servers dient (10.150.150.10/24)
  • Konfiguration eines weiteren Interfaces – der Wireguard NIC – im Beispiel „wg0-server“. (10.172.172.1/24)
  • Installation Wireguard
  • Konfiguration Wireguard, gemäß der obigen Festlegungen
  • Konfiguration der erlaubten Client Zugriffe, anhand der Client IP und des Client Public Key. (10.172.172.11/24)
  • Veröffentlichung des Servers (DNAT) am WAN Anschluss der Firewall, um die Client Verbindungen zu ermöglichen. Den Destination Port habe ich im Beispiel auf 51238 festgelegt.
  • Test der Client VPN Zugriffe

Konfigurationsschritte am Client

  • Installation Raspian Buster
  • SSH aktivieren
  • Konfiguration der lokalen IP (dies kann durchaus eine dynamische IP sein)
  • Installation Wireguard für das entsprechende Betriebssystem
  • Konfiguration Wireguard für das entsprechende Betriebssystem, gemäß der obigen Festlegungen
  • Test des VPN Zugriffs und des zugriffs auf die internen Systeme

Vorbereitung des Client im Homeoffice

(hier ein Raspberry „Pi 3 Model B“)

Kurzversion für Fortgeschrittene:

  • Raspi mit Kabel an die FritzBox
  • Auf dem Raspberry „Raspbian Buster Lite“ an den Start bringen
  • SSH aktivieren
  • Hostname anpassen

Für alle anderen hier Step by Step…

  1. In meinem Fall ist der Raspberry via LAN Kabel, direkt an die FritzBox angeschlossen
  2. Jetzt eine SD-Karte mit dem Raspberry-OS (bei mir die Variante „Raspbian Buster Lite“) und dem „Raspberry Pi Imager for Windows“ flashen… Es gibt auch andere Tools (bspw. „Balena Etcher“), für ein originales Raspian reicht das aber…
    [wpdm_package id=’1027′]
  3. Raspian Buster holen –> https://www.raspberrypi.org/downloads/raspbian/
  4. Achtung!
    Nach dem Flashen der SD-Karte, diese nochmal in den PC stecken, nach dem Laufwerk „Boot“ suchen und hier eine leere Datei, OHNE Endung, mit dem Namen „ssh“ erstellen. Damit wird automatisch SSH am Raspi aktiviert und man muss nicht mit Tastatur, Maus und Monitor rumhampeln. Standardmäßig wird der Raspi sich die IP von der FritzBox holen und ist dann via SSH auf dieser IP erreichbar.
  5. Jetzt via SSH am Raspi anmelden. Default Login am Raspi ist immer –> User: pi Passwort: raspberry
  6. Zuerst natürlich das Passwort ändern!
  7. Dann ändern wir den Hostnamen (in meinem Beispiel soll das System „wireclient“ heißen
    Check den akuellen Namen (notieren, brauchen wir nachher nochmal)

    Jetzt ändern wir den Namen mit…

    Check neuen Hostname…

    Suchen, wo der Name noch verwendet wird… (jetzt brauchen wir den alten Namen nochmal, der jetzt zwischen die Hochkommas kommt…)

    Hier im Beispiel nur das Ergebnis, der Hostname ist schon geändert. Die Dateien /etc/ssh… können hier ignoriert werden, diese werden bei der Neuerstellung der SSH Keys automatisch angepasst…

    Jede Datei, in welcher der Name vorkommt anpassen, hier zum Beispiel in der Datei „hosts“ (lokales DNS Resolve)

  8. IP Adresse fest vergeben (hier die Variante via dhcpd)

    Beispielkonfig
  9. Abschluss mit…

Vorbereitung des Servers in der Company (Hyper-V VM, Raspian Buster Desktop)

  1. Virtuelle Maschine erstellen
  2. Raspian Desktop herunterladen und bereitstellen…
  3. SSH aktivieren, also Konsole öffnen
  4. Hostname anpassen (siehe Client)
  5. IP Adresse anpassen (siehe Client)
    Beispielkonfig

Wireguard Installation und Konfiguration

Die Installation ist auf dem PI und dem Server identisch.

Installation Wireguard auf Raspian Buster

  1. Installation Wireguard und Tools…
    Zeile für Zeile in die SSH Console des Raspi kopieren…
  2. Konfiguration Wireguard
    • Privaten und öffentlichen Schlüssel des Clients erstellen
      Erstellen des Wireguard Verzeichnis

      Wechsel ins Wireguard Verzeichnis

      Generieren des privaten Schlüssels mit dem Wireguard Tool

      Erstellen des Öffentlichen Schlüssels, welcher aus dem privaten Schlüssel generiert wird

      Public Key anzeigen mit…

      Private Key anzeigen mit…
    • Konfiguration am Client

      Hier die Beispielkonfig gemäß Zeichnung, die auf dem Server natürlich vice versa anzupassen ist. Die Zeile „Endpoint“ im Bereich [Peer] ist am Server nicht erforderlich! Die beiden Zeilen in der Mitte (PostUp…) sorgen dafür, dass Anfragen des Client in das lokale Netzwerk geroutet werden, um so die „dahinter liegenden“ Systeme zu erreichen.
    • Lassen wir Wireguard automatisch starten…
  3. Wenn die Client Konfig fertig ist, Wireguard am Server auf identische Art und Weise bereitstellen und dann wäre das die Serverkonfig…
  4. Wenn beide Seiten fertig sind, der Server bspw. via DNAT veröffentlicht wurde, starten wir Wireguard auf beiden Seiten mit:

    Jetzt heißt es testen, also am Raspi Client bspw.
    Status der Verbindung anzeigen:

    Idealerweise sieht man (hier bspw. am Pi-Client) den Datenfluss sendend und empfangend…

    oder ein klassischer Ping auf die Gegenseite…

    Ist die Antwort positiv, steht zunächst der Tunnel zwischen den Peers, Step 1 war also erfolgreich…
  5. Möchte man jetzt bspw. von anderen Clients im Peer Netz 192.168.100.0/24 auf die Gegenseite zugreifen, muss dem Client noch die Route über den Wireguard Peer mitgeteilt werden. Dazu wird in meinem Beispiel auf der Fritzbox eine Statische Route eingerichtet:
    Heimnetz -> Netzwerk -> Netzwerkeinstellungen -> IP Routen
  6. Jetzt wieder testen, also dieses Mal von einem Client im Peer Netz, hinter der Fritzbox einen Ping auf 10.xx.xxx.xxx. absetzen… War das ebenfalls erfolgreich, kann jetzt aus dem Netz 192.168.100.0/24, auf alle Systeme im 10.0.0.0/8 Netz zugegriffen werden.

Ein Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.