coturn man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

TURN(1)								       TURN(1)

GENERAL INFORMATION
       The  TURN  Server project contains the source code of a TURN server and
       TURN client messaging library. Also, some extra programs provided,  for
       testing-only purposes.

       See the INSTALL file for the building instructions.

       After the build, you will have the following binary images:

       1.     turnserver: TURN Server relay.  The compiled binary image of the
	      TURN Server program is located in bin/ sub-directory.

       2.     turnadmin: TURN administration tool.  See	 README.turnadmin  and
	      turnadmin man page.

       3.     turnutils_uclient. See README.turnutils and turnutils man page.

       4.     turnutils_peer. See README.turnutils and turnutils man page.

       5.     turnutils_stunclient.  See  README.turnutils  and	 turnutils man
	      page.

       6.     turnutils_rfc5769check. See README.turnutils and	turnutils  man
	      page.

       In  the "examples/scripts" sub-directory, you will find the examples of
       command lines to be used to run the programs. The scripts are meant  to
       be run from examples/ sub-directory, for example:

       $ cd examples $ ./scripts/secure_relay.sh

RUNNING THE TURN SERVER
       Options	note:  turnserver  has	long  and short option names, for most
       options.	 Some options have only long  form,  some  options  have  only
       short  form.  Their  syntax  somewhat  different,  if  an  argument  is
       required:

       The short form must be used as this (for example):

	 $ turnserver -L 12.34.56.78

       The long form equivalent must use the "=" character:

	 $ turnserver --listening-ip=12.34.56.78

       If this is a flag option (no argument required) then  their  usage  are
       the same, for example:

	$ turnserver -a

       is equivalent to:

	$ turnserver --lt-cred-mech

       =====================================

   NAME
	turnserver - a TURN relay server implementation.

   SYNOPSIS
       $ turnserver [-n | -c <config-file> ] [flags] [ --userdb=<userdb-file> | --psql-userdb=<db-conn-string> | --mysql-userdb=<db-conn-string>  | --mongo-userdb=<db-conn-string>  | --redis-userdb=<db-conn-string> ] [-z | --no-auth | -a | --lt-cred-mech ] [options]
       $ turnserver -h

   DESCRIPTION
       Config file settings:

       -n     Do not use configuration file, use only command line parameters.

       -c     Configuration file name (default - turnserver.conf).  The format
	      of  config  file	 can   be   seen   in	the   supplied	 exam‐
	      ples/etc/turnserver.conf example file. Long names of the options
	      are used as the configuration items names in the file. If not an
	      absolute path is supplied, then the file is searched in the fol‐
	      lowing directories:

	      ·	 current directory

	      ·	 current directory etc/ sub-directory

	      ·	 upper directory level etc/

	      ·	 /etc/

	      ·	 /usr/local/etc/

	      ·	 installation directory /etc

       User database settings:

       -b, --db, --userdb
	      SQLite user database file	 name  (default	 -  /var/db/turndb  or
	      /usr/local/var/db/turndb or /var/lib/turn/turndb).

       -e, --psql-userdb
	      User  database  connection string for PostgreSQL.	 This database
	      can be used for long-term	 credentials  mechanism,  and  it  can
	      store  the secret value for secret-based timed authentication in
	      TURN RESP API.  The connection string format is like that:

	      "host=<host>	dbname=<dbname>	     user=<db-user>	 pass‐
	      word=<db-user-password>  connect_timeout=<seconds>"  (for 8.x or
	      newer Postgres).

	      Or:

	      "postgresql://username:password@hostname:port/databasename" (for
	      9.x or newer Postgres).

	      See the INSTALL file for more explanations and examples.

	      Also, see http://www.PostgreSQL.org for full PostgreSQL documen‐
	      tation.

       -M, --mysql-userdb
	      User database connection string  for  MySQL  or  MariaDB.	  This
	      database can be used for long-term credentials mechanism, and it
	      can store the secret value for secret-based timed authentication
	      in TURN RESP API.	 The connection string format is like that:

	      "host=<host>	dbname=<dbname>	     user=<db-user>	 pass‐
	      word=<db-user-password> connect_timeout=<seconds>"

	      See the INSTALL file for more explanations and examples.

	      Also, see http://www.mysql.org or	 http://mariadb.org  for  full
	      MySQL documentation.

	      Optional	connection string parameters for the secure communica‐
	      tions   (SSL):   ca,   capath,   cert,	key,	cipher	  (see
	      http://dev.mysql.com/doc/refman/5.1/en/ssl-options.html  for the
	      command options description).

       -J, --mongo-userdb
	      User database connection string for MongoDB.  This database  can
	      be  used	for  long-term credentials mechanism, and it can store
	      the secret value for secret-based timed authentication  in  TURN
	      RESP API.	 The connection string format is like that:

	      "mongodb://username:password@host:port/database?options"

	      See the INSTALL file for more explanations and examples.

	      Also, see http://docs.mongodb.org/manual/ for full MongoDB docu‐
	      mentation.

       -N, --redis-userdb
	      User database connection string for Redis.  This database can be
	      used  for	 long-term credentials mechanism, and it can store the
	      secret value for secret-based timed authentication in TURN  RESP
	      API.  The connection string format is like that:

	      "ip=<ip-addr>   dbname=<db-number>  password=<db-password>  con‐
	      nect_timeout=<seconds>"

	      See the INSTALL file for more explanations and examples.

	      Also, see http://redis.io for full Redis documentation.

       Flags:

       -v, --verbose
	      Moderate verbose mode.

       -V, --Verbose
	      Extra verbose mode, very annoying and not recommended.

       -o, --daemon
	      Run server as daemon.

       -f, --fingerprint
	      Use fingerprints in the TURN messages. If	 an  incoming  request
	      contains a fingerprint, then TURN server will always add finger‐
	      prints to the  messages  in  this	 session,  regardless  of  the
	      per-server setting.

       -a, --lt-cred-mech
	      Use  long-term  credentials  mechanism  (this  one  you need for
	      WebRTC usage).

       -z, --no-auth
	      Do not use any credentials mechanism,  allow  anonymous  access.
	      Opposite	to  -a	and -A options. This is default option when no
	      authentication-related options are set.  By default, no  creden‐
	      tial mechanism is used - any user is allowed.

       --use-auth-secret
	      TURN  REST API flag.  Flag that sets a special WebRTC authoriza‐
	      tion option that is based upon authentication secret.  The  fea‐
	      ture  purpose  is to support "TURN Server REST API" as described
	      in the TURN REST API section below.  This option uses  timestamp
	      as part of combined username: usercombo -> "timestamp:username",
	      turn user -> usercombo, turn password ->	base64(hmac(input_buf‐
	      fer  =  usercombo, key = shared-secret)).	 This allows TURN cre‐
	      dentials to be accounted for a specific user id.	If  you	 don't
	      have  a  suitable	 id,  the  timestamp  alone can be used.  This
	      option is just turns on secret-based authentication.  The actual
	      value    of   the	  secret   is	defined	  either   by	option
	      static-auth-secret, or can be found in the turn_secret table  in
	      the database.

       --oauth
	      Support  oAuth  authentication,  as in the third-party STUN/TURN
	      RFC 7635.

       --dh566
	      Use 566 bits predefined DH TLS key. Default size of the  key  is
	      1066.

       --dh2066
	      Use  2066 bits predefined DH TLS key. Default size of the key is
	      1066.

       --no-tlsv1
	      Do not allow TLSv1/DTLSv1 protocol.

       --no-tlsv1_1
	      Do not allow TLSv1.1 protocol.

       --no-tlsv1_2
	      Do not allow TLSv1.2/DTLSv1.2 protocol.

       --no-udp
	      Do not start UDP client listeners.

       --no-tcp
	      Do not start TCP client listeners.

       --no-tls
	      Do not start TLS client listeners.

       --no-dtls
	      Do not start DTLS client listeners.

       --no-udp-relay
	      Do not allow UDP relay endpoints defined in RFC 5766,  use  only
	      TCP relay endpoints as defined in RFC 6062.

       --no-tcp-relay
	      Do  not  allow TCP relay endpoints defined in RFC 6062, use only
	      UDP relay endpoints as defined in RFC 5766.

       --stale-nonce
	      Use extra security with nonce value having limited lifetime (600
	      secs).

       --no-stdout-log
	      Flag  to	prevent stdout log messages.  By default, all log mes‐
	      sages are going to both stdout and to the configured  log	 file.
	      With  this  option everything will be going to the log file only
	      (unless the log file itself is stdout).

       --syslog
	      With this flag, all log will be redirected  to  the  system  log
	      (syslog).

       --simple-log
	      This  flag means that no log file rollover will be used, and the
	      log file name will be constructed as-is, without	PID  and  date
	      appendage.   This option can be used, for example, together with
	      the logrotate tool.

       --secure-stun
	      Require authentication of the STUN Binding request.  By default,
	      the  clients  are	 allowed  anonymous access to the STUN Binding
	      functionality.

       -S, --stun-only
	      Run as STUN server only, all  TURN  requests  will  be  ignored.
	      Option  to  suppress TURN functionality, only STUN requests will
	      be processed.

       --no-stun
	      Run as TURN server only, all  STUN  requests  will  be  ignored.
	      Option  to  suppress STUN functionality, only TURN requests will
	      be processed.

       --no-loopback-peers
	      Disallow peers on the loopback addresses (127.x.x.x and ::1).

       --no-multicast-peers
	      Disallow peers on well-known broadcast addresses (224.0.0.0  and
	      above, and FFXX:*).

       --mobility
	      Mobility with ICE (MICE) specs support.

       --no-cli
	      Turn  OFF the CLI support. By default it is always ON.  See also
	      options --cli-ip and --cli-port.

       --server-relay
	      Server relay. NON-STANDARD AND DANGEROUS OPTION.	Only for those
	      applications  when  we  want  to	run server applications on the
	      relay endpoints.	This  option  eliminates  the  IP  permissions
	      check  on	 the  packets  incoming	 to  the relay endpoints.  See
	      http://tools.ietf.org/search/rfc5766#section-17.2.3 .

       --udp-self-balance
	      (recommended for older Linuxes only) Automatically  balance  UDP
	      traffic over auxiliary servers (if configured). The load balanc‐
	      ing is using the ALTERNATE-SERVER	 mechanism.  The  TURN	client
	      must  support 300 ALTERNATE-SERVER response for this functional‐
	      ity.

       --check-origin-consistency
	      The flag that sets the origin consistency check: across the ses‐
	      sion,  all  requests  must  have	the same main ORIGIN attribute
	      value (if the ORIGIN was initially used by the session).

       -h     Help.

       Options with required values:

       -d, --listening-device
	      Listener interface device.  (NOT RECOMMENDED. Optional function‐
	      ality, Linux only).  The turnserver process must have root priv‐
	      ileges to bind the listening endpoint to a device. If turnserver
	      must  run as a process without root privileges, then just do not
	      use this setting.

       -L, --listening-ip
	      Listener IP address of relay server.  Multiple listeners can  be
	      specified,  for example: -L ip1 -L ip2 -L ip3 If no IP(s) speci‐
	      fied, then all IPv4 and IPv6 system IPs will be used for listen‐
	      ing.   The  same	ip(s)  can be used as both listening and relay
	      ip(s).

       -p, --listening-port
	      TURN listener port for UDP and TCP  listeners  (Default:	3478).
	      Note:  actually,	TLS & DTLS sessions can connect to the "plain"
	      TCP & UDP port(s), too - if allowed by configuration.

       --tls-listening-port
	      TURN listener port for TLS and DTLS listeners  (Default:	5349).
	      Note:  actually,	"plain"	 TCP & UDP sessions can connect to the
	      TLS & DTLS port(s), too - if allowed by configuration. The  TURN
	      server "automatically" recognizes the type of traffic. Actually,
	      two listening endpoints (the "plain" one and the "tls" one)  are
	      equivalent in terms of functionality; but we keep both endpoints
	      to satisfy the RFC 5766 specs.  For secure TCP  connections,  we
	      currently	 support SSL version 3 and TLS versions 1.0, 1.1, 1.2.
	      For secure UDP connections, we support DTLS version 1.

       --alt-listening-port
	      Alternative listening port for UDP and  TCP  listeners;  default
	      (or zero) value means "listening port plus one".	This is needed
	      for STUN CHANGE_REQUEST - in RFC 5780 sense or in old  RFC  3489
	      sense  -	for  NAT behavior discovery). The TURN Server supports
	      CHANGE_REQUEST only if it is started with more than one  listen‐
	      ing   IP	address	 of  the  same	family	(IPv4  or  IPv6).  The
	      CHANGE_REQUEST is only supported by UDP protocol,	 other	proto‐
	      cols are listening on that endpoint only for "symmetry".

       --alt-tls-listening-port
	      Alternative  listening port for TLS and DTLS protocols.  Default
	      (or zero) value means "TLS listening port plus one".

       --aux-server
	      Auxiliary STUN/TURN server listening endpoint.  Aux servers have
	      almost  full  TURN  and STUN functionality.  The (minor) limita‐
	      tions are:

	      1)  Auxiliary servers do not have alternative ports and they  do
		  not support STUN RFC 5780 functionality (CHANGE REQUEST).

	      2)  Auxiliary   servers	also   are  never  returning  ALTERNA‐
		  TIVE-SERVER reply.

       Valid formats are 1.2.3.4:5555 for IPv4 and [1:2::3:4]:5555  for	 IPv6.
       There may be multiple aux-server options, each will be used for listen‐
       ing to client requests.

       -i, --relay-device
	      Relay interface  device  for  relay  sockets  (NOT  RECOMMENDED.
	      Optional, Linux only).

       -E, --relay-ip
	      Relay  address  (the local IP address that will be used to relay
	      the packets to the peer). Multiple relay addresses may be	 used:
	      -E  ip1 -E ip2 -E ip3 The same IP(s) can be used as both listen‐
	      ing IP(s) and relay IP(s).  If no relay  IP(s)  specified,  then
	      the  turnserver  will  apply  the default policy: it will decide
	      itself which relay addresses to be used, and it will  always  be
	      using  the  client  socket IP address as the relay IP address of
	      the TURN session (if the requested relay address family  is  the
	      same as the family of the client socket).

       -X, --external-ip
	      TURN  Server  public/private  address  mapping, if the server is
	      behind NAT.  In that situation, if a -X  is  used	 in  form  "-X
	      <ip>"  then  that ip will be reported as relay IP address of all
	      allocations. This scenario works only in a simple case when  one
	      single relay address is be used, and no CHANGE_REQUEST function‐
	      ality is required. That single relay address must be  mapped  by
	      NAT  to  the  'external'	IP.   The  "external-ip" value, if not
	      empty, is	 returned  in  XOR-RELAYED-ADDRESS  field.   For  that
	      'external'  IP,  NAT  must  forward ports directly (relayed port
	      12345 must be always mapped to the same 'external' port  12345).
	      In  more complex case when more than one IP address is involved,
	      that option must be used several times,  each  entry  must  have
	      form "-X <public-ip/private-ip>", to map all involved addresses.
	      CHANGE_REQUEST (RFC5780 or RFC3489) NAT discovery STUN function‐
	      ality will work correctly, if the addresses are mapped properly,
	      even when the TURN server itself is behind A NAT.	  By  default,
	      this value is empty, and no address mapping is used.

       -m, --relay-threads
	      Number  of  the  relay threads to handle the established connec‐
	      tions (in addition to authentication  thread  and	 the  listener
	      thread).	 If  explicitly	 set  to 0 then application runs relay
	      process in a single thread, in the same thread with the listener
	      process  (the  authentication  thread  will  still be a separate
	      thread). If not set, then a default optimal  algorithm  will  be
	      employed	(OS-dependent).	 In  the  older	 Linux systems (before
	      Linux kernel 3.9), the number  of	 UDP  threads  is  always  one
	      threads per network listening endpoint - unless "-m 0" or "-m 1"
	      is set.

       --min-port
	      Lower bound of the UDP port range for  relay  endpoints  alloca‐
	      tion.  Default value is 49152, according to RFC 5766.

       --max-port
	      Upper  bound  of	the UDP port range for relay endpoints alloca‐
	      tion.  Default value is 65535, according to RFC 5766.

       -u, --user
	      Long-term security mechanism credentials user  account,  in  the
	      column-separated	form username:key.  Multiple user accounts may
	      used in the command line.	 The key is either the user  password,
	      or  the  key  is	generated  by turnadmin command. In the second
	      case, the key must be prepended with 0x  symbols.	  The  key  is
	      calculated  over	the  user  name,  the user realm, and the user
	      password.	 This setting may not be used with TURN REST API.

       -r, --realm
	      The default realm to be used for the users when no explicit ori‐
	      gin/realm relationship was found in the database, or if the TURN
	      server is not using any database (just  the  commands-line  set‐
	      tings  and the userdb file). Must be used with long-term creden‐
	      tials mechanism or with TURN REST API.

       -C, --rest-api-separator
	      This is the timestamp/username separator symbol  (character)  in
	      TURN REST API. The default value is :.

       -q, --user-quota
	      Per-user	allocations  quota:  how many concurrent allocations a
	      user can create. This option can also be set through  the	 data‐
	      base, for a particular realm.

       -Q, --total-quota
	      Total allocations quota: global limit on concurrent allocations.
	      This option can also be set through the database, for a particu‐
	      lar realm.

       -s, --max-bps
	      Max bytes-per-second bandwidth a TURN session is allowed to han‐
	      dle (input and output network streams are	 treated  separately).
	      Anything	above  that  limit  will  be dropped or temporary sup‐
	      pressed (within the available buffer limits).  This  option  can
	      also be set through the database, for a particular realm.

       -B, --bps-capacity
	      Maximum  server  capacity.  Total bytes-per-second bandwidth the
	      TURN server is allowed to allocate for  the  sessions,  combined
	      (input and output network streams are treated separately).

       --static-auth-secret
	      Static  authentication secret value (a string) for TURN REST API
	      only.  If not set, then the turn server  will  try  to  use  the
	      dynamic	value  in  turn_secret	table  in  user	 database  (if
	      present). The database-stored value can be changed on-the-fly by
	      a	 separate  program, so this is why that other mode is dynamic.
	      Multiple shared secrets can be used (both in the database and in
	      the "static" fashion).

       --server-name
	      Server  name  used  for  the oAuth authentication purposes.  The
	      default value is the realm name.

       --cert Certificate file, PEM format. Same file search rules applied  as
	      for  the	configuration  file.  If  both	--no-tls and --no-dtls
	      options are  specified,  then  this  parameter  is  not  needed.
	      Default value is turn_server_cert.pem.

       --pkey Private  key file, PEM format. Same file search rules applied as
	      for the configuration  file.  If	both  --no-tls	and  --no-dtls
	      options  are  specified,	then  this  parameter  is  not needed.
	      Default value is turn_server_pkey.pem.

       --pkey-pwd
	      If the private key file is encrypted, then this password	to  be
	      used.

       --cipher-list
	      Allowed  OpenSSL	cipher list for TLS/DTLS connections.  Default
	      value is "DEFAULT".

       --CA-file
	      CA file in OpenSSL format.  Forces TURN  server  to  verify  the
	      client SSL certificates.	By default, no CA is set and no client
	      certificate check is performed.

       --ec-curve-name
	      Curve name for EC ciphers, if supported by OpenSSL library  (TLS
	      and DTLS). The default value is prime256v1, if pre-OpenSSL 1.0.2
	      is used. With OpenSSL 1.0.2+, an optimal curve will be automati‐
	      cally calculated, if not defined by this option.

       --dh-file
	      Use  custom DH TLS key, stored in PEM format in the file.	 Flags
	      --dh566 and --dh2066 are ignored when the DH key is taken from a
	      file.

       -l, --log-file
	      Option  to  set the full path name of the log file.  By default,
	      the turnserver tries to open a log file in  /var/log/turnserver,
	      /var/log, /var/tmp, /tmp and . (current) directories (which file
	      open operation succeeds first that file will be used). With this
	      option  you  can	set  the  definite log file name.  The special
	      names are "stdout" and "-" - they will force everything  to  the
	      stdout.  Also,  "syslog"	name will redirect everything into the
	      system log (syslog), as if the option "--syslog"	was  set.   In
	      the  runtime, the logfile can be reset with the SIGHUP signal to
	      the turnserver process.

       --alternate-server
	      Option to set the "redirection" mode. The value of  this	option
	      will  be	the address of the alternate server for UDP & TCP ser‐
	      vice in form of <ip>[:<port>]. The server will send  this	 value
	      in  the  attribute ALTERNATE-SERVER, with error 300, on ALLOCATE
	      request, to the client.  Client will receive  only  values  with
	      the  same	 address family as the client network endpoint address
	      family.  See RFC 5389 and RFC 5766  for  ALTERNATE-SERVER	 func‐
	      tionality	 description.	The client must use the obtained value
	      for subsequent TURN communications.  If more than	 one  --alter‐
	      nate-server  options are provided, then the functionality can be
	      more accurately described as "load-balancing" than a mere "redi‐
	      rection".	  If the port number is omitted, then the default port
	      number 3478 for the UDP/TCP protocols will be used.   Colon  (:)
	      characters in IPv6 addresses may conflict with the syntax of the
	      option. To alleviate this conflict, literal IPv6	addresses  are
	      enclosed	in  square  brackets in such resource identifiers, for
	      example: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 .  Multiple
	      alternate	 servers  can  be  set.	 They  will  be	 used  in  the
	      round-robin manner. All servers in the pool  are	considered  of
	      equal weight and the load will be distributed equally. For exam‐
	      ple, if we have 4	 alternate  servers,  then  each  server  will
	      receive  25%  of	ALLOCATE  requests.  An	 alternate TURN server
	      address can be used more than one time with the alternate-server
	      option, so this can emulate "weighting" of the servers.

       --tls-alternate-server
	      Option to set alternative server for TLS & DTLS services in form
	      of <ip>:<port>. If the port number is omitted, then the  default
	      port  number  5349  for the TLS/DTLS protocols will be used. See
	      the previous option for the functionality description.

       -O, --redis-statsdb
	      Redis status and statistics database connection string, if  used
	      (default	-  empty, no Redis stats DB used). This database keeps
	      allocations status information, and it can be also used for pub‐
	      lishing  and  delivering	traffic and allocation event notifica‐
	      tions.  This  database  option  can  be  used  independently  of
	      --redis-userdb  option,  and actually Redis can be used for sta‐
	      tus/statistics and SQLite or MySQL or MongoDB or PostgreSQL  can
	      be  used	for  the user database.	 The connection string has the
	      same parameters as redis-userdb connection string.

       --max-allocate-timeout
	      Max time, in seconds, allowed for full allocation establishment.
	      Default is 60 seconds.

       --denied-peer-ip=<IPaddr[-IPaddr]>

       --allowed-peer-ip=<IPaddr[-IPaddr]> Options to ban or allow specific ip
       addresses or ranges of ip addresses. If an ip address is	 specified  as
       both  allowed  and  denied,  then  the  ip  address is considered to be
       allowed. This is useful when you wish to ban a range of	ip  addresses,
       except for a few specific ips within that range.	 This can be used when
       you do not want users of the turn server to be able to access  machines
       reachable  by  the turn server, but would otherwise be unreachable from
       the internet (e.g. when the turn server is sitting behind a  NAT).  The
       'white"	and  "black" peer IP ranges can also be dynamically changed in
       the database.  The allowed/denied addresses (white/black	 lists)	 rules
       are very simple:

	      1)  If there is no rule for an address, then it is allowed;

	      2)  If  there is an "allowed" rule that fits the address then it
		  is allowed - no matter what;

	      3)  If there is no "allowed" rule that fits the address, and  if
		  there	 is  a "denied" rule that fits the address, then it is
		  denied.

       --pidfile
	      File  name  to  store  the  pid  of  the	process.   Default  is
	      /var/run/turnserver.pid	(if  superuser	account	 is  used)  or
	      /var/tmp/turnserver.pid .

       --proc-user
	      User name to run the  process.  After  the  initialization,  the
	      turnserver  process  will	 make an attempt to change the current
	      user ID to that user.

       --proc-group
	      Group name to run the process.  After  the  initialization,  the
	      turnserver  process  will	 make an attempt to change the current
	      group ID to that group.

       --cli-ip
	      Local system IP address to be used for CLI management interface.
	      The  turnserver process can be accessed for management with tel‐
	      net, at this IP address and on the CLI port (see the next param‐
	      eter).   Default value is 127.0.0.1. You can use telnet or putty
	      (in telnet mode) to access the CLI management interface.

       --cli-port
	      CLI management interface listening port. Default is 5766.

       --cli-password
	      CLI access password. Default is empty (no	 password).   For  the
	      security reasons, it is recommended to use the encrypted form of
	      the password (see the -P command in the turnadmin utility).  The
	      dollar signs in the encrypted form must be escaped.

       --cli-max-output-sessions
	      Maximum number of output sessions in ps CLI command.  This value
	      can be changed on-the-fly in CLI. The default value is 256.

       --ne=[1|2|3]
	      Set network engine type for the process (for internal purposes).

       ==================================

LOAD BALANCE AND PERFORMANCE TUNING
       This topic is covered in the wiki page:

       https://github.com/coturn/coturn/wiki/turn_performance_and_load_balance

       ===================================

WEBRTC USAGE
       This is a set of notes for the WebRTC users:

       1)  WebRTC uses long-term authentication mechanism, so you have to  use
	   -a  option  (or --lt-cred-mech). WebRTC relaying will not work with
	   anonymous access. With -a option, do not forget to set the  default
	   realm  (-r option). You will also have to set up the user accounts,
	   for that you have a number of options:

	       a) command-line options (-u).

	       b) a database table (SQLite or PostgreSQL or MySQL or MongoDB). You will have to
	       set keys with turnadmin utility (see docs and wiki for turnadmin).
	       You cannot use open passwords in the database.

	       c) Redis key/value pair(s), if Redis is used. You key use either keys or
	       open passwords with Redis; see turndb/testredisdbsetup.sh file.

	       d) You also can use the TURN REST API. You will need shared secret(s) set
	       either  through the command line option, or through the config file, or through
	       the database table or Redis key/value pairs.

       2)  Usually WebRTC uses fingerprinting (-f).

       3)  -v option may be nice to see the connected clients.

       4)  -X is needed if you are running your TURN server behind a NAT.

       5)  --min-port and --max-port may be needed if you want	to  limit  the
	   relay endpoints ports number range.

       ===================================

TURN REST API
       In WebRTC, the browser obtains the TURN connection information from the
       web server. This information is a secure information - because it  con‐
       tains  the  necessary TURN credentials. As these credentials are trans‐
       mitted over the public networks, we have a potential security breach.

       If we have to transmit a valuable information over the public  network,
       then  this information has to have a limited lifetime. Then the guy who
       obtains this information without permission will	 be  able  to  perform
       only limited damage.

       This is how the idea of TURN REST API - time-limited TURN credentials -
       appeared. This security mechanism is based upon the  long-term  creden‐
       tials  mechanism.  The main idea of the REST API is that the web server
       provides the credentials to the client, but those  credentials  can  be
       used  only  limited  time  by  an application that has to create a TURN
       server connection.

       The "classic" long-term credentials mechanism (LTCM) is described here:

       http://tools.ietf.org/html/rfc5389#section-10.2

       http://tools.ietf.org/html/rfc5389#section-15.4

       For authentication, each user must know two things:  the	 username  and
       the  password.  Optionally,  the	 user must supply the ORIGIN value, so
       that the server can figure out the realm to be used for the  user.  The
       nonce and the realm values are supplied by the TURN server. But LTCM is
       not saying anything about the nature and about the persistence  of  the
       username and of the password; and this is used by the REST API.

       In  the	TURN  REST  API, there is no persistent passwords for users. A
       user has just the username. The password is always temporary, and it is
       generated  by  the  web	server	on-demand,  when the user accesses the
       WebRTC page. And, actually, a temporary one-time session only, username
       is provided to the user, too.

       The temporary user is generated as:

       temporary-username="timestamp" + ":" + "username"

       where username is the persistent user name, and the timestamp format is
       just seconds sinse  1970	 -  the	 same  value  as  time(NULL)  function
       returns.

       The  temporary password is obtained as HMAC-SHA1 function over the tem‐
       porary username, with shared secret as  the  HMAC  key,	and  then  the
       result is encoded:

       temporary-password   =	base64_encode(hmac-sha1(shared-secret,	tempo‐
       rary-username))

       Both the TURN server and the web server know the	 same  shared  secret.
       How  the	 shared	 secret	 is distributed among the involved entities is
       left to the WebRTC deployment details - this is beyond the scope of the
       TURN REST API.

       So,  a  timestamp  is  used for the temporary password calculation, and
       this timestamp can be  retrieved	 from  the  temporary  username.  This
       information is valuable, but only temporary, while the timestamp is not
       expired. Without knowledge of the shared secret, a new temporary	 pass‐
       word cannot be generated.

       This  is	 all formally described in Justin's Uberti TURN REST API docu‐
       ment that can be obtained following the link "TURN  REST	 API"  in  the
       TURN Server project's page https://github.com/coturn/coturn/.

       Once  the  temporary  username  and password are obtained by the client
       (browser) application, then the rest is just 'classic"  long-term  cre‐
       dentials	 mechanism.   For  developers,	we  are	 going	to describe it
       step-by-step below:

	      ·	 a new TURN client sends a request command to the TURN server.
		 Optionally, it adds the ORIGIN field to it.

	      ·	 TURN server sees that this is a new client and the message is
		 not authenticated.

	      ·	 the TURN server generates a random nonce string,  and	return
		 the  error  401 to the client, with nonce and realm included.
		 If the ORIGIN field was present in the client request, it may
		 affect	 the  realm  value  that  the  server  chooses for the
		 client.

	      ·	 the client sees the 401 error and it extracts two values from
		 the error response: the nonce and the realm.

	      ·	 the  client  uses  username,  realm and password to produce a
		 key:

		       key = MD5(username ":" realm ":" SASLprep(password))
	      (SASLprep is described here: http://tools.ietf.org/html/rfc4013)

	      ·	 the client forms a new	 request,  adds	 username,  realm  and
		 nonce	to  the	 request. Then, the client calculates and adds
		 the integrity field to the request.  This  is	the  trickiest
		 part  of  the process, and it is described in the end of sec‐
		 tion 15.4: http://tools.ietf.org/html/rfc5389#section-15.4

	      ·	 the client, optionally, adds the fingerprint field. This  may
		 be  also a tricky procedure, described in section 15.5 of the
		 same document.	 WebRTC usually uses fingerprinted  TURN  mes‐
		 sages.

	      ·	 the TURN server receives the request, reads the username.

	      ·	 then  the  TURN server checks that the nonce and the realm in
		 the request are the valid ones.

	      ·	 then the TURN server calculates the key.

	      ·	 then the TURN server calculates the integrity field.

	      ·	 then the TURN server compares the calculated integrity	 field
		 with  the  received  one  -  they  must  be  the same. If the
		 integrity fields differ, then the request is rejected.

       In subsequent communications, the client may go with exactly  the  same
       sequence,  but  for  optimization  usually  the	client, having already
       information about realm and nonce, pre-calculates the integrity	string
       for  each  request, so that the 401 error response becomes unnecessary.
       The TURN server may use "--stale-nonce" option for extra	 security:  in
       some  time,  the	 nonce	expires	 and  the client will obtain 438 error
       response with the new nonce, and the client will have  to  start	 using
       the new nonce.

       In  subsequent  communications,	the  sever  and the client will always
       assume the same password - the original password	 becomes  the  session
       parameter  and is never expiring. So the password is not changing while
       the session is valid and unexpired. So,	if  the	 session  is  properly
       maintained,  it	may  go	 forever,  even	 if the user password has been
       already changed (in the database). The session simply is using the  old
       password.  Once	the  session got disconnected, the client will have to
       use the new password to re-connect (if the password has been changed).

       An example when a new shared secret is generated every hour by the TURN
       server  box  and then supplied to the web server, remotely, is provided
       in the script examples/scripts/restapi/shared_secret_maintainer.pl .

       A very important thing is that the nonce must be totally random and  it
       must be different for different clients and different sessions.

       ===================================

DATABASES
       For the user database, the turnserver has the following options:

       1)  Users  can  be  set in the command line, with multiple -u or --user
	   options.  Obviously, only a few users can  be  set  that  way,  and
	   their credentials are fixed for the turnserver process lifetime.

       2)  Users  can be stored in SQLite DB. The default SQLite database file
	   is	  /var/db/turndb      or      /usr/local/var/db/turndb	    or
	   /var/lib/turn/turndb.

       3)  Users  can  be stored in PostgreSQL database, if the turnserver was
	   compiled with PostgreSQL support. Each time turnserver checks  user
	   credentials,	 it  reads the database (asynchronously, of course, so
	   that the current flow of packets is not delayed in any way), so any
	   change  in  the  database  content  is  immediately	visible by the
	   turnserver. This is the way if you need the best  scalability.  The
	   schema  for	the  database  can  be	found in schema.sql file.  For
	   long-term credentials, you have to set the "keys"  for  the	users;
	   the "keys" are generated by the turnadmin utility. For the key gen‐
	   eration, you need username, password and the realm.	All  users  in
	   the	database  must	use the same realm value; if down the road you
	   will decide to change the realm name, then you will have to re-gen‐
	   erate  all  user keys (that can be done in a batch script). See the
	   file turndb/testsqldbsetup.sql as an example.

       4)  The same is true for MySQL database. The same schema file is appli‐
	   cable.  The same considerations are applicable.

       5)  The same is true for the Redis database, but the Redis database has
	   aa different schema - it can be found (in the form of  explanation)
	   in  schema.userdb.redis.   Also, in Redis you can store both "keys"
	   and open passwords (for long term credentials) -  the  "open	 pass‐
	   word"  option  is  less secure but more convenient for low-security
	   environments.  See the file turndb/testredisdbsetup.sh as an	 exam‐
	   ple.

       6)  If  a  database  is	used,  then users can be divided into multiple
	   independent realms. Each realm can be administered separately,  and
	   each	 realm	can  have its own set of users and its own performance
	   options (max-bps, user-quota, total-quota).

       7)  If you use MongoDB, the database will be setup  for	you  automati‐
	   cally.

       8)  Of  course,	the  turnserver	 can  be used in non-secure mode, when
	   users are allowed to establish sessions anonymously.	 But  in  most
	   cases (like WebRTC) that will not work.

       For the status and statistics database, there are two choices:

       1)  The	simplest  choice  is not to use it. Do not set --redis-statsdb
	   option, and this functionality will be simply ignored.

       2)  If you choose to use it, then set the --redis-statsdb option.  This
	   may	be the same database as in --redis-userdb option, or it may be
	   a different database. You may want to use  different	 database  for
	   security  or convenience reasons. Also, you can use different data‐
	   base management systems for the user database and  for  the	ststus
	   and statistics database. For example, you can use MySQL as the user
	   database, and you can use redis for the statistics. Or you can  use
	   Redis for both.

       So,  we	have  6 choices for the user management, and 2 choices for the
       statistics management. These two are totally independent. So, you  have
       overall	6*2=12	ways  to handle persistent information, choose any for
       your convenience.

       You do not have to handle the database  information  "manually"	-  the
       turnadmin  program  can	handle	everything for you. For PostgreSQL and
       MySQL you will just have to create an empty  database  with  schema.sql
       SQL script. With Redis, you do not have to do even that - just run tur‐
       nadmin and it will set the users for you (see the  turnadmin  manuals).
       If you are using SQLite, then the turnserver or turnadmin will initial‐
       ize the empty database, for you, when started. The TURN server  instal‐
       lation  process	creates	 an  empty  initialized SQLite database in the
       default	location  (/var/db/turndb   or	 /usr/local/var/db/turndb   or
       /var/lib/turn/turndb, depending on the system).

       =================================

ALPN
       The  server  supports  ALPNs "stun.turn" and "stun.nat-discovery", when
       compiled with OpenSSL 1.0.2 or newer. If the server receives a TLS/DTLS
       ClientHello  message that contains one or both of those ALPNs, then the
       server chooses the first stun.* label and sends it back (in the Server‐
       Hello)  in  the ALPN extension field. If no stun.* label is found, then
       the server does not include the ALPN information into the ServerHello.

       =================================

LIBRARIES
       In the lib/ sub-directory the build process  will  create  TURN	client
       messaging  library.   In	 the  include/	sub-directory,	the  necessary
       include files will be placed.  The C++ wrapper for the messaging	 func‐
       tionality  is  located  in TurnMsgLib.h header.	An example of C++ code
       can be found in stunclient.c file.

       =================================

DOCS
       After installation, run the command:

       $ man turnserver

       or in the project root directory:

       $ man -M man turnserver

       to see the man page.

       In the docs/html subdirectory of the original archive  tree,  you  will
       find  the  client library reference. After the installation, it will be
       placed in PREFIX/share/doc/turnserver/html.

       =================================

LOGS
       When the TURN Server starts, it makes efforts  to  create  a  log  file
       turn_<pid>.log in the following directories:

	      ·	 /var/log

	      ·	 /log/

	      ·	 /var/tmp

	      ·	 /tmp

	      ·	 current directory

       If  all efforts failed (due to the system permission settings) then all
       log messages are sent only to the standard output of the process.

       This behavior can be controlled by --log-file, --syslog	and  --no-std‐
       out-log options.

       =================================

HTTPS MANAGEMENT INTERFACE
       The  turnserver	process provides an HTTPS Web access as statistics and
       basic management interface. The turnserver listens  to  incoming	 HTTPS
       admin connections on the same ports as the main TURN/STUN listener. The
       Web admin pages are basic and self-explanatory.

       To make the HTTPS interface active, the database table admin_user  must
       be  populated  with  the	 admin user account(s). An admin user can be a
       superuser (if not assigned to a particular realm) or a restricted  user
       (if  assigned  to a realm). The restricted admin users can perform only
       limited actions, within their corresponding realms.

       =================================

TELNET CLI
       The turnserver process provides a telnet CLI access as  statistics  and
       basic  management interface. By default, the turnserver starts a telnet
       CLI listener on IP 127.0.0.1 and port 5766. That can be changed by  the
       command-cline  options  of  the	turnserver  process  (see --cli-ip and
       --cli-port options). The full list of telnet CLI commands  is  provided
       in "help" command output in the telnet CLI.

       =================================

CLUSTERS
       TURN  Server can be a part of the cluster installation. But, to support
       the "even port"	functionality  (RTP/RTCP  streams  pairs)  the	client
       requests from a particular IP must be delivered to the same TURN Server
       instance, so it requires some networking setup massaging for the	 clus‐
       ter.  The  reason  is  that the RTP and RTCP relaying endpoints must be
       allocated on the same relay IP. It would be possible to design a scheme
       with  the  application-level  requests  forwarding  (and we may do that
       later) but it would affect the performance.

       =================================

