https://github.com/coturn/coturn

配置文件

coturn的配置文件turnserver.conf

#TURN监听IP
listening-ip=127.0.0.1
#TURN为TCP和UDP监听端口
listening-port=3478
#TURN为TLS监听端口
tls-listening-port=5349
#UDP端口范围,如果范围设置太大,docker run可能会卡住
min-port=49160
max-port=49200
#使用长期凭证机制
lt-cred-mech
use-auth-secret
static-auth-secret=north
#访问的域名
realm=example.org
server-name=example.org

coturn有4种认证机制:

  1. no-auth(允许匿名访问),开启这一选项,即使有一个user选项开启了(在配置文件或者命令行或者usersdb文件中),no-auth也会被启用
  2. lt-cred-mech(长期凭据机制),如果no-auth和lt-cred-mech都未开启,但有一个user选项开启了,lt-cred-mech也会被自动开启
  3. use-auth-secret(时间有限的长期凭据),需要实现TURN REST API使用认证,可以在数据库的turn_secret里查询,这是动态认证秘密
  4. static-auth-secret(静态认证),需要实现TURN REST API使用认证

Docker创建

docker pull coturn/coturn:4.6.2
docker run -d -p 3478:3478 -p 3478:3478/udp -p 5349:5349 -p 5349:5349/udp -p 49160-49200:49160-49200/udp coturn/coturn:4.6.2 -v $(pwd)/turnserver.conf:/etc/coturn/turnserver.conf -e DETECT_EXTERNAL_IP=yes --external-ip='$(detect-external-ip --ipv6)' --relay-ip='$(detect-external-ip --ipv6)'

Docker参数

默认情况下,容器使用CMD Dockerfile中指定的coturn的默认配置;如果我们需要编辑默认配置,我们可以通过在运行docker容器时指定volume命令来完成

-v $(pwd)/custom.conf:/etc/coturn/turnserver.conf

coturn有一个叫做检测外部ip的功能,可以自动检测外部ip,运行docker run命令时,可以通过将“DETECT_EXTERNAL_IP”环境变量设置为yes来启用此功能

-e DETECT_EXTERNAL_IP=yes

默认情况下,它检测IPv4,但如果希望检测IPv6,可以使用以下代码将其设置

--external-ip='$(detect-external-ip --ipv6)' --relay-ip='$(detect-external-ip --ipv6)'

网络设置

因为docker容器在机器内部运行,使用服务器url访问TURN服务器。
首先,需要知道docker主机的IP地址以及映射到docker容器内coturn服务器的端口。
在上面的例子中,docker容器映射到本地机器的端口3478,并在本地主机或127.0.0.1上运行docker容器,所以coturn的url是

turn:IP_Address_Docker_host:3478

如果主机地址是其他一些私人IP地址,如192.1688.1.22或其他一些,可以使用上面的公式轻松地进行映射。
但这里存在问题,为了能够在本地机器之外使用Turn服务器,我们需要将其映射到公共IP地址。

如果TURN服务器位于NAT之后,则NAT网关必须具有一个外部的、可公开访问的IP地址:

external-ip=EXTERNAL_NAT_IPv4_ADDRESS

可以选择将TURN服务器限制为仅侦听由NAT映射到外部地址的本地地址:

listening-ip=INTERNAL_TURNSERVER_IPv4_ADDRESS

如果NAT网关可以通过IPv4和IPv6访问,可以配置coturn来通告每个可用地址:

external-ip=EXTERNAL_NAT_IPv4_ADDRESS
external-ip=EXTERNAL_NAT_IPv6_ADDRESS

0

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!