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.
Pingback: Synology Remote Backup mit Raspberry Pi und Wireguard - kayomo GmbH
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
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