下载并安装libevent-2.0
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable && ./configure
make && make install
下载编译安装coturn
git clone https://github.com/coturn/coturn
cd coturn
./configure
make
make install
签名证书
cert和pkey配置的自签名证书用Openssl命令生成:
openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
user=lili:lili
external-ip=47.114.33.xxx #阿里云分配的公网IP
listening-port=3478
在阿里云后台的安全组规则中添加用到的端口,包括3478端口
ICE测试
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
打开上面的测试地址,分别测试stun和turn服务器,只有relay地址回来的是你的ip才算穿透成功。
我在手机上测试的:
反射的地址是
中继地址是
PC上测试结果:没有拿到relay数据。
经过几次尝试后成功:
如果设置relam为我的域名
也可以通过上面这种方法来得到relay address。
同时我还抓取了阿里云上的包
10. Binding Request
11.Binding success response
12.
13. 可以看到第一次requst被服务器拒绝,因为后者要求nonce验证信息,服务器的返回中包含了nonce信息,除此之外还包含了ERROR-CODE,SOFTWARE,FINGERPRINT属性.
14.在下一次request请求中,客户端加上了收到的nonce,以及USERNAME和REALM等属性,再次发送到TurnServer:
15.服务器接收到了正确的allocation请求,于是返回succcess response,可以看到在返回中带有默认的lifetime为600秒,XOR-MAPPED-ADDRESS以及XOR-RELAY-ADDRESS等属性: