3

webrtc终极版(二)搭建自己的iceserver服务,并用到RTCMultiConnection的demo中 - 王...

 7 months ago
source link: https://www.cnblogs.com/wjcnet/p/18006491
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

webrtc终极版(二)搭建自己的iceserver服务,并用到RTCMultiConnection的demo中




第一篇文章,写了如何再5分钟之内搭建一个webrtc服务,并运行起来,这当然不够,turn-server以及stun-server都掌握在别人手中,实际上,连socket服务,也在别人手中,正常情况下,RTCMultiConnection官方不会停止服务的,但是咱们也不敢保证不是,所以本篇文章,我们就用最详细的方式,来手把手教会大家在centos上搭建自己的stun-server以及turn-server。

看到这里,可能有人要懵了,怎么一会儿是iceserver,一会儿是stunserver,一会儿又是turnserver,下面我们先讲解下三者的定义以及作用,然后再直接进行实操,实际上,你可以这样理stunserver+turnserver构成iceserver。

整个webrtc系列,其实搭建iceserver是最为麻烦的,为什么这么说呢,其实如何搭建,网上一搜一大把,你根据文章去实操,也没有问题,但是实际应用起来,就是不能用,我就是这样的,找了很多问题都找不到,折腾了两天才算搞定,这篇文章除了提醒大家再搭建iceserver的最重要的注意事项外,还有个目的是为了防止我自己时间长了也别忘了,下面我们就开始步入正题


一、stunserver,turnserver,iceserver是什么?

ICE:(Interactive Connectivity Establishment)是一种框架和协议,用于在网络中建立可靠的实时通信连接。ICE并不是单独的服务器,而是一种方法,它可以利用STUN(Session Traversal Utilities for NAT)和TURN(Traversal Using Relays around NAT)服务器来实现其目标。实际上ice是一个综合解决方案,它整合了STUN和TURN的功能。ICE通过在不同网络条件下选择最佳的连接路径,以确保最可靠和高效的通信。

STUN服务器: 用于解决NAT(网络地址转换)引起的连接问题。STUN协议允许客户端发现其在NAT后的公共地址和端口,从而直接通信成为可能。

TURN服务器: 用于在两个端点无法直接通信时提供中继服务。TURN服务器充当一个中继,将数据传输给两个端点,以解决NAT等问题。

其实很好理解,比方说我们两台电脑需要进行p2p通信,如果两台电脑再同一局域网,那直接就通信了,没有问题。
但是如果两台电脑再不同局域网,那么该怎么通信呢?我怎么能访问到另外一台电脑呢?它又不是服务器,我也不知道它的公网ip!
那么没有问题,STUN服务器来帮忙,他做的事情就是这个,它作用就是找到两台电脑【当然也可以是手机】的公网ip,然后两台电脑就可以通过公网ip地址,相互访问了。
问题又来了,它如果找不到公网ip怎么办? 这就是TURN服务器要干的事情了,没办法,那就只能让TURN服务器中转一下,注意,如果走到这一步,是要消耗服务器流量的。

二、具体搭建步骤

搭建stun-server和搭建turn-server,上来我们认为要搭建两个,实际上,可以用coturn解决问题, Coturn不仅仅是一个TURN服务器,还包括了STUN的功能,允许客户端发现其在NAT后的公共IP地址和端口,简而言之,只需要搭建一个就可以。

1.下载安装coturn

脚本如下:
①更新系统: yum update
②安装Coturn: yum install coturn
③启动Coturn服务: systemctl start coturn
④确保Coturn开机启动: sudo systemctl enable coturn
⑤如果有防火墙,确保打开相应的端口:
firewall-cmd --zone=public --add-port=3478/udp --permanent
firewall-cmd --reload
注意:如果用的是云服务器,还要到后台去开启tcp以及udp的3478端口,如阿里云的是在安全组那里设置【这个很重要,我就是因为没有放开udp的3478端口,导致白白耽误了很长时间】
以上所有脚本,如果有选择的,就输入y,然后enter,没有选择的,直接enter

2、处理证书问题

coturn安装成功后,打开配置文件,我的是默认安装到了/etc/coturn下,配置打开如下【无用部分已排除】:

#listening-device=eth0
#listening-port=3478
#tls-listening-port=5349
#alt-listening-port=0
#alt-tls-listening-port=0
#listening-ip=172.17.19.101
#listening-ip=10.207.21.238
#listening-ip=2607:f0d0:1002:51::4
#relay-device=eth1
#relay-ip=172.17.19.105
#relay-ip=2607:f0d0:1002:51::5
#external-ip=60.70.80.91
#external-ip=60.70.80.91/172.17.19.101
#external-ip=60.70.80.92/172.17.19.102
#relay-threads=0
# Lower and upper bounds of the UDP relay endpoints:
# (default values are 49152 and 65535)
#min-port=49152
#max-port=65535
#user=username1:password1
#cert=/etc/pki/coturn/public/turn_server_cert.pem
#pkey=/etc/pki/coturn/private/turn_server_pkey.pem
#realm=mycompany.org

安装coturn后,cert和pkey是注释状态,但是实际上,这个是不能注释的,否则运行时,会报错,报证书找不到。

①安装依赖: yum install -y make gcc gcc-c++ wget openssl-devel libevent libevent-devel openssl git
②生成证书:openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
以上脚本,都按enter进行下一步

上面两个脚本执行后,/etc文件夹下,会有两个文件,turn_server_cert.pem以及turn_server_pkey.pem,将cert以及pkey配置为上面两个文件的地址。

替换证书地址

3、处理各个ip以及端口的配置

listening-ip配置为0.0.0.0即可,这样会监听所有的ip请求
relay-ip配置为服务器的外网ip地址
external-ip 配置为服务器的外网ip地址
listening-port=3478 保持原有配置即可

4、配置用户名密码以及域标识

创建用户名密码以及域标识的格式如下:
turnadmin -a -u [用户名] -p [密码] -r [域标识]

我这里执行:
turnadmin -a -u wjc -p 123456 -r turn.zilv.cn
相当于创建了一个wjc的用户名,密码为:123456,域标识为turn.zilv.cn

以上创建好后,再次更新turnserver.conf文件如下:
user=wjc:123456
realm=turn.zilv.cn

可以采用谷歌提供的在线测试工具进行:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

iceserver测试页面
done表示成功

四、将配置放到第一篇文章的demo中

原来的配置都不用变,将自己的iceserver配置进去就可以了,如下图:

增加自己的服务器配置

iceserver的确是不好配置,虽然网上的文档,包括chatgpt,都有相应的步骤,但是几乎没有完整的,我自己也走了很多弯路,至少花了两天时间,才彻底搞定,为了大家少走弯路,所以今天再好好总结下,相信大家按照我的步骤一定能够完成自己的iceserver搭建

最后还是提示下容易出问题的点,大家可以对号入座,作为重点排查对象:

1、ip设置的正确吗
2、用户名密码有没有用账号密码创建?我就是没有创建,直接想当然的的配置了,主要,要用脚本创建了用户名密码才可以
3、udp以及tcp端口放开了吗?我当时是udp再阿里云后台没有放开,所以一直不通,找了好久才发现这个隐蔽的问题
4、证书配置了吗?也是需要用脚本配置的哦

同时也欢迎您关注爱自律官方微信公众号,同时体验爱自律小程序的使用,让我们一起爱上自律,拥抱自由吧。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK