WireGuard als internes Netzwerk
Wer VPN hört, denkt meistens an Dienste von verschiedenen Anbietern, die deine Identität im WWW schützen wollen, Geoblocking umgehen oder dich vor Strafverfolgung sichern.
Aber es geht auch ganz anders: Wer einen Server in einem anderen Standort hat; oder seinen Heimserver von unterwegs aufrufen will, der kann auch einen VPN nutzen.
Eine beliebte Software dafür ist WireGuard. WireGuard ist nicht nur eines der sichersten VPN-Protokolle, vielmehr ermöglicht es eine Kommunikation ohne viel Datennutzung.
WireGuard stellt erst eine Verbindung her, wenn sie benötigt wird. Sollte eine dauerhafte Verbindung benötigt werden, kann auch eine „Persistent Keepalive“-Option gesetzt werden.
WireGuard ermöglicht es auch, nur bestimmte IP-Adressen Bereiche an den VPN-Server zu senden. So kann das normale WWW über die Internetleitung ohne VPN erreicht werden, aber gleichzeitig das intranet des Servers über den VPN, ohne umzuschalten.
Einrichtung des WireGuard Servers
Auf Linux kann der WireGuard Server einfach über apt-get install wireguard installiert werden.
WireGuard ist gleichzeitig ein Client und Server; eine sogenannte Peer-To-Peer verbindung.
Somit ist eigentlich jedes Gerät ein Client, wobei einer wirklich einen Endpunkt hat und der andere diesen als Host angibt.
WireGuard verwendet das sogenannte „Public Key Cryptography for Initial Authentication“ (PKCI) als Authentifizierungsmethode. Bei der Einrichtung von WireGuard werden Schlüsselpaare erstellt: ein privater Schlüssel, der geheim gehalten wird, und ein öffentlicher Schlüssel, der an die Gegenstelle weitergegeben wird. Der öffentliche Schlüssel wird verwendet, um die Authentizität der Verbindung zu überprüfen und den Schlüsselaustausch zu sichern.
Bevor wir nun die Konfigurationsdatei erstellen können, brauchen wir erst ein sogenanntes Schlüsselpaar, wie oben erwähnt.
Das generieren wir mittels
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
Danach können wir die Konfiguration mittels
‚nano /etc/wireguard/wg0.conf‘ anlegen.
## Set Up WireGuard VPN on Ubuntu By Editing/Creating wg0.conf File ##
[Interface]
## VPN Server intranet Bereich ##
Address = 10.1.0.1/24
## WireGuard Server Port ##
ListenPort = 51820
## VPN Private Key ##
PrivateKey = ******* # hier den private-key aus /etc/wireguard/privatekey einfügen
PostUp = iptables -t nat -I POSTROUTING 1 -s 10.1.0.0/24 -o eth0 -j MASQUERADE; iptables -I INPUT 1 -i wg0 -j ACCEPT; iptables -I FORWARD 1 -i eth0 -o wg0 -j ACCEPT;
iptables -I FORWARD 1 -i wg0 -o eth0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -s 10.1.0.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -i wg0 -j ACCEPT; iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; ipt
ables -D FORWARD -i wg0 -o eth0 -j ACCEPT
Der intrantet ist hier 10.1.0.1/24. Sprich von 10.1.0.1 bis 10.1.0.254. – Wer mag kann das auch für sich selbst anpassen, wobei es aber auch in PostUp und PostDown angepasst werden muss.
PostUP und PostDown setzen hier die Firewall Regeln für die Packet-Forwarding zum eth0-Interface und zurück.
Der Server ist nun „eingerichtet“. Um nun den Client (Peer) hinzuzufügen, müssen wir WireGuard auch auf einem anderen Gerät installieren.
Dort ist die Konfiguration dann ähnlich aufgebaut. – Wir generieren auch erstmal ein Schlüsselpaar, mit dem Befehl von oben.
Danach lesen wir den publickey des neu generierten Clients aus (z.B. mit cat /etc/wireguard/publickey) und geben ihn bei bei der wg0.conf beim Server wie folgt ein:
# an die Datei anfügen
[Peer]
PublicKey = **** # hier Public-Key vom Client einfügen
AllowedIPs = 10.1.0.200/32
Die AllowedIPs sind die IP-Adressen, welche für den Client gelten. Sprich die einzelne IP Zuweisung für den Client.
Die /32 Subnetzmaske gibt hier 1 an, sprich nur diese eine Adresse.
Wenn der Peer hinzugefügt ist und die Datei gespeichert, können wir die WireGuard Konfiguration auf dem Server starten.
Das geht sehr einfach mittels wg-quick up wg0.
Einrichtung des WireGuard-Clients
Dieser Teil wird sehr klein, da die Hälfte bereits bei der Einrichtung des Wireguard-Servers dabei war.
Wir gehen nun zum Client und erstellen hier auch eine wg0.conf unter /etc/wireguard/.
Der Inhalt ist etwas kürzer als die von dem Server, undzwar wie folgt:
[Interface]
Address = 10.1.0.200/32
PrivateKey = ***** # Private key aus /etc/wireguard/privatekey vom client einfügen
[Peer]
AllowedIPs = 10.1.0.1/24
Endpoint = ip-von-wireguard-server:51820
PublicKey = **** # Public Key vom Server einfügen (Server: /etc/wireguard/publickey)
Hier muss der Private-Key des Clients eingefügt werden, sowie der PublicKey vom Server zu dem wir verbinden wollen.
Danach können wir mittels wg-quick up wg0 den Wireguard-Client starten.
Normalerweise sollten die beiden direkt verbinden. Testen lässt sich das mit einem einfachem Ping.
z.B. von Server zu Client ping 10.1.0.200 oder vom Client zum Server ping 10.1.0.1.
Der Ping sollte nun ankommen; eine Übersicht über die Tunnel lässt sich mittels wg-show einsehen.
Durch AllowedIPs in der Client-Konfiguration setzen wir, dass nur der Bereich 10.1.0.1 bis 10.1.0.255 an den WireGuard Tunnel geleitet wird. Alles andere folgt über die normale Internetleitung.
Nun kann man alle Adressen im Bereich 10.1.0.1/24 im Tunnel aufrufen.
Natürlich lässt sich hier bei der Heimserver nutzung auch 192.168.1.0/24 nutzen, dann muss aber der gesamte IP-Bereich des VPNs geändert werden.
Dort kann auch die selbe IP vom eth0 genutzt werden. (z.B. 192.168.1.5).
Vielen Dank fürs Lesen!