Newer
Older
# Server section of our Monitoring VPN config
{ lib, config, ... }: let
cfg = config.services.private-storage.monitoring.vpn;
clients = map (x: {
allowedIPs = [ "${x}/32" ];
publicKey = lib.fileContents(cfg.server.pubKeysPath + "/${x}.pub");
presharedKeyFile = toString cfg.server.presharedKeyFile;
}) cfg.server.vpnClientIPs;
in {
options.services.private-storage.monitoring.vpn.server = {
enable = lib.mkEnableOption "PrivateStorageio Monitoring VPN server service";
privateKeyFile = lib.mkOption {
type = lib.types.path;
example = /run/keys/monitoringvpn/server.key;
description = ''
File with base64 private key generated by <command>wg genkey</command>.
'';
};
presharedKeyFile = lib.mkOption {
type = lib.types.path;
example = /run/keys/monitoringvpn/preshared.key;
description = ''
File with base64 preshared key generated by <command>wg genpsk</command>.
'';
};
'';
};
port = lib.mkOption {
type = lib.types.port;
description = ''
The UDP port to listen on.
'';
};
vpnClientIPs = lib.mkOption {
type = lib.types.listOf lib.types.str;
example = [ "172.23.23.23" "172.23.23.42" ];
description = ''
The IP addresses to allow connections from.
'';
};
pubKeysPath = lib.mkOption {
type = lib.types.path;
description = ''
The path to the directory that holds the public keys.
'';
};
};
config = lib.mkIf cfg.server.enable {
networking.firewall.allowedUDPPorts = [ cfg.server.port ];
networking.wireguard.interfaces.monitoringvpn = {
listenPort = cfg.server.port;
privateKeyFile = toString cfg.server.privateKeyFile;