李成笔记网

专注域名、站长SEO知识分享与实战技巧

VoIP应用中NAT知识分享 voip功能

VoIP应用中NAT知识分享


VoIP(Voice over IP)技术包含SIP、H.323等一系列的协议,基于IP网络通信,功能丰富,业务灵活,不仅支持语音业务,而且能够提供视频以及传真等多种服务,应用也越来越广泛, 然而当前应用组网大部分都是部署在NAT防火墙内,对VoIP业务的应用有一定影响,使用中也会遇到各种问题,下面和大家分享几种常用NAT穿越技术

NAT环境常见问题

· SIP账户注册不上,Register报文收不到响应消息;

· 呼叫通话中出现语音单通,内网设备收不到公网媒体流;

· 收不到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)以鼎信IAD语音网关为例,设备上开启动态NAT功能后,发出取得请求消息via头里会携带rport字段,如下



发送REGISTER消息,在请求信息的Via头域中包含了没有值的rport参数,如下所示:

REGISTER sip: 124.40 . 120.188 : 5060 SIP / 2.0

Via: SIP/ 2.0 / UDP 124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z -1049ed261d2e643d - 1 --- d8754z -;rport

Max - Forwards: 70

Contact: < sip: 19988888888 @ 192.168 . 2.65 : 12344 ;rinstance =7cd1c532e92fdb0e > ;expires =

To: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >

From: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >;tag =203ba359

Call -ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.

CSeq: 1 REGISTER

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO

User - Agent: eyeBeam release 1105a stamp 56793

Content- Length:


(2)公网服务器收到请求消息后,将会分析检测来源SIP消息的NAT地址和端口,并且会在响应SIP报文里使用received和rport字段携带给客户端,如例子中的获取到的NAT的公网地址(124.42.4.203)和端口(15500):


SIP / 2.0 200 OK

Via: SIP / 2.0 / UDP 124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z -1049ed261d2e643d - 1 --- d8754z - ;rport = 15500 ;received = 124.42. 4.203

From: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >;tag = 203ba359

To: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 > ;tag= 0005 - 058 - 7d6dc90516ae2e21

Call - ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.

CSeq: 4 REGISTER

Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGE

Contact: < sip: 124.40 . 120.188 : 5060 >

Content - Length:


(3) 设备在收到响应200OK信息后,从rport 和received字段里获取NAT公网地址和端口,设备之后发SIP消息时会更改为路由器公网的IP和端口。如下列,Contact头部携带变换成124.42.4.203: 15500,例如新发的REGISTER信息变为:

REGISTER sip: 124.40 . 120.188 : 5060 SIP / 2.0

Via: SIP / 2.0 / UDP 124.42 . 4.203 : 15500 ;branch = z9hG4bK - d8754z -1049ed261d2e643d - 1 --- d8754z - ;rport

Max - Forwards: 70

Contact: < sip: 19988888888 @ 124.42 . 4.203 : 15500 ;rinstance =7cd1c532e92fdb0e > ;expires =

To: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >

From: " 19988888888 " < sip: 19988888888 @ 124.40 . 120.188 : 5060 >;tag = 203ba359

Call - ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.

CSeq: 2 REGISTER

Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO

User - Agent: eyeBeam release 1105a stamp 56793

Content - Length:


这样IPPBX(或SIP Proxy)就会把SIP报文发往NAT公网地址和端口,实现NAT穿透。


2. STUN穿透原理


Simple Traversal of UDP over NATs,即NAT的UDP的简单穿越,是客户机-服务器的一种网络协议,由RFC 3489 定义。该协议定义了一些消息格式,大体上分为Request/Response。这个协议主要作用是用以在两个处于NAT路由器之后的主机之间建立UDP通信。帮助位于NAT后的客户端获取自己的公网地址以及NAT为这个客户端的本地端口所绑定的对外端口。

利用STUN技术实现NAT穿透,首先需要搭建一个STUN server(也可以找免费的STUN server),然后在设备上配置STUNserver地址即可。



STUN实现穿透流程:

(1) 开启STUN后,设备作为客户端,会自动用SIP端口和不同的RTP端口往STUN服务器发STUN探测消息;

(2) 服务器收到后会在响应消息里携带设备所在网络的NAT地址和端口;

(3) 路由器会记录保持对应的NAT地址表

(4) 设备收到STUN服务器响应消息后自动记录NAT公网IP和端口;

(5) 设备发起的SIP报文里contact头字段和SDP字段会自动携带公网地址;

(6) 设备会定时刷新STUN报文,用于NAT洞保持打开状态。


开启STUN报文注册消息如下:

3. 静态NAT

静态NAT在实际应用中使用比较少,因为使用静态NAT实现穿透时,路由器的公网IP必须是一个固定不变的地址,如果是PPPOE拨号上网的网络,不适合启用这种方式。

启用静态NAT,必须手动配置好公网IP,并且需要在路由器里添加端口映射,将设备的SIP端口和RTP端口映射到公网。设备发出去的SIP消息contact头部和SDP信息里携带配置的静态公网IP地址,从而实现NAT穿透。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言