(32) Wireguard Reverse VPN Tunnel erstellen

Inhalt

Was wollen wir?

Zusätzlich zu dem bereits von mir erstellten WIKI, in dem wir einen IP4 zu IPv6 Tunnel erstellt haben, möchten wir eine Möglichkeit schaffen einen Tunnel über Wireguard zu realisieren.

Warum wollen wir das?

Der Tunnel mit dem Tool 6Tunnel erlaubt nur Verbindungen über TCP, ausserdem gibt es setups, wo der Benutzer keine feste IPv6 zu Hause bekommt. Dieses Szenario bietet also eine Weiterleitung von einem virtuellem Server im Internet, mit eigener IP4, zu seinem HomeLab Server zu Hause. Es können individuell nur die Ports frei gegeben werden, welche getunnelt werden sollen. Es wird aber keine Portfreigabe in der Firewall des eigenen Netzwerkes benötigt.

Und wie genau geht das?

Es gibt zahlreiche Möglichkeiten sich über Reverse VPN einen Zugang zu sich zu erstellen.

Diese Anleitung beschränkt sich auf dieses Szenario:

Eine VPS Server ist im Internet vorhanden. Ein vorhandener DNS Provider leitet die eigene DNS zu der IP des VPS Server weiter.

Ein Lokaler Linux Server mit Reverse Proxy Server ist für die interne Weiterleitung der Ports 80 & 443 vorhanden. 

Beide Server laufen mit Ubuntu (debian), für andere Distributionen sind evtl. andere Befehle notwendig

Dieses Setup baut nur EINEN Tunnel auf!

Es wird also ein dauerhafter Tunnel der IP4 vom „VPS Server“ zu seinem lokalem „Work Server“ mit zb NGINX aufgebaut, der Reverse Proxy wandelt die ankommenden Anfragen um, erstellt evtl. ein lets encrypt Zertifikat und gibt die Anfragen an interne Server weiter.

Um sich einen virtuellen Server im Internet mit eigener IP einzurichten, schaut bitte auch im Wiki #Sonstiges | Externer Zugriff über IPv6 aufs Netzwerk oder auch in meiner neuen Anleitung zu einem kostenlosen Oracle Cloud TIER  nach. Dieser virtuelle Server ist natürlich Voraussetzung für die Einrichtung. Weiterhin benötigt Ihr einen lokalen Client, zb. einen Proxmox Server mit einem Linux, einem anderen Linux Server wie einem Raspberry Pi oder sonstigen Server.

Zur Erklärung der Angaben hier, schreibe ich immer dabei ob die Eingaben auf dem „VPS Server“, dem „Local Work Server“ oder beiden „VPS Server & Local Work Server“ durchgeführt werden müssen!

VPS Server & Local Work Server:

sudo apt update -y && sudo apt upgrade -y && sudo shutdown -r now
sudo apt install software-properties-common unzip -y
sudo apt install netfilter-persistent -y
sudo apt install ufw -y
sudo apt install wireguard -y

Erklärung: Der server wird upgedated und neu gestartet. Dann werden einige Software Pakete installiert.

(umask 077 && printf "[Interface]\nPrivateKey= " | sudo tee /etc/wireguard/wg0.conf > /dev/null)

wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey

Erklärung: Die Befehle speichern den Private Key in die Datei /etc/wireguard/wg0.conf und gibt den Public Key aus -> Diese solltet Ihr Euch zu beiden System notieren.

VPS Server:

sudo nano /etc/wireguard/wg0.conf

Folgende Daten eingeben und Parameter anpassen, Keys und einen geöffneten Port 55107

[Interface]
PrivateKey = <Private key des VPS Server hier eingeben>
ListenPort = 55107
Address = 192.168.4.1/32
[Peer]
PublicKey = <public key vom Local Work Server hier>
AllowedIPs = 192.168.4.2/32

Local Work Server:

sudo nano /etc/wireguard/wg0.conf

Folgende Daten eingeben und Parameter anpassen, Keys und IP des VPS Servers, wir nutzen den Port 55107.

[Interface]
PrivateKey = <private key des Local Work Server hier eingeben>
Address = 192.168.4.2/32
[Peer]
PublicKey = <public key vom VPS Server hier>
AllowedIPs = 192.168.4.1/32
Endpoint = <öffentliche ipv4 adresse des VPS Server hier>:55107
PersistentKeepalive = 25

