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.
- eingehend von allen IP - UDP- Port 51820 - für Wireguard Server listener
- 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://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