From ceedfcc8b5975cc6e14167ea6fc2d2b050fda57d Mon Sep 17 00:00:00 2001 From: DMRobertson Date: Tue, 7 Feb 2023 13:46:08 +0000 Subject: deploy: f630536a9455107b27284cb56a7f5d0a4afe7de2 --- v1.77/turn-howto.html | 346 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 v1.77/turn-howto.html (limited to 'v1.77/turn-howto.html') diff --git a/v1.77/turn-howto.html b/v1.77/turn-howto.html new file mode 100644 index 0000000000..7d3bd18491 --- /dev/null +++ b/v1.77/turn-howto.html @@ -0,0 +1,346 @@ + + + + + + Configuring a Turn Server - Synapse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+ +
+ +
+ +

Overview

+

This document explains how to enable VoIP relaying on your homeserver with +TURN.

+

The synapse Matrix homeserver supports integration with TURN server via the +TURN server REST API. This +allows the homeserver to generate credentials that are valid for use on the +TURN server through the use of a secret shared between the homeserver and the +TURN server.

+

This documentation provides two TURN server configuration examples:

+ +

Requirements

+

For TURN relaying to work, the TURN service must be hosted on a server/endpoint with a public IP.

+

Hosting TURN behind NAT requires port forwaring and for the NAT gateway to have a public IP. +However, even with appropriate configuration, NAT is known to cause issues and to often not work.

+

Afterwards, the homeserver needs some further configuration.

+

Synapse setup

+

Your homeserver configuration file needs the following extra keys:

+
    +
  1. turn_uris
  2. +
  3. turn_shared_secret
  4. +
  5. turn_user_lifetime
  6. +
  7. turn_allow_guests
  8. +
+

As an example, here is the relevant section of the config file for matrix.org. The +turn_uris are appropriate for TURN servers listening on the default ports, with no TLS.

+
turn_uris: [ "turn:turn.matrix.org?transport=udp", "turn:turn.matrix.org?transport=tcp" ]
+turn_shared_secret: "n0t4ctuAllymatr1Xd0TorgSshar3d5ecret4obvIousreAsons"
+turn_user_lifetime: 86400000
+turn_allow_guests: true
+
+

After updating the homeserver configuration, you must restart synapse:

+
    +
  • If you use synctl: +
    # Depending on how Synapse is installed, synctl may already be on
    +# your PATH. If not, you may need to activate a virtual environment.
    +synctl restart
    +
    +
  • +
  • If you use systemd: +
    systemctl restart matrix-synapse.service
    +
    +
  • +
+

... and then reload any clients (or wait an hour for them to refresh their +settings).

+

Troubleshooting

+

The normal symptoms of a misconfigured TURN server are that calls between +devices on different networks ring, but get stuck at "call +connecting". Unfortunately, troubleshooting this can be tricky.

+

Here are a few things to try:

+
    +
  • +

    Check that you have opened your firewall to allow TCP and UDP traffic to the +TURN ports (normally 3478 and 5349).

    +
  • +
  • +

    Check that you have opened your firewall to allow UDP traffic to the UDP +relay ports (49152-65535 by default).

    +
  • +
  • +

    Try disabling TLS/DTLS listeners and enable only its (unencrypted) +TCP/UDP listeners. (This will only leave signaling traffic unencrypted; +voice & video WebRTC traffic is always encrypted.)

    +
  • +
  • +

    Some WebRTC implementations (notably, that of Google Chrome) appear to get +confused by TURN servers which are reachable over IPv6 (this appears to be +an unexpected side-effect of its handling of multiple IP addresses as +defined by +draft-ietf-rtcweb-ip-handling).

    +

    Try removing any AAAA records for your TURN server, so that it is only +reachable over IPv4.

    +
  • +
  • +

    If your TURN server is behind NAT:

    +
      +
    • +

      double-check that your NAT gateway is correctly forwarding all TURN +ports (normally 3478 & 5349 for TCP & UDP TURN traffic, and 49152-65535 for the UDP +relay) to the NAT-internal address of your TURN server. If advertising +both IPv4 and IPv6 external addresses via the external-ip option, ensure +that the NAT is forwarding both IPv4 and IPv6 traffic to the IPv4 and IPv6 +internal addresses of your TURN server. When in doubt, remove AAAA records +for your TURN server and specify only an IPv4 address as your external-ip.

      +
    • +
    • +

      ensure that your TURN server uses the NAT gateway as its default route.

      +
    • +
    +
  • +
  • +

    Enable more verbose logging, in coturn via the verbose setting:

    +
    verbose
    +
    +

    or with eturnal with the shell command eturnalctl loglevel debug or in the configuration file (the service needs to reload for it to become effective):

    +
        ## Logging configuration:
    +        log_level: debug
    +
    +

    ... and then see if there are any clues in its logs.

    +
  • +
  • +

    If you are using a browser-based client under Chrome, check +chrome://webrtc-internals/ for insights into the internals of the +negotiation. On Firefox, check the "Connection Log" on about:webrtc.

    +

    (Understanding the output is beyond the scope of this document!)

    +
  • +
  • +

    You can test your Matrix homeserver TURN setup with https://test.voip.librepush.net/. +Note that this test is not fully reliable yet, so don't be discouraged if +the test fails. +Here is the github repo of the +source of the tester, where you can file bug reports.

    +
  • +
  • +

    There is a WebRTC test tool at +https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/. To +use it, you will need a username/password for your TURN server. You can +either:

    +
      +
    • +

      look for the GET /_matrix/client/r0/voip/turnServer request made by a +matrix client to your homeserver in your browser's network inspector. In +the response you should see username and password. Or:

      +
    • +
    • +

      Use the following shell commands for coturn:

      +
      secret=staticAuthSecretHere
      +
      +u=$((`date +%s` + 3600)):test
      +p=$(echo -n $u | openssl dgst -hmac $secret -sha1 -binary | base64)
      +echo -e "username: $u\npassword: $p"
      +
      +

      or for eturnal

      +
      eturnalctl credentials
      +
      +
    • +
    • +

      Or (coturn only): Temporarily configure coturn to accept a static +username/password. To do this, comment out use-auth-secret and +static-auth-secret and add the following:

      +
      lt-cred-mech
      +user=username:password
      +
      +

      Note: these settings will not take effect unless use-auth-secret +and static-auth-secret are disabled.

      +

      Restart coturn after changing the configuration file.

      +

      Remember to restore the original settings to go back to testing with +Matrix clients!

      +
    • +
    +

    If the TURN server is working correctly, you should see at least one relay +entry in the results.

    +
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + \ No newline at end of file -- cgit 1.5.1