Inhaltsverzeichnis des Artikels
A. WireGuard mit OPNsense
1. Einwahl ins lokale LAN hint...
2. Schritt 2c nicht vergessen
B. Wireguard mit Ubuntu 20.04
1. Tools installieren
2. Schlüssel generieren - am b...
3. Routing aktivieren
4. Konfiguration des "Servers"
5. Konfiguration auf jedem Peer
6. Router vor dem Wireguard-Peer
7. Optionen für Umleitung von ...
C. Autostart bei Systemen mit ...
1. Konfiguration der Verbindun...
2. WireGuard service zu system...
3. Das neu eingerichtete Servi...
4. Jetzt kann das System neu g...
5. Status überprüfen
6. Alles wieder löschen
1. Einwahl ins lokale LAN hint...
2. Schritt 2c nicht vergessen
B. Wireguard mit Ubuntu 20.04
1. Tools installieren
2. Schlüssel generieren - am b...
3. Routing aktivieren
4. Konfiguration des "Servers"
5. Konfiguration auf jedem Peer
6. Router vor dem Wireguard-Peer
7. Optionen für Umleitung von ...
C. Autostart bei Systemen mit ...
1. Konfiguration der Verbindun...
2. WireGuard service zu system...
3. Das neu eingerichtete Servi...
4. Jetzt kann das System neu g...
5. Status überprüfen
6. Alles wieder löschen
VPNs mit WireGuard
die schnelle Alternative zu alten VPN-Technologien
gute Quellen
- WG auf OPNsense step-by-step + sehr nützliche Hinweise
- einwandfreie offizielle Dokumentation
- WG auf OPNsense step-by-step + sehr nützliche Hinweise
- einwandfreie offizielle Dokumentation
Eine Diskussion über Vor- und Nachteile dieses (auf jeden Fall spannenden) Projektes wird hier nicht geführt. Es hat auf jeden Fall einige Vorteile, die wir gern nutzen. Selbstverständlich muss man alles richtig einstellen, damit WireGuard
- überhaupt funktioniert
- keine Sicherheitslücken entstehen
A. WireGuard mit OPNsense
Die Beschreibung unter https://docs.opnsense.org/manual/how-tos/wireguard-client.html und auf den anderen OPNsense-Seiten zu WireGuard ist alles sehr gut beschrieben. Wenn man die Schritte befolgt, funktioniert alles in der Regel gut.
Einige Probleme mit DNS gab es dennoch:
1. Einwahl ins lokale LAN hinter OPNsense
Der Zugriff auf die Geräte hinter OPNsense funktioniert bereits, nachdem man die Beschreibung bis einschließlich "Step 2b" umgesetzt hat. Man kann dann problemlos auf Geräte im lokalen Netzwerk zugreifen. Bei eingeschalteter WG-verbindung ist aber kein Zugriff (vom Client aus - getestet mit einem Macbook) auf Internet möglich.
Die Einstellungen im WG-Client haben dann keinen Einfluss darauf - was im unten markierten Bereich eingegeben wird, ist egal:
#client config macbook
[Interface]
PrivateKey = <xxx>
ListenPort = 52011
Address = 10.10.10.11/32
DNS = <x.x.x.x>
[Peer]
PublicKey = <xxx>
AllowedIPs = 0.0.0.0/0
Endpoint = my domain.com:51821
PersistentKeepalive = 25
2. Schritt 2c nicht vergessen
Ohne die unter Schritt 2c beschriebene Zuordnung zum WG-Interface funktionierte nicht mal das Routing nach außen. Kann eventuell an der Multi-WAN-Konfiguration liegen, die hier vorlag.
Befolgt man "Step 2c" (in unserem Fall bis einschließlich Festlegung des dynamischen Gateways), wird bei bestehender Verbindung ein Zugriff auf das Internet möglich - zumindest unabhängig von der Einstellung zum DNS-Server.
Verweist der DNS-Eintrag im Client (siehe oben) aber auf den lokalen OPNsense-DNS (Beispiel: 10.1.0.1), funktioniert DNS beim Client nicht. Nimmt man im Client den eigenen DNS, ist alles kein Problem:
- Zugriff auf LAN einer OPN funktioniert,
- Zugriff auf das Internet beim eingeschalteten Tunnel funktioniert,
- Internet-Zugriff scheint gar nicht über den Tunnel zu laufen (weniger Datendurchsatz, als vorher) die Daten werden doch über den Tunnel transportiert => Geschwindigkeit geringer als direkt, WG-Monitor zeigt Bewegung bei Zugriff des Clients auf das Internet. Scheint am Ende also nur ein DNS-Zugriffsproblem zu sein.
Insofern führte die Beschreibung bei uns (multi-WAN?) zu keinem vollen Erfolg im Hinblick auf DNS.
Problem scheinbar gelöst:
=> mit der herausragenden Beschreibung in diesem Artikel konnte das Problem eingegrenzt werden. Der Unbound-DNS von OPNsense funktioniert nun einwandfrei, nachdem
- unter System => Settings => General bei
- selbstverständlich dann unter VPN => WireGuard neu starten...
"Allow DNS server list to be overridden by DHCP/PPP on WAN" (die wohl wegen multi-AN an war (oder auch nicht)
unter "exclude interfaces" das WG-Interface ausgeschlossen wurde
unter "exclude interfaces" das WG-Interface ausgeschlossen wurde
Hier sind wir noch am rätseln, wie genau der kniff ist...
B. Wireguard mit Ubuntu 20.04
nachstehende Beschreibung funktioniert mit Ubuntu ab V. 20.04 (also auch mit 22.04) und mit Debian ab v. 11.
Es muss nur das Paket wireguard installiert werden - wobei dieser wireguard nicht enthält, sondern lediglich Hilfsprogramme (wenn ich das richtig verstanden habe) => wireguard selbst ist im Linux-Kernel bereits enthalten.
Folgende Konfigurationsschritte sind insgesamt notwendig:
1. Tools installieren
apt install wireguard
2. Schlüssel generieren - am besten mit folgendem Skript:
generatekeys.sh
#!/bin/bash
PRIVATE_KEY=`wg genkey`
PUBLIC_KEY=`echo $PRIVATE_KEY | wg pubkey`
echo Private Key: $PRIVATE_KEY
echo Public Key: $PUBLIC_KEY
3. Routing aktivieren
Wenn der Zugriff nicht nur auf die Maschine selbst, sondern auch auf das mit der Maschine verbundene, lokale Netzwerk erwünscht ist, muss das Routing funktionieren. Geht wie folgt:
# sudo sysctl -w net.ipv4.ip_forward=1
# vim /etc/sysctl.conf
=> net.ipv4.ip_forward=1 # (uncomment the line)
4. Konfiguration des "Servers"
D. h. in Terminologie von WireGuard => des ersten Peers unter Ubuntu erstellen - zu diesem werden Verbindungen initiiert.
Datei /etc/wireguard/wg.conf erstellen und bearbeiten:
[Interface]
Address = 10.11.10.1/24 => Adresse im WG-Netz (keines der verbundenen Netze)
# SaveConfig = true
ListenPort = 518XX => Port, mit dem der Server arbeitet
PrivateKey = <hier private key des Ubuntu-Servers>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens160 -j MASQUERADE
[Peer]
PublicKey = <hier public key des 1. peers>
AllowedIPs = 10.11.10.2/32
[Peer]
PublicKey = <hier public key des 2. peers>
AllowedIPs = 10.11.10.3/32
5. Konfiguration auf jedem Peer
Die oben in den jeweiligen [Peer] - Sektionen vorgesehenen Clients, die sich verbinden sollen, müssen auch für sich konfiguriert werden. Dies geht - am Beispiel des ersten [Peer] oben - so:
[Interface]
PrivateKey = <hier private key des 1. peers>
ListenPort = 51<irgendwas>
Address = 10.11.10.2/32
DNS = <wenn auch DNS-Server hinter wireguard genutzt werden soll, dann Adresse des DNS für dieses Subnetz>
[Peer]
PublicKey = <public key des Ubuntu-Servers von oben, zu dem Verbindung aufgebaut wird>
AllowedIPs = ::/0, 0.0.0.0/0
Endpoint = ip.oder.domain.com:518XX
PersistentKeepalive = 25 (wenn client hinter NAT)
6. Router vor dem Wireguard-Peer
Falls der Wireguard-Server sich hinter einem Router "versteckt", dann muss ein passender Port geöffnet werden. Also muss
- das Forwarding zum Peer (hier: der Ubuntu-Server von oben) aktiviert werden,
- die entsprechenden Firewall-Regeln bei Bedarf angepasst werden (bei einer Fritzbox reicht zum Beispiel die Freigabe, bei Lancom-Routern müssen auch Firewall-Regeln angepasst werden)
- die Weiterleitung / Zulassung muss den Port als UDP betreffen, der oben als 518XX genannt wurde.
7. Optionen für Umleitung von Daten
Die oben geschilderte Konfiguration (vgl. insbesondere die Einstellungen bei den Peers, die auf den "Server" zugreifen) führt dazu, das jeglicher Datenverkehr am Client ins / vom Internet über WG-Tunnel geleitet wird. Um zu unterscheiden und nur den Traffic für das Zielnetzwerk (hinter dem WG-Gateway) über den Tunnel zu schicken, muss man:
- aus AllowedIPs = 0.0.0.0/0 auf das Netzwerk beschränken: AllowedIPs = ::/0, 192.168.1.0/24
- am besten sollte man auch nicht den DNS-Server des Zielnetzwerkes benutzen, sondern den lokalen
wobei "192.168.1.0/24" das Netzwerk hinter dem WG-Gateway ist
[Interface]
PrivateKey = <hier private key des 1. peers>
ListenPort = 51<irgendwas>
Address = 10.11.10.2/32
DNS = <lokaler Server>
[Peer]
PublicKey = <public key des Ubuntu-Servers von oben, zu dem Verbindung aufgebaut wird>
AllowedIPs = 192.168.1.0/24 => privates Zielnetzwerk
Endpoint = ip.oder.domain.com:518XX
PersistentKeepalive = 25 (wenn client hinter NAT)
C. Autostart bei Systemen mit systemd
Siehe auch hier.
Die meisten Befehle sind mit ROOT-Rechten auszuführen.
1. Konfiguration der Verbindungen
siehe oben
2. WireGuard service zu systemd hinzufügen
Mit dem richtigen Tunnel:
systemctl enable wg-quick@wg0.service
systemctl daemon-reload
3. Das neu eingerichtete Service startensystemctl daemon-reload
systemctl start wg-quick@wg0
4. Jetzt kann das System neu gestartet werden
(um zu schauen, ob es funktioniert)
5. Status überprüfen
systemctl status wg-quick@wg0
6. Alles wieder löschen
systemctl stop wg-quick@wg0
systemctl disable wg-quick@wg0.service
rm -i /etc/systemd/system/wg-quick@wg0*
systemctl daemon-reload
systemctl reset-failed
systemctl disable wg-quick@wg0.service
rm -i /etc/systemd/system/wg-quick@wg0*
systemctl daemon-reload
systemctl reset-failed
to be continued
Auf dieser Seite sind keine Kommentare vorhanden