coturn NAT穿透服务器搭建
今天是WebRTC视频通信服务器搭建的第5天了吧,前两天搭建的janus,局域网测试成功了,然后尝试在我的华为云上进行了搭建,设计到https的配置,具体步骤呢再另起一文吧。
前天晚上睡的有点晚,然后就开始头疼,说起来这种情况也不是一次两次了,只不过这次竟然持续疼了两天,倒也不是一直疼,时不时的疼那么一秒钟,然后休息几分钟,再疼一秒,昨晚上刚要睡着就疼一下,导致又熬夜了,今天终于去诊所看了看,说是神经性头疼,还有点高血压,虽然早就料到了,但还是寻思,以后不能在这么玩命了。以后我要早睡早起,锻炼身体。
好的,正文开始。
一、问题描述
在华为云搭建好janus以后,链接测试时出现了这样的问题:
ICE failed for component 1 in stream 1…
然后不久以后,这个房间的摄像头就关掉了,也就是通信失败了,上网搜了一下,这方面的资料极少,在这篇博客里提到了说是因为网络穿透失败导致的,至于什么是网络穿透失败,那就不在这里讨论了,主要是解决方案,这篇博客里提到了说要搭建coturn,但是连接却是404,也是没办法,所以上网搜吧,如何搭建coturn。
二、安装coturn
如果是直接搜索coturn安装的话,会被网上的节奏带偏,基本上都是告诉你如何下载源代码,并进行编译安装,虽然说对于搞linux的同学来说,这是基本操作,但是看到需要搞定各种依赖,还是稍微有点怵的吧,所以:
sudo apt update
sudo apt install coturn
# 香的不得了
三、coturn配置
配置信息本着能少就少,能默认就默认,能不改就不改,能用就行的原则,参考这篇博客进行了配置。
- 关掉coturn之后进行配置
sudo systemctl stop coturn
- 设置turnserver自启
sudo nano /etc/default/coturn
TURNSERVER_ENABLED=1
- 编辑配置文件
sudo nano /etc/turnserver.conf
# /etc/turnserver.conf
# 设置监听端口,这个端口TCP和UDP都会监听,所以在云服务器中必须都打开
listening-port=3478
# 这个我也在云服务器中添加了,但是似乎不添加也行
tls-listening-port=5349
# Require authentication
fingerprint
lt-cred-mech
# 设置服务器名称,这个不重要,如果自己有域名,用自己域名最好
server-name=qtmami.com
realm=qtmami.com
# 设置用户名和密码,这个使用在turn进行穿透时使用
user=guest:somepassword
# Path to the SSL certificate and private key. In this example we will use
# the letsencrypt generated certificate files.
# 设置证书文件位置,本文下边会讲
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
# Specify the allowed OpenSSL cipher list for TLS/DTLS connections
cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"
- 开放端口,所有有的没的我都开放了
- 添加域名解析
四、测试
环境搭建完成后,就可以直接测试了,这里有一个测试链接
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
可以直接打开该页面,然后配置ICE servers,也就是我们自己的穿透服务器,进行测试,我这里stun和turn服务器都添加了进行测试,配置如图:
五、有关701错误
测试时,会有701错误, 经过了解,发现是chrome的问题,所以不管他就行了,或者测试其他浏览器
六、证书生成
证书生成,参考这篇博文,其中提到了证书文件的生成,他这个步骤我也按他的做了,但是稍微有点复杂,而且好像还失败了,也可能是成功了,但是由于上述701错误的存在,导致我以为失败了。总之证书生成这里还是没有问题的,注意证书保存位置可以自己更改,如果放在/etc,那么需要管理员权限:
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes