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

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


webrtc终极版【二】目录

  • webrtc终极版(二)搭建自己的iceserver服务,并用到RTCMultiConnection的demo中
  • 前言
  • 一、stunserver,turnserver,iceserver是什么?
  • 二、具体搭建步骤
    • 1.下载安装coturn
    • 2、处理证书问题
    • 3、处理各个ip以及端口的配置
    • 4、配置用户名密码以及域标识
    • 三、测试
    • 四、将配置放到第一篇文章的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/

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

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

      五、总结

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

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

      1、ip设置的正确吗

      2、用户名密码有没有用账号密码创建?我就是没有创建,直接想当然的的配置了,主要,要用脚本创建了用户名密码才可以

      3、udp以及tcp端口放开了吗?我当时是udp再阿里云后台没有放开,所以一直不通,找了好久才发现这个隐蔽的问题

      4、证书配置了吗?也是需要用脚本配置的哦

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