HomelabIT Praxis

Wireguard unter Proxmox installieren

In diesem Artikel zeigen wir, wie einfach sich Wireguard unter Proxmox installieren lässt, um ein virtuelles privates Netzwerk (VPN) im Heimnetz zu realisieren. Wireguard zeichnet sich neben der direkten Integration in den Linux Kernel ab Version 5.6 durch einfache Einrichtung, Bedienung und eine hohe Verarbeitungsgeschwindigkeit aus.


Linux Container unter Proxmox einrichten

Erstellen Sie unter Proxmox einen neuen Linux Container mit einem Ubuntu Template (hier wurde die Version 20.10 verwendet). Für den Heimgebrauch ist folgende Konfiguration völlig ausreichend. Je nach Anforderungen kann die Anzahl der Kerne und des Speichers natürlich nach oben angepasst werden.

  • Unpreviligierter Container (ja)
  • 1 Kern
  • 512 MB RAM
  • 512 MB Swap
  • 8 GB Festplatte

Schließen Sie die Einrichtung ab und starten Sie den Container noch nicht.


Einstellungen auf dem Proxmox Host

Auf dem Proxmox Host sind einige Einstellungen für die Verwendung des tun Devices vorzunehmen.

Öffnen Sie mit einem Texteditor die Konfigurationsdatei des zuvor erstellten Containers:

nano /etc/pve/lxc/CONTAINER_NUMMER.conf

Ergänzen Sie dort die letzten beiden Zeilen:

arch: amd64
cores: 1
hostname: WireGuard
memory: 512
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=1E:CD:0E:16:40:E8,ip=dhcp,ip6=auto,type=veth
ostype: ubuntu
rootfs: local-lvm:vm-117-disk-0,size=8G
swap: 512
unprivileged: 1
lxc.cgroup.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net dev/net none bind,create=dir

Speichern Sie die Konfigurationsdatei ab.

Anschließend werden die Zugriffsrechte auf das tun Device angepasst:

chown 100000:100000 /dev/net/tun

Wireguard im LXC installieren

Führen Sie zuerst eine Aktualisierung des Systems durch:

apt update
apt upgrade

Die Installation von Wireguard selbst ist kinderleicht, ein Einzeiler:

wget git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

Das Installationsskript fragt anschließend folgende Informationen ab:

Welcome to this WireGuard road warrior installer!

This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [xxx.xxx.xxx.xxx.]: xxxxxxxxx

What port should WireGuard listen to?
Port [51820]: 

Enter a name for the first client:
Name [client]: Testclient

Select a DNS server for the client:
   1) Current system resolvers
   2) Google
   3) 1.1.1.1
   4) OpenDNS
   5) Quad9
   6) AdGuard
DNS server [1]: 1

BoringTun will be installed to set up WireGuard in the system.
Should automatic updates be enabled for it? [Y/n]:  

WireGuard installation is ready to begin.
Press any key to continue...

Hinweis: Wenn Sie keine statische, sondern eine dynamische IP-Adresse besitzen, dann müssen Sie einen DynDNS-Service verwenden, um von außen auf das Heimnetz zugreifen zu können. Geben Sie bei hostname Ihre DynDNS-Adresse an und leiten Sie den Port 51820 (UDP) an Ihrem Router auf den Wireguard-Server weiter.

Editieren Sie anschließend die Konfigurationsdatei wg0.conf

nano /etc/wireguard/wg0.conf

und fügen Sie unter interfaces folgende Einträge hinzu:

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

Die Einrichtung von Wireguard unter Proxmox ist damit abgeschlossen.


Wireguard Service einrichten und prüfen

Ob der Wireguard Service erfolgreich läuft, prüfen Sie mit

root@WireGuard:~# systemctl status wg-quick@wg0
* wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/wg-quick@wg0.service.d
             `-boringtun.conf
     Active: active (exited) since Wed 2021-12-08 03:58:02 UTC; 9h ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 2880 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 2880 (code=exited, status=0/SUCCESS)
        CPU: 41ms

Dec 08 03:58:02 WireGuard systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Dec 08 03:58:02 WireGuard wg-quick[2880]: [#] ip link add wg0 type wireguard
Dec 08 03:58:02 WireGuard wg-quick[2880]: [#] wg setconf wg0 /dev/fd/63
Dec 08 03:58:02 WireGuard wg-quick[2880]: [#] ip -4 address add 10.7.0.1/24 dev wg0
Dec 08 03:58:02 WireGuard wg-quick[2880]: [#] ip -6 address add fddd:2c4:2c4:2c4::1/64 dev wg0
Dec 08 03:58:02 WireGuard wg-quick[2880]: [#] ip link set mtu 1420 up dev wg0
Dec 08 03:58:02 WireGuard wg-quick[2880]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Dec 08 03:58:02 WireGuard systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Läuft der Wireguard Service noch nicht aktivieren und starten Sie diesen mit den folgenden Befehlen:

systemctl enable wg-quick@wg0.service
systemctl daemon-reload
systemctl start wg-quick@wg0

Managen von Clients

Ein minimalistisches Verwaltungstool wird bei Wireguard gleich mitgeliefert, nämlich das zuvor heruntergeladene Installationsskript.

Rufen Sie das Script wie folgt auf:

bash wireguard-install.sh

Es erscheint folgendes Menüauswahl:

WireGuard is already installed.

Select an option:
   1) Add a new client
   2) Remove an existing client
   3) Remove WireGuard
   4) Exit
Option: 

Wählen Sie „1“ aus, um einen neuen Client hinzuzufügen. Vergeben Sie einen Namen und wählen Sie einen DNS-Resolver aus:

Provide a name for the client:
Name: Testclient

Select a DNS server for the client:
   1) Current system resolvers
   2) Google
   3) 1.1.1.1
   4) OpenDNS
   5) Quad9
   6) AdGuard
DNS server [1]: 1

Zusätzlich sehen Sie einen QR-Code, den Sie abfotografieren können. Zusätzlich wurde eine Konfigurationsdatei erstellt, die Sie auf beliebigem Weg verteilen können:

Testclient added. Configuration available in: /root/Testclient.conf

Der Inhalt der Konfigurationsdatei sieht wie folgt aus (Beispiel):

[Interface]
Address = 10.7.0.8/24, fddd:2c4:2c4:2c4::8/64
DNS = 192.168.178.1
PrivateKey = +Hg+pbxtSgLLwhHB32HDHTEHbGEi1yJhzZUj7+aJ1M=

[Peer]
PublicKey = MNW4DSFDmvQHSwY7618AsBZBxe4MJGgvojJ9B9IkU=
PresharedKey = ey1u3p3ELw/7tjANZHQnianLxV59+q+vaMyiuH24Epw=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = xxxxxxxxxx.de:51820
PersistentKeepalive = 25

Rufen Sie das Script erneut auf, wenn Sie weitere Clients hinzufügen oder einen Client entfernen möchten.


Herstellen einer Wireguard VPN-Verbindung

Es gibt Wireguard-Clients für sämtliche Betriebssysteme und Plattformen. Laden Sie sich den entsprechenden Client herunter, importieren Sie eine zuvor erstellte Konfigurationsdatei und aktivieren Sie die VPN-Verbindung.

Vorhandene Peers und deren Verbindungsstatus können Sie sich auf dem Server und den Clients mit folgendem Befehl anzeigen lassen:

wg show

Aktualisierung / Umzug Server – Konfigurationen

Für den Fall, dass die Notwendigkeit besteht, den Server neu aufzusetzen oder umzuziehen, ist die Sicherung und Übernahme der Konfigrationen ganz einfach möglich. Sichern Sie einfach die Datei

/etc/wireguard/wg0.conf

In dieser sind alle relevanten Konfigurationen enthalten. Spielen Sie diese Datei auf dem neuen Server einfach zurück und starten Sie ggf. den WireGuard Dienst neu.


Fazit

Wireguard unter Proxmox installieren ist sehr einfach umzusetzen und hier seit mehreren Monaten sehr stabil im Einsatz.

Durch die Einrichtung eines eigenen VPNs lassen sich auch weitere Services sicher einbinden, wie wir hier am Beispiel eines Remote Backups zeigen.

3 Gedanken zu „Wireguard unter Proxmox installieren

  • Pingback: Synology Remote Backup mit Raspberry Pi und Wireguard - kayomo GmbH

  • Roman R

    First –> thanks a lot for the instructions –> here are some addons =) maybe it helps someone

    For this to work don’t forget to put the right ip-forwarding rules. i was spending hours until i got it. The problem is also my Proxmox VE really needs a reboot to apply those settings. It doesn’t work when you only „systemctl restart networking“ and restart the pve-firewall… the only thing which worked was the reboot =)
    And i also only did it with a real virtual machine. With the LXC container it didn’t work for me.
    So i used ubuntu-server 24…. for installing the wireguard

    here the /etc/network/interfaces of my pve
    auto lo
    iface lo inet loopback

    iface enp0s31f6 inet manual

    auto vmbr0
    iface vmbr0 inet static
    address xx.xx.xx.xx/26 ## external IP address of the hoste
    gateway xx.xx.xx.xx ## gateway of the host
    bridge-ports enp0s31f6
    bridge-stp off
    bridge-fd 0

    auto vmbr1
    iface vmbr1 inet static
    address yy.yy.yy.254/24 ### internal ip address of the yy.yy.yy.0/24 network for the vm’s
    bridge-ports none
    bridge-stp off
    bridge-fd 0

    post-up echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up iptables -t nat -A POSTROUTING -s ‚yy.yy.yy.0/24‘ -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s ‚1yy.yy.yy.0/24‘ -o vmbr0 -j MASQUERADE

    post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT
    post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT

    post-up iptables -t nat -A PREROUTING -i vmbr0 -p udp –dport 51820 -j DNAT –to-destination yy.yy.yy.1:51820 #### this is the ip address of the virtual machine with wireguard installed
    post-down iptables -t nat -D PREROUTING -i vmbr0 -p udp –dport 51820 -j DNAT –to-destination yy.yy.yy.1:51820

    Antwort
    • Hello Roman,

      unfortunately I am not able to recreate this configuration in order to test it.

      So thank you and I hope that your instructions might help someone.

      Best regards
      Kay

      Antwort

Schreibe einen Kommentar

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