2023-12-25 14:17:30 +01:00
|
|
|
{ inputs, outputs, lib, pkgs, config, ... }:
|
2023-10-23 07:47:06 +02:00
|
|
|
{
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
wireguard-tools
|
|
|
|
];
|
|
|
|
|
|
|
|
# NOTE: key generation
|
|
|
|
# umask 077
|
2024-01-08 22:44:22 +01:00
|
|
|
# wg genkey > key
|
|
|
|
# wg pubkey < key > key.pub
|
2023-10-23 07:47:06 +02:00
|
|
|
|
|
|
|
# Server
|
2024-01-08 22:44:22 +01:00
|
|
|
age.secrets."wireguard.privateKey" = {
|
2023-10-23 07:47:06 +02:00
|
|
|
mode = "077";
|
2024-01-08 22:44:22 +01:00
|
|
|
rekeyFile = "${inputs.self}/secrets/home/jeeves/wireguard/key.age";
|
2023-12-25 20:13:48 +01:00
|
|
|
generator = {
|
2024-01-25 16:39:43 +01:00
|
|
|
script = { lib, pkgs, file, ... }: ''
|
2023-12-25 20:13:48 +01:00
|
|
|
priv=$(${pkgs.wireguard-tools}/bin/wg genkey)
|
|
|
|
${pkgs.wireguard-tools}/bin/wg pubkey <<< "$priv" > ${lib.escapeShellArg (lib.removeSuffix ".age" file + ".pub")}
|
|
|
|
echo "$priv"
|
|
|
|
'';
|
|
|
|
};
|
2023-10-23 07:47:06 +02:00
|
|
|
};
|
|
|
|
|
2024-01-25 16:39:43 +01:00
|
|
|
networking.firewall.allowedUDPPorts = [ 51820 ];
|
2023-10-23 07:47:06 +02:00
|
|
|
systemd.network = {
|
|
|
|
netdevs = {
|
|
|
|
"50-wg0" = {
|
|
|
|
netdevConfig = {
|
|
|
|
Kind = "wireguard";
|
|
|
|
Name = "wg0";
|
|
|
|
MTUBytes = "1300";
|
|
|
|
};
|
|
|
|
wireguardConfig = {
|
2024-01-08 22:44:22 +01:00
|
|
|
PrivateKeyFile = config.age.secrets."wireguard.privateKey".path;
|
2023-10-23 07:47:06 +02:00
|
|
|
ListenPort = 51820;
|
|
|
|
};
|
2024-01-08 22:44:22 +01:00
|
|
|
wireguardPeers =
|
|
|
|
lib.mapAttrsToList
|
|
|
|
(host: peerConfig: {
|
|
|
|
wireguardPeerConfig = peerConfig;
|
|
|
|
})
|
|
|
|
{
|
|
|
|
cheetah = {
|
|
|
|
PublicKey = "CFTGvBcly791ClwyS6PzTjmqztvYJW2eklR7it/QhxI=";
|
|
|
|
AllowedIPs = [
|
|
|
|
"10.100.0.2/32"
|
|
|
|
"0.0.0.0/0"
|
|
|
|
# "::/0"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
limonka = {
|
|
|
|
PublicKey = "+x4cKc16KxhW/M3wv64FU1J0AkiLyXT5Oar6I1n1xk4=";
|
|
|
|
AllowedIPs = [
|
|
|
|
"10.100.0.3/32"
|
|
|
|
"192.168.1.123/32"
|
|
|
|
"0.0.0.0/0"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
peshoDjam = {
|
|
|
|
PublicKey = "37QEe3Lsq5BTIzxqAh9z7clHYeaOaMH31oqi5YvAPBY=";
|
|
|
|
AllowedIPs = [
|
|
|
|
"10.100.0.4/32"
|
|
|
|
"192.168.1.134/32"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
s42 = {
|
|
|
|
PublicKey = "pZF6M8TZ1FSBtTwFz4xzlMqwqRScEqgBfqHBk7ddixc=";
|
|
|
|
AllowedIPs = [
|
|
|
|
"10.100.0.5/32"
|
|
|
|
"0.0.0.0/0"
|
|
|
|
];
|
|
|
|
};
|
2023-10-23 07:47:06 +02:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
networks.wg0 = {
|
|
|
|
matchConfig.Name = "wg0";
|
2024-01-25 16:39:43 +01:00
|
|
|
address = [ "10.100.0.1/24" ];
|
2023-10-23 07:47:06 +02:00
|
|
|
networkConfig = {
|
|
|
|
IPMasquerade = "ipv4";
|
|
|
|
IPForward = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|