SIP和NAT遍历

时间:2011-08-29 21:27:14

标签: sip traversal nat

我正在尝试了解NAT和SIP的确切问题,并且已经看到了许多不同的解释。这是我到目前为止收集的内容:

1)SIP用户代理正在启动和接受呼叫,因此除非NAT /防火墙配置为接受此端口上的传入流量,否则它无法工作 - 这听起来更有意义,但听起来更多的防火墙和端口映射

2)SIP消息包含需要NAT遍历的正文中的IP地址(可以是私有的) - 如果是这种情况

3)它不是SIP的问题,而是RTP,其参数作为SIP消息体的一部分包含在SDP中,包括私有IP地址

4)与UDP与TCP有关吗?

4 个答案:

答案 0 :(得分:3)

当使用SIP完成呼叫时,呼叫端点不知道呼叫必须到达的端点,即端点的IP。 它只知道SIP服务器的IP地址 因此,INVITE进入SIP服务器,SIP服务器“知道”到达/如何到达被叫端点 这个想法是SIP消息包含SDP数据,其中包含所需的信息,以便最终电话能够设置会话,用户将能够开始交谈。
这些数据包括IP,端口,编解码器和其他参数 因此,如果其中一部电话在NAT后面,则电话将报告为其IP,例如IP_X是其私有IP,另一端点无法到达该IP;那时公众知识产权还不得而知。

答案 1 :(得分:1)

您的所有假设都是正确的。 在SIP中,您可以将其分为两个主要问题:信令和媒体。 信令在SIP上通过TCP或UDP运行,并且连接可以从两个方向打开,因为呼叫可以被用户代理拨打或接受。 媒体通过RTP(和RTCP)运行,通常通过UDP完成(除非您尝试实现NAT遍历),然后它可能会通过TCP)。这里的端口和地址是动态分配的,需要双向运行并在多个会话上运行(=多个套接字和连接)。

要实现NAT遍历,通常会使用多种技术:STUN,TURN,ICE,HTTP隧道甚至是SBC。 SIP的NAT遍历需要服务器的外部支持 - 通常不是SIP服务器 - 专门用于工作。

答案 2 :(得分:1)

我对Tsahi Levent-Levi的回答略有不同意见。

问题是您放入Via,Contact,From / To标头,SDP等的IP地址必须是全局可路由的。如果你在NAT后面,你显然需要输入你的外部IP地址。

使用STUN等实现ICE允许您自动执行 ,但您始终可以手动解决该程序。

特别是,通过检查机器的路由表,您可以判断您正在呼叫的计算机是否在NAT后面(由于知道工作计算机位于此VPN NAT后面,并且本地计算机处于打开状态这个子网,其他一切都通过路由器的NAT运行。使用该信息,您可以找到NAT的远端/外部地址以某种方式(STUN自动提供此信息,但您的互联网路由器可能有静态地址,或者您可以联系能够返回您的远程/服务器的HTTP服务器外部地址,或......)。一旦你有了这个远端/外部地址,你可以把地址放在必要的地方 - 你的Contact头,SDP c = header等。

答案 3 :(得分:1)

Eyeball Networks的白皮书清楚地解释了NAT& voip和STUN, TURN, ICE solution的防火墙遍历问题。关于如何在http://www.eyeball.com/voip-solutions/stun-turn-ice.htm

实现SIP P2P和SIP TURN调用,还有一些很好的图表