WireGuard ist so ziemlich das was man als Admin immer wollte was VPN angeht. Mir zog es immer die Gänsehaut auf wenn ich nur an dieses OpenVPN gegraddel denken musste.
wg
dagegen ist schön, einfach und unkomplizert. Über die Kernel-Modul
Implementation kann man streiten, aber das ist ja kein muss, da es auch
Userland Implementationen gibt wie unter
iOS oder letztens in
OpenBSD als Paket
Ungefähr genau so schön ist die Implementierung in NixOS
, welche mal wieder
wunderbare Option Bindings zur Verfügung stellt. Statt Kommandos und Befehle
ins Terminal zu tippern, funktioniert die Konfiguration wie gewohnt in
configuration.nix
networking.wireguard.interfaces.wg0 = {
ips = [ "192.168.42.1/24" ];
privateKey = "..secret..";
listenPort = 51666;
peers = [
{
allowedIPs = [ "192.168.42.0/24" ];
publicKey = "CiEyx82EHuibAc4AvB+BRbTVh9p1mDNIhBQ64mWUMA8=";
}
];
};
Und fertig ist schon der WireGuard VPN Server.
Um jetzt den Client in meinem Beispiel eines anderen NixOS anzubinden, sieht ähnlich aus.
networking.wireguard.interfaces.wg0 = {
ips = [ "192.168.42.2/24" ];
privateKey = "..other secret..";
peers = [
{
allowedIPs = [ "192.168.42.0/24" ];
endpoint = "host.example.com:51666";
publicKey = "fY0GiZHUVGSyuteTwrWTnBpURiGOwtJtP0p4gxBj8UY=";
}
];
};
Der Client braucht beim Server dabei keinen endpoint
, weil er sozusagem im
Roaming Modus läuft.
Ein bisschen Firewalling muss man halt noch betreiben, aber das funktioniert im NixOS Stil sehr ähnlich
networking.firewall = {
enable = true;
rejectPackets = true;
allowedUDPPorts = [
51666 # wireguard
];
allowedTCPPorts = [
22 # ssh
];
};
Ich hab hierbei einen festen Port gewählt, normalerweise wird dieser von WireGuard dynamisch basierend auf dem Hostname gewählt.
Danke WireGuard das ihr VPN erträglich gemacht habt.