AWS EC2部署TURN/STUN服务器后无法运行,求问题排查
EC2部署coturn TURN/STUN服务器故障排查
部署步骤回顾
- 启动Amazon Linux 2.0、t2.micro规格的EC2实例,安全组允许所有流量,置于默认VPC的公有子网并分配公网IP;
- SSH登录实例后执行命令:
sudo yum -y update sudo amazon-linux-extras install epel sudo yum -y install coturn
- 执行启动命令:
export PRIVATE_IP=172.31.28.133 export PUBLIC_IP=34.222.45.31 sudo turnserver -n --listening-port 3478 --listening-ip ${PRIVATE_IP} \ --relay-ip ${PRIVATE_IP} --external-ip ${PUBLIC_IP} \ --allow-loopback-peers --no-auth --no-tlsv1 --no-tlsv1_1 \ --log-file /tmp/turnserver.log --simple-log --fingerprint \ --min-port=49152 --max-port=65535 --verbose --no-cli
故障分析与修复方案
问题1:实例内执行curl localhost:3478返回连接重置
coturn的3478端口运行的是STUN/TURN专有协议,并非HTTP协议,curl是HTTP客户端,无法与该端口正常通信,不存在所谓的“默认TURN Server页面”。
正确验证方式:使用coturn自带的STUN测试工具:
turnutils_stunclient localhost
正常输出会返回本地映射地址。
问题2:外部机器curl <EC2公网IP>:3478无响应 + 问题3:trickle ICE提示"TURN server not reachable"
这两个问题根源一致,主要由以下配置问题导致:
1. 监听IP范围限制
当前启动命令仅指定监听私有IP,导致coturn仅在私有网卡上监听,外部请求无法触达。修改启动命令,添加--listening-ip 0.0.0.0以监听所有网卡:
export PRIVATE_IP=172.31.28.133 export PUBLIC_IP=34.222.45.31 sudo turnserver -n --listening-port 3478 --listening-ip ${PRIVATE_IP} --listening-ip 0.0.0.0 \ --relay-ip ${PRIVATE_IP} --external-ip ${PUBLIC_IP} \ --allow-loopback-peers --no-auth --no-tlsv1 --no-tlsv1_1 \ --log-file /tmp/turnserver.log --simple-log --fingerprint \ --min-port=49152 --max-port=65535 --verbose --no-cli
2. 安全组端口协议验证
确认EC2安全组已开放以下端口的TCP和UDP协议:
- 3478端口(STUN/TURN控制端口)
- 49152-65535端口范围(媒体转发端口)
即使安全组设置“允许所有流量”,也需确认规则是否正确应用到实例。
3. 监听状态验证
启动coturn后,执行以下命令检查监听端口是否生效:
sudo netstat -tulpn | grep turnserver
正常输出应包含0.0.0.0:3478的TCP和UDP监听条目。
4. 专用工具验证连通性
在本地机器使用coturn工具测试STUN服务:
turnutils_stunclient 34.222.45.31 -p 3478
正常输出会返回你的公网IP映射信息,比如:
Got response: 0x0101 (SUCCESS), mapped address: 34.222.45.31:xxxx
测试TURN服务(因配置--no-auth,用户名密码可随意填写):
turnutils_uclient 34.222.45.31 -p 3478 -u test -w test
正常输出会显示成功建立relay连接的日志。
内容的提问来源于stack exchange,提问作者Xiangyang Shi
相关产品推荐
相关产品推荐

