NAT有多种类型,每一种是什么样的工作原理,请自行google,在这里不在介绍
这里只介绍媒体(rtp)NAT穿越的案例,信令层的处理不在此范围
为什么需要媒体NAT穿越
所有的通话,实质上是点对点的信息传输。(P2P, point to point)
这里的点是指网路上的点,每一个点是有公网IP的;但是实际情况是,很多节点隐藏在NAT之后,它们只有内网地址。那么之前点之前的连接是无法直连的。
为了能实现点对点的传输,所以内网地址的节点必须获取到它可以使用的公网地址。
案例
下面的例子是讨论FS在NAT后的情况,如下图所示
拓扑结构
那么FS怎么样才能获取到公网IP呢
有两种方案,
- 如果已知网络环境,并且明确可知FS可用的公网IP,可以在配置中直接写入公网IP地址
- 如果在不确定的网络环境,或者公网地址可变的情况下,可以使用stun服务来动态获取
配置参考
配置项都是一样,在external.xml中(因为作者只使用external.xml所以在此配置,各位根据实际需要)
配置项为ext-rtp-ip
像上图样例中,可以配置
external.xml
注意同样有一个项叫ext-sip-ip,它是走sip的,是信令层使用的。这里我们只讨论RTP,所以配置ext-rtp-ip。
同样,可以配置为stun服务器地址,如
external.xml
配置完毕后,可以登陆FS控制台,输入sofia status profile external
来查看配置情况
有关stun server
网路上有很多免费的stun server地址可以使用,那么是否可以工作呢?
有两个检查办法,
-
第一个是网上很多人介绍的,在这里检查
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ -
第二个就是使用FS的命令工具
stun结果
在FS控制台里输入stun stun1.l.google.com:19302
,便可以查看到结果
配置stun后实战结果如何检测?
因为这个ext-rtp-ip是写入SDP中的,所以最直接的方式就是抓包,然后看信令中的SDP消息。下面是SDP样例如
SDP信息
网友评论