WebRTC实时通信 (七)| TURN 部署
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种认证机制:
- no-auth(允许匿名访问),开启这一选项,即使有一个user选项开启了(在配置文件或者命令行或者usersdb文件中),no-auth也会被启用
- lt-cred-mech(长期凭据机制),如果no-auth和lt-cred-mech都未开启,但有一个user选项开启了,lt-cred-mech也会被自动开启
- use-auth-secret(时间有限的长期凭据),需要实现TURN REST API使用认证,可以在数据库的turn_secret里查询,这是动态认证秘密
- 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