Wireguard sagt OpenVPN den „Kampf an“ – zumindest aus meiner Sicht: OpenVPN hat sich seit Jahren bewährt, stellt sich aber auch immer wieder als 1. aufwändig beim Konfigurieren ingesamt und Einrichten einzelner User und 2. als nicht sonderlich stabil heraus. Dem steht nun Wireguard gegenüber und tritt an, vieles besser zu machen. Ich habe Wireguard daher bei mir mal ausprobiert und eine eigene Meinung zu bekommen:
- Mein vyos-Router als Server
- iOS als Client
- MacOS als Client
Seit ca. zwei Wochen benutze ich das nun experimentell und in der Praxis und bin recht begeistert:
Einrichtung
Die Einrichtung sowohl auf Server- als auch auf Client-Seite verlief wirklich einfach:
- Statt mühsam CA und Zertifikate zu erstellen, werden sowowhl auf Client als auch auf Server einfach Public-Private-Keys erzeugt. Die Public-Keys werden auf der jeweiligen Gegenseite eingetragen.
- Der Begriff „Allowed IPs“ war für mich nicht sofort intuitiv: Er bezeichnet die Netze, die über die Verbindung 1. geroutet werden und 2. hereinkommend akzeptiert werden. Er gilt sofowohl für Clients als auch Server – dort kann das je Client verschieden sein.
- Dies ist z.B. die Config auf meinem Mac:
[Interface] Address = 192.168.36.16 DNS = 192.168.36.1 PrivateKey = xxxxxxxxxx= #ListenPort = 21841 [Peer] PublicKey = yyyyyyyyyy= Endpoint = vpn.steinkopf.net:99999 AllowedIPs = 192.168.40.0/22,192.168.32.0/21,212.11.225.0/24 # This is for if you're behind a NAT and # want the connection to be kept alive. PersistentKeepalive = 18
- In der iOS-App ist das inhaltlich identisch, wird aber über Eingabemasken eingestellt.
- Der Clou: Es ist sogar die Konfiguration via QR-Code vorgesehen, damit man auf dem kleinen, mobilen Gerät nicht so viel tippen und cut+pasten muss. Natürlich verringert sich dadurch auch die Fehleranfälligkeit – insbesondere bei weniger versierten Nutzern.
Benutzung
Die Benutzung ist sowas von reibungslos, ja „unsichtbar“ geradezu, dass ich wirklich angetan bin.
- Es gibt keine „Verbindung“ in dem Sinn, dass ein initialer Handshake stattfinden muss. Stattdessen passiert das – wenn ich es richtig verstanden habe – „on the fly“ bei der Benutzung. So entsteht aus Benutzersicht das Gefühlt von „olways-on“ – sowohl mobil als auch auf dem Mac. Ich musste nie mehr auf connect klicken oder so, sondern konnte einfach die entfernten Server ansprechen, als wären sie einfach immer da. Echt cool!
- Einzig als sich einmal die IP meines heimischen Routers durch DSL-Neu-Verbindung geändert hat, haben die Clients den Namen des VPN-Endpoints nicht neu aufgelöst. Dazu habe ich aber auch hier eine vielversprechende Lösung gefunden.
Anhang 1: Wireguard auf MacOS einrichten
Hier nur im Telegramm-Stil, aber das sollte reichen:
Einrichten:
brew install wireguard-tools
wg genkey | tee privatekey | wg pubkey > publickey
vi /usr/local/etc/wireguard/wg0.conf
(Inhalt s.o.)
Starten/Stoppen:
wg-quick up wg0
wg-quick down wg0
(Wobei es kaum einen Grund gibt, das zu tun.)
Anhang 2: Wireguard auf vyos einrichten
Hier – nur zur „Illustration“ – wie die Konfig auf dem vyos-Router aussieht:
wireguard wg01 {
address 192.168.36.1/26
peer DIRK_IPHONEX {
allowed-ips 192.168.36.10/32
persistent-keepalive 20
pubkey aaaaaaaaaa=
}
peer DIRK_MAC {
allowed-ips 192.168.36.16/32
persistent-keepalive 20
pubkey bbbbbbbbb=
}
port 18356
firewall {
in {
name "from-wg-vpn"
}
local {
name "vyatta-local"
}
out {
name "into-ed4u-vpn"
}
}
}
…
interface-route 192.168.36.0/26 {
next-hop-interface wg01 { }
}
Anleitung für Raspberry PI (Raspi): https://www.bachmann-lan.de/raspberry-pi-mit-wireguard-als-vpn-server-mit-wireguard/