专注SIP通讯产品与方案

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洞保持打开状态。