summaryrefslogtreecommitdiff
path: root/deploy/turnserver.conf
diff options
context:
space:
mode:
authorskylar <me@casper>2026-11-01 05:43:24 -0800
committerskylar <me@casper>2026-11-01 05:43:24 -0800
commite69ad01e700e80fa959dfee08cd556ca0d777ffd (patch)
tree645fc9db2142e87a5ef302733a77ba2fec848d88 /deploy/turnserver.conf
Yesod: self-hosted WebXR rooms
Start a room in a world and hang out in VR from the headset's browser: A-Frame + Networked-A-Frame over EasyRTC, with a coturn relay that can hide everyone's IP address. Ships with the Campfire, Temple, Cabin, Balcony and Test room worlds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'deploy/turnserver.conf')
-rw-r--r--deploy/turnserver.conf64
1 files changed, 64 insertions, 0 deletions
diff --git a/deploy/turnserver.conf b/deploy/turnserver.conf
new file mode 100644
index 0000000..efddc5e
--- /dev/null
+++ b/deploy/turnserver.conf
@@ -0,0 +1,64 @@
+# coturn for Yesod: STUN plus a TURN relay for voice when two people can't
+# reach each other directly, and for everyone who hides their IP address.
+# Credentials are short-lived HMACs minted by the app (yesod.service) from the
+# shared secret below.
+#
+# On install, set realm to your domain and replace STATIC_AUTH_SECRET with
+# TURN_SECRET from /etc/yesod/env (see README.md).
+
+listening-port=3478
+realm=example.org
+use-auth-secret
+static-auth-secret=STATIC_AUTH_SECRET
+fingerprint
+
+# Relay ports (open these UDP ports in the firewall). With "Hide my IP
+# address" on, everyone relays: each person holds one allocation, and one
+# port, per other person in the room. The app's cap of 60 people in rooms of
+# up to 8 needs at most 60 x 7 = 420. If you change MAX_PEOPLE or
+# MAX_CONNECTIONS, keep these in step.
+min-port=49160
+max-port=49999
+
+# Each person gets their own TURN username from the app; 7 others plus a
+# little slack for reconnects. The total matches the app's limits above.
+user-quota=10
+total-quota=450
+stale-nonce=600
+
+# No TLS listener (nginx owns 443), no admin CLI, no TCP relays.
+no-tls
+no-dtls
+no-cli
+no-tcp-relay
+no-multicast-peers
+
+# Never relay into private, loopback or reserved address space.
+denied-peer-ip=0.0.0.0-0.255.255.255
+denied-peer-ip=10.0.0.0-10.255.255.255
+denied-peer-ip=100.64.0.0-100.127.255.255
+denied-peer-ip=127.0.0.0-127.255.255.255
+denied-peer-ip=169.254.0.0-169.254.255.255
+denied-peer-ip=172.16.0.0-172.31.255.255
+denied-peer-ip=192.0.0.0-192.0.0.255
+denied-peer-ip=192.0.2.0-192.0.2.255
+denied-peer-ip=192.88.99.0-192.88.99.255
+denied-peer-ip=192.168.0.0-192.168.255.255
+denied-peer-ip=198.18.0.0-198.19.255.255
+denied-peer-ip=198.51.100.0-198.51.100.255
+denied-peer-ip=203.0.113.0-203.0.113.255
+denied-peer-ip=224.0.0.0-255.255.255.255
+denied-peer-ip=::1
+denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
+denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
+denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
+denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
+denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
+denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
+denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
+
+# No logs: coturn otherwise records every session with both ends' addresses.
+# (To debug a relay problem, swap these for "syslog" and "verbose" for a while.)
+no-stdout-log
+log-file=/dev/null
+simple-log