一。NAT环境常见问题
NAT环境常见问题
- SIP账户注册不上,注册报文收不到响应消息;
- 呼叫通话中出现语音单通,内网设备收不到公网媒体流;
- 收不到ACK信令,呼叫接通持续30秒自动挂断;
- 收不到BYE消息,通话挂不断;
二。原因分析
SIP呼叫建立和媒体通信的建立是根据SIP消息右侧和SDP消息体里携带的IP地址和端口来协商的,如果SIP服务器在公网,设备部署在NAT网络下,NAT设备替换发出的SIP消息里携带的是内网IP地址和端口,从而导致外网服务器发生故障,收发和媒体报文送不到NAT设备,造成信令,媒体丢失。针对这种组网应用,通常采用以下三种NAT穿透技术解决:
(1)动态NAT;(2)静态NAT;(3)STUN穿透
设备启用NAT穿透功能后,可以实现“网络打洞”,并检测到路由器外网的IP地址,从而发出的SIP消息头部以及SDP消息体携带的IP地址和端口都会替换为获取到的公网IP和端口。
三。NAT突破原理
1.动态NAT穿透原理

(1)以鼎信通达DAG语音网关为例,设备上开启动态NAT功能后,通过头里会携带的端口发出获取请求消息,如下
发送REGISTER消息,在请求信息的Via头域中包含了没有值的rport参数,如下所示:
注册Sip:124.40。120.188:5060 SIP / 2.0
通过:SIP / 2.0 / UDP 124.42。4.203:15500;分支= z9hG4bK-d8754z -1049ed261d2e643d-1 --- d8754z-;运动
最高-前锋:70
联系人:<sip:19988888888 @ 192.168。2.65:12344; rinstance = 7cd1c532e92fdb0e>; expires =
至:“ 19988888888” <sip:19988888888 @ 124.40。120.188:5060>
来自:“ 19988888888” <sip:19988888888 @ 124.40。120.188:5060>;标签= 203ba359
呼叫-ID:Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U。
CSeq:1个寄存器
允许:邀请,确认,取消,选项,再见,引用,通知,消息,订阅,信息
用户-代理:eyeBeam发行1105a邮票56793
内容长度:
(2)公网服务器收到请求消息后,将进行分析检测源SIP消息的NAT地址和端口,并会在响应SIP报文里使用,并通过端口传送给客户端,如示例中的获取到的NAT的公网地址(124.42.4.203)和端口(15500):
SIP / 2.0 200确定
通过:SIP / 2.0 / UDP 124.42。4.203:15500;分支= z9hG4bK-d8754z -1049ed261d2e643d-1 --- d8754z-; port = 15500;接收= 124.42。4.203
来自:“ 19988888888” <sip:19988888888 @ 124.40。120.188:5060>;标签= 203ba359
至:“ 19988888888” <sip:19988888888 @ 124.40。120.188:5060>;标签= 0005-058-7d6dc90516ae2e21
通话-ID:Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U。
CSeq:4个寄存器
允许:邀请,确认,选项,再见,取消,注册,信息,更新,包,引用,订阅,通知,消息
联系人:<sip:124.40。120.188:5060>
内容-长度:
(3)设备在收到响应200OK信息后,从移动和接收到的分段里获取NAT公网地址和端口,设备之后发SIP消息时会更改为路由器公网的IP和端口。如以下,联系携带变换成124.42.4.203:15500,例如新发的REGISTER信息转化为:
注册Sip:124.40。120.188:5060 SIP / 2.0
通过:SIP / 2.0 / UDP 124.42。4.203:15500;分支= z9hG4bK-d8754z -1049ed261d2e643d-1 --- d8754z-;运动
最高-前锋:70
联系人:<sip:19988888888 @ 124.42。4.203:15500;电量= 7cd1c532e92fdb0e>;到期时间=
至:“ 19988888888” <sip:19988888888 @ 124.40。120.188:5060>
来自:“ 19988888888” <sip:19988888888 @ 124.40。120.188:5060>;标签= 203ba359
通话-ID:Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U。
CSeq:2个寄存器
允许:邀请,确认,取消,选项,再见,引用,通知,消息,订阅,信息
用户-代理:eyeBeam发行1105a邮票56793
内容-长度:
这样IPPBX(或SIP代理)就会把SIP报文发往NAT公网地址和端口,实现NAT穿透。
2. STUN穿透原理
UDP在NAT上的简单遍历,即NAT的UDP的简单穿越,是服务器-服务器的一种网络协议,由RFC 3489定义。该协议定义了一些消息格式,大体上分为请求/响应。帮助位于NAT后的客户端获取自己的公网地址以及NAT为该客户端的本地端口所绑定的对外端口。
利用STUN技术实现NAT扩展,首先需要构建一个STUN服务器(也可以找免费的STUN服务器),然后在设备上配置STUNserver地址即可。


STUN实现突破流程:
(1)开启STUN后,设备作为客户端,会自动使用SIP端口和不同的RTP端口往STUN服务器发STUN探测消息;
(2)服务器收到后会在响应消息里携带设备所在网络的NAT地址和端口;
(3)路由器会记录保持对应的NAT地址表
(4)设备收到STUN服务器响应消息后自动记录NAT公网IP和端口;
(5)设备发起的SIP报文里contactheader和SDP分段会自动携带公网地址;
(6)设备会定时刷新STUN报文,用于NAT洞保持打开状态。
开启STUN报文注册消息如下:


3.静态NAT
静态NAT在实际应用中使用比较少,因为使用静态NAT实现穿透时,路由器的公网IP必须是一个固定不变的地址,如果是PPPOE拨号上网的网络,则不适合启用这种方式。
启用静态NAT,必须手动配置好公网IP,并且需要在路由器里添加端口映射,将设备的SIP端口和RTP端口映射到公网。设备发出去的SIP消息联系头部和SDP信息里携带配置的静态公网IP地址,从而实现NAT穿透。
