安装 rfc5766-turn-server,尝试将 fd 绑定到 <ip address>: errno=99

kho*_*_89 4 rfc5766turnserver ubuntu-14.04 coturn

我使用的是 Ubuntu 14.04(实际上是 Azure VPS),所以我必须安装 rfc5766-turn-server 而不是最新的 coturn 版本。我已遵循本指南

在最后一步,我无法启动turnserver。我的启动命令:

turnserver -n -L <my_server_public_IP> -X <my_server_public_IP> -E <my_server_public_IP> -a -f -r my-domain.com --cert /myPath/TurnServerCerts/turnserver.crt --pkey /myPath/TurnServerCerts/turnserver.key
Run Code Online (Sandbox Code Playgroud)

我从日志中得到:

........
bind: Cannot assign requested address
0: Trying to bind fd 14 to <my_server_public_IP:3478>: errno=99
Cannot bind local socket to addr: Cannot assign requested address
0: Cannot bind UDP/DTLS listener socket to addr <my_server_public_IP:3478>:3478
0: Trying to bind UDP/DTLS listener socket to addr <my_server_public_IP:3478>:3478, again...
0: Trying to bind fd 15 to <my_server_public_IP:3478>: errno=99
Cannot bind local socket to addr: Cannot assign requested address
........
Run Code Online (Sandbox Code Playgroud)

我尝试从命令中删除侦听 IP(-L 参数),然后turnserver 可以启动。但是,在这种情况下,turnserver 只侦听本地 IP 地址。如何让它监听公共IP地址?

小智 7

嗨,我从来没有使用过 rfc5766-turn-server,但是我在 coturn 服务器上遇到了同样的问题,它是一个分支,更改本地 IP 的中继 ip,并侦听本地 IP 的 IP

这是我的配置文件

listening-port=3478
tls-listening-port=5349

listening-ip=192.168.1.20

relay-ip=192.168.1.20
external-ip=PUBLIC-IP_ADDRESS

realm=domainname.com
server-name=servername

lt-cred-mech
userdb=/etc/turnuserdb.conf

cert=/etc/ssl/certificate.pem
pkey=/etc/ssl/private.key

no-stdout-log
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,公共 IP 用于外部,私有 IP 用于监听/中继。公共IP可以通过“curl https://ipinfo.io/ip”找到,私有IP可以通过“hostname -I”找到。另外,如果您位于 NAT 之后(许多 EC2 用户都会如此),您的外部 ip 配置应设置为 `external-ip=$PUBLIC_IP/$PRIVATE_IP` (2认同)