VPS Server 

Eine evtl. vorhandene Firewall auf dem VPS Server für den Port 55107, 80 und 443 öffnen, dann:

sudo nano /etc/sysctl.conf

Dort unten anhängen:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Mit diesem Befehl die Weiterleitung aktivieren:

sudo sysctl -p

VPS Server & Local Work Server:

sudo systemctl start wg-quick@wg0
sudo systemctl enable wg-quick@wg0

VPS Server 

Achtung: Ersetze eth0 mit dem Namen deiner Netzwerkarte. Finde diese mit folgendem Befehle heraus:

ip -c a

Gebe dann die folgenden (korrigierten) Befehle ein:

sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -i eth0 -o wg0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wg0 -p tcp --syn --dport 443 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i wg0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i wg0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.4.2
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.4.2
sudo iptables -t nat -A POSTROUTING -o wg0 -p tcp --dport 80 -d 192.168.4.2 -j SNAT --to-source 192.168.4.1
sudo iptables -t nat -A POSTROUTING -o wg0 -p tcp --dport 443 -d 192.168.4.2 -j SNAT --to-source 192.168.4.1

Hier wird das Routing eingestellt, evtl. angepasste IP Adressen aus der Konfiguration hier auch anpassen. Falls Ports hinzukommen sollen, muss das auch mit diesen Befehlen weiter geleitet werden.

Diese Regeln können mit den folgenden Befehlen dauerhaft gespeichert werden:

sudo apt install netfilter-persistent -y
sudo netfilter-persistent save
sudo systemctl enable netfilter-persistent
sudo apt install iptables-persistent

Nach dem letztem Befehl zwei mal „Yes“ mit der Eingabetaste wählen.

Firewall aktivieren mit:

sudo ufw allow 22  
sudo ufw allow 55107
sudo ufw enable
sudo ufw status

ACHTUNG: der Befehl sudo allow 22 gibt den Port 22 frei um per ssh noch auf den Server zu kommen, falls man das nicht macht, sperrt man sich aus. Hier evtl. auch weitere Ports mit allow öffnen, welche man benötigt.

JETZT SOLLTE BEREITS DIE VERBINDUNG BESTEHEN!!

Falls noch nicht geschehen installiert auf dem Local Work Server zb. docker, docker.compose, Portainer und Nginx reverse Proxy. Wenn Ihr nun eine öffentliche DNS auf Euren VPS Server umleitet kann dann der NGINX direkt auf Port 80 & 443 die Anfragen aus dem Internet intern weiterleiten.

Zusatz zu Firewall:

In diesem Szenario ist im eigenem Netzwerk KEINE Freigabe in der Firewall nötig, der Work Server baut immer aktiv ein Verbindung zum VPS Server auf. Im VPS Server müssen die PORTS: 80 (TCP), 443 (TCP), 55107 (UDP) und evtl. 22 für den SSH Zugang frei gegeben sein (Wichtig: Bei IONOS muss dies in der Server Verwaltung eingestellt werden)

Weitere Verbindungen:

Man kann auch weitere Server mit dem Wireguard VPS Server verbinden, aber nur wenn sie andere Ports benutzen. Dies erreicht man einfach dadurch, dass man die Anleitung von oben erneut ausführt, aber diesmal anstatt den Namen wg0.conf einfach wg1.conf benutzt und dieses an allen entsprechenden Stellen austauscht.

Probleme & Lösungen:

Die Verbindung ist äusserst stabil und performant.

Ich hatte aber am Anfang folgendes Problem, die linux Firewall UFW wird eigentlich mit sudo UFW enable dauerhaft gestartet, auch nach einem Neustart muss die Firewall automatisch aktiviert sein. Aus irgendeinem Grunde macht sie das bei mir nicht richtig, also lasse ich einfach unter „sudo crontab -e“ die Firewall nach einem Neustart wieder aktivieren mit „@reboot sudo UFW enable“

Short-Url: https://url.andrejansen.de/wireguard

 

Dieser Beitrag wurde unter HomeLab, Proxmox, Unifi, Weblinks abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.