#Sonstiges | Wireguard Reverse VPN Tunnel erstellen

  • 1 Was wollen wir?

    Ersatzweise, zu dem bereits von mir erstellten WIKI #SONSTIGES | EXTERNER ZUGRIFF ÜBER IPV6 AUFS NETZWERK, 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.

    2 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 oben erwähntem anderen Wiki, dort wird der Zugang über einen IONOS Server beschrieben oder auch in meiner 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!

    2.1 VPS Server & Local Work Server:

    Code
    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.

    Code
    (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 -> Dieser solltet Ihr Euch zu beiden System notieren.

    2.2 VPS Server:

    Code
    sudo nano /etc/wireguard/wg0.conf

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

    Code
    [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

    2.3 Local Work Server:

    Code
    sudo nano /etc/wireguard/wg0.conf

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

    Code
    [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

    2.4 VPS Server

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

    Code
    sudo nano /etc/sysctl.conf

    Dort unten anhängen:

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

    Mit diesem Befehl die Weiterleitung aktivieren:


    Code
    sudo sysctl -p

    2.5 VPS Server & Local Work Server:

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

    2.6 VPS Server

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

    Code
    ip -c a

    Gebe dann die folgenden (korrigierten) Befehle ein:


    Code
    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:


    Code
    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:

    Code
    sudo ufw allow 22   
    sudo ufw allow 55107
    sudo ufw allow 80
    sudo ufw allow 443
    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.

    2.7 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)


    2.8 Weitere Verbindungen:

    Man kann auch weitere Server über einen Tunnel mit dem Wireguard VPS Server verbinden, aber nur mit anderen Ports. 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.

    2.9 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 werden. Aus irgendeinem Grunde hat sie das bei mir nicht richtig gemacht. Das Problem habe ich gelöst in dem ich einfach unter "sudo crontab -e" die Firewall nach einem Neustart wieder aktivieren mit "@reboot sudo UFW enable" -> Das muss man aber nur machen wenn die Firewall aus geht nach einem Neustart.


    Disclaimer:

    Alle Anleitungen/Tutorials sind nach bestem Wissen und Gewissen verfasst, gehen immer von den definierten Software/Firmware-Versionen aus und sind auf das englische GUI ausgelegt.

    Es gibt keine Garantien auf Erfolg. Im Falle eines Misserfolges hilft aber sicherlich die Community hier immer weiter.

    Keiner der Autoren oder der Betreiber des Forums ist für die aus der Nutzung resultierenden Probleme/Herausforderungen verantwortlich.

    Jegliche hier beschriebenen Schritte erfolgen ausnahmslos in eigener Verantwortung des Durchführenden. Eltern haften für ihre Kinder.


Kommentare 16

  • Hallo zusammen und Danke für die Anleitung! Sollte es nicht mit der aktuellen Version ähnlich, also ohne reverse Proxy mit den "Hausmitteln" der UDM möglich sein eine feste IP über die VPS weiterzuleiten? Tunnel funktioniert bei mir aber ich scheitere noch am routing...

    • Hi,

      das funktioniert wenn du eine feste IP hast womit du dich von außen über wireguard mit deinem zu Hause verknüpfen kannst. Die zb UDM-pro funktioniert aber nicht als wireguard Client, der umgekehrte Weg über einen Server mit fester ip geht also nicht mit wireguard

      P.S: dieses Setup wird meist auch dann benutzt wenn man sowieso schon einen festen Home Server zu Hause laufen hat auf den man zugreifen möchte, mit einem extra Linux Server ist man auch viel flexibler, man kann sich ganze Mesh Systeme Tunneln und verknüpfen. Man kann sich auch mit zb firezone einen eigenen zugangsserver mit grafischer oberfläche einrichten um unterschiedliche Geräte unterschiedliche Rechte in das Netz zu geben.

      Das hört sich zwar immer gut an mit einer Einwahl im ganzen Netz zu stehen, aber die Einstellungen sind dann doch sehr gering möglich.

    • Hallo uboot21!

      Bei mir funktioniert der Tunnel mit der UDM-pro als WG Client. Im Frontend befindet sich seit einigen Versionen auch die Möglichkeit die UDM als Client einzurichten... Ansonsten überlege ich noch einmal mit einem RASPI als "Entry Server"...

    • Hallo, das wäre mir neu,

      man kann als VPN Client das OpenVPN einrichten und als Site-To-Site VPN kann man IPsec und OpenVPN einrichten.

      Die Version auf der UDMPro hab ich auf 3.1.16 und das Network auf 7.5.187 -> Wo soll denn die Einstellung möglich sein?

    • Habe OS 3.2.5 und Network 8.0.2.


      Dort kann es im Frontend eingerichtet werden:


    • Alles klar, danke für die info, early access beta versionen kommen mir aber nicht ins Netzwerk, aber ich kann warten.

      Ich muss schauen ob ich solch eine Funktion in mein Mesh System mit 5 externen Server einbinden kann.

  • Guten tag nochmal,

    wie schaltet man damit udp ports frei?

    wenn ich statt tcp udp eingebe krieg ich nur den fehler unkwon option --syn

    • Hi,

      Ersetze das tcp durch udp -> das —syn muss weg

  • Hallo uboot21,

    Vielen dank für diese gute Anleitung, nur bin ich absolut nicht gut in sowas und versteh nicht was ich bei Punkt 2.6 für die eth0 hier einsetzen soll.

    Viele Grüße

    • Unter Netzwerk Karte 2 steht bei Dir eth0 -> also brauchst du nichts ändern in den Einstellungen (Die meisten Netzwerkkarten heissen eth0, aber es gibt immer ausnahmen, insbesondere bei WLAN heissen diese auf jeden Fall anders)

    • Achso super, vielen Dank!

  • Hallo uboot21,


    Erstmal vielen Dank für deine Anleitung, danach habe ich gesucht. Ich bin seit kurzen an einem Glasfaser Anschluss angeschlossen und habe damit auch meine öffentliche IPv4 Adresse verloren, die ich für meinen VPN-Server genutzt habe.

    Mein erster Ansatz war, dass ganze dann einfach über IPv6 laufen zu lassen, jedoch bin ich an der Firewall der USG gescheitert (mit deiner Umsetzung sollte das ja kein Problem darstellen).


    Es hat alles soweit funktioniert, außer, dass der Tunnel nicht steht und ich nicht weiß warum. Hier einmal meine Frage: Was haben die Adresse 192.168.4.1/32 und 192.168.4.2/32 zu bedeuten? Muss ich die auf meine Netzwerk anpassen? Gibt es vielleicht auch einen Befehl, der den Status über den Tunnel ausgibt?


    Viele Grüße

    • Hallo,


      also die Adresse 192.168.4.1/32 und 192.168.4.2/32 macht folgendes:

      - Sie ist nur für den Tunnel zuständig, sie muss anders sein als das Start Netzwerk und anders sein als das Zielnetzwerk, kann aber JEDE andere Zusammensetzung haben, insbesondere wenn man das Netz 192.168.4.0 zu Hause hat, sollte man hier wechseln

      - Das Subnet /32 begrenzt das Netzwerk auf Wirklich nur diese 2 Karten, keine weiteren Rechner dürfen hier eintreten (das habe ich oben mal beschrieben, es soll ja nur ein Tunnel sein zwischen 2 PC´s)


      Was heisst denn das alles funktioniert ausser der Tunnel -> weil das ist ja alles was stehen sollte

      Den Status des Tunnels bekommst du mit "sudo wg"


      Man kann vieles einfach "vergessen", gerade bei den ganzen Firewalls auf dem VPS Server. Hier prüfen ob die Firewall bei zb ionos geöffnet wurde, auch ob die linux firewall geöffnet wurde für alle ports mit "sudo ufw status"


      Mit "sudo iptables -L -t nat -v" prüfst du ob die Ports korrekt weiter geleitet werden


      auch mal probieren ob vom WorkServer ein "sudo ping 192.168.4.1" durch zum VPS geht.


      P.S: Falls du Hilfe benötigst erstelle eine Forenbeitrag, das ist besser als hier unter dem WIKI als Kommentare

    • Erstmal danke für deine schnelle Antwort!

      Leider bekomme ich den Tunnel dennoch nicht zum laufen... Ich habe jetzt ein Forenbeitrag erstellt.

  • Vielen Dank für diese Infos....!!!