nixos/hosts/vm/coturn/coturn.nix

67 lines
1.7 KiB
Nix

{ config, lib, ... }:
{
age.secrets = {
coturn_auth_secret = {
file = ../../../secrets/common/coturn_auth_secret.age;
mode = "440";
owner = "turnserver";
group = "turnserver";
};
};
# Taken from https://wiki.nixos.org/wiki/Matrix#Coturn_with_Synapse
services.coturn = rec {
enable = true;
no-cli = true;
no-tcp-relay = true;
min-port = 48000;
max-port = 50000;
use-auth-secret = true;
static-auth-secret-file = config.age.secrets.coturn_auth_secret.path;
secure-stun = true;
realm = "coturn.crans.org";
cert = "${config.security.acme.certs.${realm}.directory}/full.pem";
pkey = "${config.security.acme.certs.${realm}.directory}/key.pem";
extraConfig = ''
# for debugging
verbose
# ban private IP ranges
no-multicast-peers
'';
};
networking.firewall =
let
range = with config.services.coturn; lib.singleton {
from = min-port;
to = max-port;
};
in
{
allowedUDPPortRanges = range;
allowedUDPPorts = [ 3478 5349 ];
allowedTCPPortRanges = range;
allowedTCPPorts = [ 3478 5349 ];
};
users.users.turnserver.extraGroups = [ "nginx" ];
security.acme.certs.${config.services.coturn.realm} = {
postRun = "systemctl restart coturn.service";
};
services.nginx.virtualHosts = {
${config.services.coturn.realm} = {
forceSSL = true;
enableACME = true;
};
};
# services.matrix-synapse.settings = with config.services.coturn; {
# turn_uris = ["turn:${realm}:3478?transport=udp" "turn:${realm}:3478?transport=tcp"];
# turn_shared_secret = static-auth-secret;
# turn_user_lifetime = "1h";
# };
}