Zielsetzung

Weil es über jeden Internetprovider der CGN nutzt, wie Deutsche Glasfaser, prinzipiell nicht funktionieren kann IPv4 Ports an der Fritzbox zu öffnen um Homeserver Webdienste aus dem Internet zu erreichen und sich der Bedarf mit einsatz von proxmox vervielfacht hat. Benötigen wir eine dauerhafte, kostengünstige Lösung.

Mit einem, für kleines Geld gemieteten Virtuelen Privaten Server (VPS) erschaffen wir unseren eigenen, Firewall geschützten Winguard VPN "Zugangspunkt" im öffentlichen Internet.

Unser Homeserver, der eine seine Dienste im öffentlichen Internet anbieten soll, wird beim Server Start eine sichere VPN / Wireguard Verbindung zu unsem Internet Server aufbauen und über diesen Tunnel seine Dienste an seiner spezifischen Subdomain, der zum Internetserver gehörenden Domain, anbieten.

Einsatzscenarion OWT, Minecraft Gameserver oder was eben geplant wird.

Vorbereitungen 

Internet Server

Im IONOS Kunden Panel die Domain aktivieren und Sub-Domains erstellen.

Die Domain und auch die Sub-Domains müssen auf die IP des Internet Servers verweisen. Dies ist zur Ersteinrichtung nicht der Fall. Wenn Du Deine neue Internetdomain im Browser öffnest, wird eine IONOS Standard Seite angezeigt, die nicht von Deinem IONOS Server kommt. Dies wird über den DNS Eintrag Record A als Standard für alle neuen Domains gesetzt.

Nun muss der Standard A Record (DNS Eintrag) für Deine Domain und die Sub-Domains deaktiviert werden und jeweils ein neuer A Record zur richtigen Internet Server IPv4 Adresse angelegt werden.

Internet Server Firewall Regeln

Die Provider Firewall hat nur wenige Ports geöffnet. Wir wollen die IP anpingen und Wireguart benötigt einen offenen, von uns definierten Kommunikationsport.

Hierzu erweitern wir die vorhandene Firewall Konfiguration um zwei neue Regeln.

  1. eingehend von allen IP - UDP- Port 51820  - für Wireguard Server listener
  2. eingehend von allen IP - ICMP - ermöglicht ping Antwort
FritzBox 7590 

Das Heimnetz hinter der FrittzBox hat einen privaten IP Adressbereich und die Heimserver eine IP Adresse aus diesem Heimnetz.

Mein Heimserver (Ubuntu Linux) hat die Adresse 192.178.168.98 .

Beide Server bekommen über die Wireguard Installation eine weitere virtuelle Netzwerkkarte mit je einer IP Adresse aus einem völlig anderen (privaten) IP Adressbereich, damit sie direkt (im VPN Tunnel) miteinander kommunizieren können.

Transfernetz IP
  • Internet Server = 172.31.0.1
  • Heimserver A   = 172.31.0.2
Einrichten

Einrichten einer Statischen Route zwischen Heimnetz IP Adressbereich und Transfernetz IP Adressbereich.

Öffne die FritzBox Konsole, -> Heimnetz -> Netzwerk

klicke auf Tab Netzwerkeinstellungen und scrolle runter, klicke unter Tabelle für statische Routen auf IPv4-Routen und dann auf Neue IPv4-Route:

  • Netzwerk: 172.31.0.1
  • Subnetzmaske: 255.255.255.0
  • Gateway: 192.168.178.98

Fertigstellen / speichern.

Imlementierung Wireguard 

Im folgenden wird den Internet Server zum Wireguard Server der Verbindungen von (konfigurierten) Wireguard Clients annehmen kann. Der Wireguard Client wird auf unserem Homeserver installiert. Dieser ist in der nachfolgenden Beschreibung also der Client. 

Schritt 1 für Server & Client

Dieser Schritt muss auf dem Internet Server und dem Heimserver ausgeführt werden:

apt update 

apt install wireguard

Editor öffnen

nano /etc/sysctl.conf

Entferne in Zeile "net.ipv4.ip_forward=1" die führenden Raute #

Speichern mit CTRL + O

Editor verlassen mit CTRL + X

sysctl -p 

Schlüssel generieren und schützen

Die umask wird auf 077 gesetzt, um alle anderen User außer root den Zugriff zu verweigern.

