diff --git a/hosts/fw/modules/firewall.nix b/hosts/fw/modules/firewall.nix index 61f9205..31f1fbc 100644 --- a/hosts/fw/modules/firewall.nix +++ b/hosts/fw/modules/firewall.nix @@ -122,7 +122,8 @@ # Forward to git server oifname "server" ip daddr ${config.networkPrefix}.97.55 tcp dport { 22 } counter accept - oifname "server" ip daddr ${config.networkPrefix}.97.5 tcp dport { 80, 443 } counter accept + oifname "server" ip daddr ${config.networkPrefix}.97.5 tcp dport { 80, 443 } counter accept + oifname "server" ip daddr ${config.networkPrefix}.97.5 udp dport { 50000-50200 } counter accept comment "LiveKit SFU media" # lan and vpn to any iifname { "lan", "server", "vserver", "wg_cloonar" } oifname { "lan", "vb-*", "vm-*", "server", "vserver", "infrastructure", "multimedia", "smart", "wg_cloonar", "guest", "setup" } counter accept @@ -172,6 +173,7 @@ iifname "server" ip daddr ${config.networkPrefix}.96.255 udp dport { 9 } dnat to ${config.networkPrefix}.96.255 iifname "wan" tcp dport { 22 } dnat to ${config.networkPrefix}.97.55 iifname "wan" tcp dport { 80, 443 } dnat to ${config.networkPrefix}.97.5 + iifname "wan" udp dport { 50000-50200 } dnat to ${config.networkPrefix}.97.5 comment "LiveKit SFU media" iifname "wan" tcp dport { 5000 } dnat to ${config.networkPrefix}.97.51 iifname { "wan", "lan" } udp dport { 7777, 7778, 27015 } dnat to ${config.networkPrefix}.97.201 iifname { "wan", "lan" } tcp dport { 27020 } dnat to ${config.networkPrefix}.97.201 diff --git a/hosts/fw/modules/web/matrix.nix b/hosts/fw/modules/web/matrix.nix index d9a8ece..ecd94be 100644 --- a/hosts/fw/modules/web/matrix.nix +++ b/hosts/fw/modules/web/matrix.nix @@ -10,6 +10,13 @@ let issuer = baseUrl + "/"; account = baseUrl + "/account"; }; + # MatrixRTC LiveKit focus for Element Call + "org.matrix.msc4143.rtc_foci" = [ + { + type = "livekit"; + livekit_service_url = "${baseUrl}/livekit/jwt"; + } + ]; }; serverConfig."m.server" = "${fqdn}:443"; mkWellKnown = data: '' @@ -221,7 +228,13 @@ in { experimental_features = { msc4190_enabled = true; msc3202_device_masquerading = true; + # MatrixRTC support + msc3266_enabled = true; + msc4222_enabled = true; }; + + # MatrixRTC delayed events (MSC4140) — prevents stuck calls + max_event_delay_duration = "24h"; }; }; @@ -233,7 +246,7 @@ in { systemd.services.matrix-synapse.wants = [ "matrix-authentication-service.service" ]; systemd.services.matrix-synapse.serviceConfig.PrivateUsers = lib.mkForce false; systemd.services.matrix-synapse.preStart = lib.mkAfter '' - install -m 0600 -o matrix-synapse /dev/null ${synapseVoipConfig} + install -m 0600 /dev/null ${synapseVoipConfig} TURN_SECRET=$(cat ${config.sops.secrets.coturn-static-secret.path}) cat > ${synapseVoipConfig} < /run/livekit/key + chmod 0644 /run/livekit/key + fi + ''; + }; + # Mattermost bridge (bridgev2 — attrs replace entirely, so include all needed fields) services.mautrix-mattermost = { enable = true; diff --git a/hosts/web-arm/sites/cloonar.com.nix b/hosts/web-arm/sites/cloonar.com.nix index 5aac37c..5bdae4e 100644 --- a/hosts/web-arm/sites/cloonar.com.nix +++ b/hosts/web-arm/sites/cloonar.com.nix @@ -9,6 +9,13 @@ let issuer = "https://matrix.cloonar.com/"; account = "https://matrix.cloonar.com/account"; }; + # MatrixRTC LiveKit focus for Element Call + "org.matrix.msc4143.rtc_foci" = [ + { + type = "livekit"; + livekit_service_url = "https://matrix.cloonar.com/livekit/jwt"; + } + ]; }; matrixServerConfig."m.server" = "matrix.cloonar.com:443"; in {