FILES
       /etc/turnserver.conf

       /var/db/turndb

       /usr/local/var/db/turndb

       /var/lib/turn/turndb

       /usr/local/etc/turnserver.conf

       =================================

DIRECTORIES
       /usr/local/share/turnserver

       /usr/local/share/doc/turnserver

       /usr/local/share/examples/turnserver

       =================================

STANDARDS
       obsolete STUN RFC 3489

       new STUN RFC 5389

       TURN RFC 5766

       TURN-TCP extension RFC 6062

       TURN IPv6 extension RFC 6156

       STUN/TURN test vectors RFC 5769

       STUN NAT behavior discovery RFC 5780

       =================================

SEE ALSO
       turnadmin, turnutils

       ======================================

   WEB RESOURCES
       project page:

       https://github.com/coturn/coturn/

       Wiki page:

       https://github.com/coturn/coturn/wiki

       forum:

       https://groups.google.com/forum/?from‐
       groups=#!forum/turn-server-project-rfc5766-turn-server

       ======================================

   AUTHORS
       Oleg Moskalenko <mom040267@gmail.com>

       Gabor Kovesdan http://kovesdan.org/

       Daniel Pocock http://danielpocock.com/

       John Selbie (jselbie@gmail.com)

       Lee Sylvester <lee@designrealm.co.uk>

       Erik Johnston <erikj@openmarket.com>

       Roman Lisagor <roman@demonware.net>

       Vladimir Tsanev <tsachev@gmail.com>

       Po-sheng Lin <personlin118@gmail.com>

       Peter Dunkley <peter.dunkley@acision.com>

       Mutsutoshi Yoshimoto <mutsutoshi.yoshimoto@mixi.co.jp>

       Federico Pinna <fpinna@vivocha.com>

       Bradley T. Hughes <bradleythughes@fastmail.fm>

			       15 November 2015			       TURN(1)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net