cd /etc/wireguard/
umask 077; wg genkey | tee privatekey | wg pubkey > publickey
Privaten Schlüssel anzeigen

cat privatekey

Den angezeigten Schlüssel kopieren (in Dein Notiz Dokument)

Öffentlichen Schlüssel anzeigen

cat publickey

Den angezeigten Schlüssel kopieren (in Dein Notiz Dokument)

chmod 600 /etc/wireguard/privatekey

Schritt 2 nur für Server

Dieser Schritt wird nur auf dem Internet Server durchgeführt.

In diesem Schritt wird die Wireguard Konfigurationsdatei auf dem Wireguard Server, unserem Internet Server, erstellt. 

Zunächst müssen wir den Systemlink zur Netzwerkkarte des Internetservers identifizieren. Mit folgenden Befehl erzeugen wird einen Output der uns weiterhilft:

ip a

Nachfolgend habe ich in der Ausgabe meine Internet Servers den wichtigen Teil markiert, damit Ihr das in der Ausgabe Eurers Servers nachvollziehen könnt:  

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:01:b4:3b:f0:8a brd ff:ff:ff:ff:ff:ff
    altname enp0s6
    inet 84.165.142.144/32 metric 100 scope global dynamic ens6
       valid_lft 406sec preferred_lft 406sec
    inet6 fe80::1:a4ff:fe3a:e08c/64 scope link
       valid_lft forever preferred_lft forever

Mit der gewonnenen Interface Information müssen wir die Zeilen PostUP und PostDown in der nachfolgenden Konfiguration an den rot markierten Stellen anpassen.

Anstelle eth02 könnte in Eurem System auch eth0 oder etwas völlig anderes stehen. 

Wireguard Konfigurationsdatei anlegen

nano /etc/wireguard/wg0.conf

Den folgenden Inhalt müsst Ihr an den farbigen Stellen für Euch anpassen:

[Interface] 
PrivateKey = privater-Schlüssel des Wireguard Servers (Internet Server) 
Address = 172.31.0.1/32
SaveConfig = true 
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth02 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth02 -j MASQUERADE
ListenPort = 51820

Speichern mit CTRL + O

Verlassen mit CTRL + X

 

Schritt 2 nur für Client

In diesem Schritt wird die Wireguard Konfigurationsdatei auf dem Wireguard Client, unserem Heimserver A, erstellt. Dieser Schritt wird nur auf dem Homeserver A durchgeführt.

nano /etc/wireguard/wg0.conf

[Interface] 
PrivateKey = Privater Schlüssel des Wireguard Clients (Heimserver)
Address = 172.31.0.2/32
DNS = 8.8.8.8

[Peer] 
PublicKey = Öffentlicher Schlüssel des Wireguard Servers (Internet Server) 
Endpoint = Internet Server IP oder (Sub-)Domain:51820 
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Speichern mit CTRL + O

Verlassen mit CTRL + X

Schritt 3 nur auf dem SERVER ausführen

wg set wg0 peer <öffentlicher Schlüssel des CLIENTEN> allowed-ips 172.31.0.2/32
 

Schritt 4 für Server & Client

Starten des VPN Netzes:

wg-quick up wg0

Nun können wir den Status der Verbindung anzeigen mit

wg

wg gibt den status der Verbindung aus.

Wenn keine Verbindung aufgebaut wurde, bleibt die Ausgabe leer. 

 

Schritt 5: Autostart Server und Client

Der VPN Tunnel soll automatisch mit dem System starten:

systemctl enable wg-quick@wg0
nach dem NEUSTART des Servers
systemctl status wg-quick@wg0

zeigt ob der service geladen wurde und wg wie oben beschrieben gibt den Status der Verbindung aus.

 

 

Inspiration:

https://forum.proxmox.com/threads/proxmox-als-homeserver-mit-ipv6-glasfaser-und-mehreren-vms-ports-und-reverse-proxy-m%C3%B6glich.105823/ 

https://ubuntu.com/server/docs/introduction-to-wireguard-vpn 

https://schroederdennis.de/tutorial-howto/wireguard-vpn-server-installieren-client-to-server/

https://gist.github.com/lanceliao/5d2977f417f34dda0e3d63ac7e217fd6#file-wg-client1-conf