什么是coturn?
coturn是可用作穿透服务器(STUN)及转发服务器(TURN),在WebRTC通话中扮演的角色是一个“红娘”。打个比方,在互联网的两端,有一对准备约会的情侣,他们需要进行视频通话,但互相不知道对方的网络地址,这时coturn就告诉他们各自的地址以及对方的地址,然后就可以进行通话啦。
大部分的情况下,都可以穿透成功,也就是双方之间可以不经过任何服务器就能实现通话,在穿透不成功的情况下,就需要经过coturn服务器进行数据流的转发,也就是所有的数据经过服务器,对服务器的负载比较大。
至于通话过程中,什么情况选择穿透,什么情况选择转发,取决于双方各自所处的网络环境,更具体的话就是取决于各自所处的NAT网络类型,以下是不同环境下对应所需的方式:
- 对称NAT - 对称NAT :TURN
- 对称NAT - 端口限制型NAT : TURN
- 对称NAT - 地址限制型NAT : STUN(部分可行)
- 对称NAT - 全锥形NAT : STUN
- 其他: STUN
如何知道自己网络或者服务器所处的NAT类型?
Github上有个简单的开源库,叫pystun, 简单安装就能或者NAT类型以及公网ip
Ubuntu上怎么安装coturn
1.先更新源:
1 | sudo apt update |
2.安装coturn:
1 | sudo apt install coturn |
3.让服务可以在重启后启动,修改/etc/default/coturn文件,把下面的配置注释去掉
1 | TURNSERVER_ENABLED=1 |
4.修改监听端口,修改/etc/turnserver.conf,修改监听端口为443,找到下面的配置,去掉注释,并改为443,如果443端口被占用,可以使用默认的3478:
1 | listening-port=443 |
添加一个固定的账号:
1 | user=your-username:your-password |
5.服务器端的防火墙开启443或者3478端口
为什么是443端口?
在一些极其严格的网络环境下,可能客户端网络的防火墙只给开80/443端口,为了穿透成功,服务器端开放443端口为最保守的方案,意思就是说如果防火墙把443都封了的话,那你就别想上网了。更多细节,可参考这篇You Better Ignore the Default Protocol Ports You Implement
443为https端口,如果在服务器上已经装了http服务例如nginx,443可能会被占用,这时coturn可以装到另外一台服务器上,避免端口冲突;
怎么测试我们成功安装好了呢?
进入在线网页测试,STUN or TURN URI一栏输入: stun:公网ip:3478,然后点击Add server, 再点击Gather candidates, 如果成功会输出客户端的公网ip,及可用端口号。turn的配置则需要填入上述的账号密码。
结语
以上是P2P通信中,cuturn的介绍、配置、使用以及测试。如果喜欢本站的话,记得收藏哟。
