Ein VPN (virtual private network) dient dazu, sich von auswärts auf sichere Weise ins eigene Netwerk einzubuchen. Dazu benötigt man einen Computer im Netzwerk, der als Brücke fungiert, und Software, die den gesamten Datenverkehr verschlüsselt und die Zugriffsberechtigungen ünerprüft.
Viele Router bieten bereits die Möglichkeit, als VPN-Brücke zu dienen. Wenn das für Ihre Zwecke genügt, verwenden Sie das. Wenn nicht, möchten Sie vielleicht weiter lesen.
Hier zeige ich kurz die Installation von Wireguard, einem modernen und doch recht einfachen VPN-System. Sie können die VPN-Brücke im LAN auf einem separaten Computer installieren (z.B. einem Raspberry Pi). Clients gibt es für “fast alles”: Windows, Linux, Mac, Android, iOS).
Grundsätzlich
Eine Wireguard-Verbindung ist grundsätzlich eine Vrebindung zwischen “Peers”, also gleichberechtigten Partnern. Es gibt keine strikte Rollenverteilung, daher ist die Konfiguration auf Server und clients jeweils sehr ähnlich: Jeder Peer hat einen privaten Schlüssel, den nur er selber kennt, und einen öffentlichen Schlüssel, der zu diesem privaten Schlüssel passt, und den jeder kennen darf. (Das Prinzip der asymmetrischen Verschlüsselung habe ich früher) ausgeführt). Die Konfiguration des Peers, der als Server dienen soll, unterscheidet sich nur darin, dass zusätzlich eine Netzwerkbrücke eingerichtet werden muss, die den verbindenden Peers Adressen aus dem lokalen Netzwerk zuweist.
Damit ein wireguard client Verbindung zu einem anderne aufnehmen kann, benötigt er
- dessen IP
- dessen öffentlichen Schlüssel
und: Er muss diesem bekannt sein. Also sein eigener öffentlicher Schlüssel muss beim Peer eingetragen sein.
Installation und Einrichtung
- Debian-Linux und Derivate:
sudo apt install wireguard. - Windows: Wireguard aus dem App store.
- Android: Wireguard aus dem Play Store.
Server
Ich zeige im Folgenden das Vorgehen für Ubuntu Linux. Andere Systeme funktionieren ähnlich
sudo -sodersu, da für alle folgenden Schritte Administrator-Rechte nötig sindwg genkey >server.key- Privaten Schlüssel erstellen (Der Dateiname ist egal)wg pubkey <server.key >server.pubPassenden öffentlichen Schlüssel erstellen.
Dann /etc/wireguard/wg0.conf einrichten:
[Interface]
PrivateKey = Inhalt von server.key, z.B. UDqRf6+UaLmlcacePjIGs=
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE
Client (für jeden client separat)
sudo -swg genkey >client.keywg genkey <client.key >client.pub
Dann auch hier eine Konfiguration in /etc/wireguard erstellen:
sudo nano /etc/wireguard/myvpn.conf
[Interface]
PrivateKey = Inhalt von client.key GFY+esEyMOaiUQxnUeE20=
Address = 10.0.0.3/24
DNS = 192.168.17.1 # Oder ein anderer DNS-Server, z.B. 1.1.1.1 oder die IP deines Routers (z.B. 192.168.1.1)
# (eventuell) PostUp = resolvectl dns pinas 192.168.1.17 && resolvectl domain pinas "~." lan
[Peer]
PublicKey = Inhalt von server.pub SkavMdbXTZ4uG+SDf=
Endpoint = meine.oeffentliche.ip:51820
AllowedIPs = 192.168.17.0/24, 0.0.0.0/0 # Leitet den gesamten Traffic über das VPN
PersistentKeepalive = 25
Clients auf dem Server bekannt machen
Für jeden client in /etc/wireguard/wg0.conf einen Eintrag anhängen:
... Anfang von wg0.conf s. oben...
[Peer] # Für jeden client [Peer], keine eigenen Namen!
PublicKey = client.pub des jeweiligen Clients 0j4y0cA0Y3qPsBg=
AllowedIPs = 10.0.0.2/32 # Für jeden Client eine eigene Adresse aus dem eingestellten Adressbereich vergeben!
Wireguard aktivieren:
Auf dem Server:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
(So wird der Wireguard Dienst bei Neustart des Servers automatisch gestartet)
Mit dem Client Verbindung herstellen:
sudo wg-quick up myvpn
Verbindung beenden:
sudo wg-quick down myvpn
Mobile Geräte
Auf mobilen Geräten ist das hier gezeigte Vorgehen mit Erstllen eines Schlüssels auf dem Client via Kommandozeile nicht praktikabel.
Man kann aber natürlich auch die client-Schlüssel auf dem Server erzeugen.
sudo -s
cd /etc/wireguard
mkdir meinhandy
wg genkey >meinhandy/client.key
wg genkey <meinhandy/client.key >meinhandy/client.pub
Dann in /etc/wireguard/wg0.conf einen [Peer]- Abschnitt mit dem Inhalt von meinhandy/client.pub erstellen, und meinhandy/client.key aufs Handy übertragen und in die wireguard-App eintragen.
Dafür gibt es eine weitere Vereinfachung:
Auf dem Server:
Die ganze myvpn.conf wie oben gezeigt mitsamt dem eben erstellten privaten Schlüssel in meinhandy erstellen.
sudo apt install qrencode
qrencode -t ansiutf8 < meinhandy/myvpn.conf
Es wird ein QR-Code angezeigt, den man mit der Wireguard-App des Handys einfach abfotografieren kann, um die Verbingung einzurichten.