搭建内网 WebRTC stun 服务

3,070 阅读2分钟

2021.11.10.jpg

最近公司项目中有使用到 webRTC 技术,使用了一个开源的 webRTC 框架。框架中 webRTC 通信需要连接一个 google stun 服务,老板说这样不行。不可以连接外网。好吧,那就改一下。调(百)研(度)了一下,可以使用 coTurn 来解决这个事情。以下是解决的整个过程。

coturn:github.com/coturn/cotu…

整个过程(可以跳过)

整个实现过程一周多(但其实还是挺简单的),很是曲折。第一次想直接使用内网在 Docker 里面实现,发现不行。(也可能是我实现的有问题,这个还可以继续研究一下)然后又在 Docker 外面实现,还是不行。网上的实现的方法大多是替换 google stun 服务,使用的还是公网ip。那我就想先不直接使用内网ip了,改用公网ip,但是呢,公司网管不给我公司服务器挂外网 :( 。好在发现公司有个快过期的阿里云服务器,就在上面搞了起来,搞了一天竟然实现了😊。然后就迁移到又在公司内网服务器上面实现了一遍,记录一下。

环境

  • 服务器用的 Ubuntu 16(非 Docker)
  • sqlite3
  • openssl
  • libevent(v2.2.12)
  • coturn server (v4.5.2)
  • 阿里云服务器需要在安全组开 3478 端口

所需软件

apt-get install pkg-config
apt-get install openssl
apt-get install libssl-dev

sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
tar xzvf libevent-2.1.12-stable.tar.gz
cd libevent-2.1.12-stable
./configure
make
make install
wget https://coturn.net/turnserver/v4.5.2/turnserver-4.5.2.tar.gz
tar xzvf turnserver-4.5.2.tar.gz
cd turnserver-4.5.2
./configure
make
make install
sudo openssl req -x509 -newkey rsa:2048 -keyout /usr/local/etc/turn_server_pkey.pem -out /usr/local/etc/turn_server_cert.pem -days 99999 -nodes

vim /usr/local/etc/turnserver.conf

listening-port=3478
# listening-device=eth0
listening-ip=内网ip
# 内网部署可以不添加这一条
external-ip=外网ip
user=zjkj:zjkj2020
# realm=shzjkj.com
# cli-password=zjkj2020
# 内网部署时填写内网ip,外网部署时填写公网ip
relay-ip=101.132.108.11
userdb=/usr/local/var/db/turndb
pkey=/usr/local/etc/turn_server_pkey.pem
cert=/usr/local/etc/turn_server_cert.pem


Verbose
fingerprint
lt-cred-mech
no-loopback-peers
no-multicast-peers
no-tcp
no-tls
no-cli
sudo turnadmin -a -u ninefingers -r north.gov -p youhavetoberealistic
turnserver -L <内网ip> -a -f -r <realm-name>

image.png 这样就算启动了

测试

webrtc.github.io/samples/src…

image.png

点击 “Gather candidates” 最后出现 “done”说明就通过了。

image.png

然后在你的 webRTC 框架中替换一个 google stun 地址就好了。

image.png