关于SIP服务器问题的探讨(1)(2)
3. SIP服务器问题详解
3.1 MVB2000作为一个NAT外部的SIP服务器,客户端在NAT内部。
1) 呼叫来自NAT后面,MVB2000发送声音到一个私网IP
如果这个VOIP电话没有应用STUN或其它方式检测它的公网IP=NAT防火墙上的公网IP),而是直接嵌入私网IP地址到邀请消息,那么MVB2000将不断向这个私网IP发送RTP信息包,而这些信息包会被路由器截获并删除,导致单方向说话。
呼叫者听不到声音)
这通常是在用户不去关心NAT设备怎样应用,将nat=never、nat=no或者nat=rfc3581写入sip.conf时所发生的情况。
2) 呼叫来自NAT后面,MVB2000发送声音到错误端口
如果电话可以检测到它的公网IP, 并且正确地置入SIP服务器的邀请字头,MVB2000就会知道向哪个IP地址发送RTP了。
但是,假设应用的是一个锥型防火墙,NAT设备发送RTP到MVB2000的端口不一定与最初的RTP端口相同,这样,MVB2000将发送信息包到最初的端口,NAT设备不会知道信息包去哪里而将其截获删除。
用户可以将nat=route或者nat=yes 写入sip.conf解决这个问题。
如果NAT后面仅仅有一部电话,您也可以查看一下这部电话使用RTP端口的范围,然后在防火墙上应用端口转移,将公网IP指向内网。
如果NAT后面有多部电话,您可以为每一部电话设定一个非重叠的RTP端口范围,这样,应用端口转移指向每一部与RTP端口范围相符的电话。
和应用一个STUN服务器如果电话有STUN支持)一样,应用对称型NAT也将解决这个问题。
3) 呼叫来自NAT外部的MVB2000服务器,应用全锥型NAT设备
没有SIP服务器的电话注册到MVB2000或sip.conf 里面的NAT设备IP,这样,MVB2000不会知道到哪里去查找这部电话,呼叫将被拒绝通过。
对于所有的NAT设备都是一样的)
如果sip.conf 里面host=123.123.123.123 或者电话注册到MVB2000了,MVB2000将能够发送呼叫信号和RTP声音包到NAT设备,然后转移到这部电话。
如果电话有STUN支持,它可以打开NAT设备上的封装信息,应用IP和SDP域中SIP服务器的消息里面的端口1个对应呼叫信号的端口、1个对应RTP的端口和1个对应RTCP的端口)
STUN也同时维护这个封装信息使之处于存活状态检测NAT超时和发送保持存活的封装信息)。
如果电话没有STUN支持,您需要注册这部电话到服务器上,让MVB2000发送保持存活的信息the qualify= line),确认MVB2000发送的信息比您的NAT设备超时更快。
没有STUN支持,您也需要设置NAT=yes或者NAT=route,在MVB2000服务器接收那部NAT电话声音之前,您将不能听到呼入的声音。
4) 呼叫来自NAT外部的MVB2000服务器,应用限制锥型NAT设备
与上面所讲相同,只有被叫电话首先发出信息到NAT设备,NAT设备才可以将MVB2000来电呼叫的声音包发送到那个电话上。
您可以通过让电话发送一个注册信息,或者空SIP服务器的消息如果您的电话支持STUN)到MVB2000服务器,打开封装信息来实现。
如果应用STUN,那么这部电话将会知道它被指向的端口和SDP信息STUN将不必为了做封装信息而发送RTP到您的MVB2000服务器上,只在STUN服务器上操作即可)。
如果没有STUN支持,您将需要设置NAT=yes或者NAT=route,并且在MVB2000服务器没有收到来自电话的声音包之前,您将听不到声音。
注意:如果没有STUN支持,那么注册地址和代理服务器地址必须是同一个IP地址,如果您仅仅应用MVB2000服务器没有其余的组件如SER 就不存在这个问题)。
5) 呼叫来自NAT外部的MVB2000服务器,应用端口限制锥型NAT设备
即使我们注册这部电话到MVB2000服务器,MVB2000服务器也不能发送任何声音包到这部电话上,除非这部电话首先发送声音包到MVB2000上,而且必须采用NAT设备上的5060端口。
如果您的电话支持STUN,这部电话将发送一个空SIP服务器的消息到您的MVB2000服务器上,以便打开封装信息,像任何发送到MVB2000服务器上的RTP信息包可以打开RTP封装信息一样。
如果应用STUN,那么这部电话将会知道它被指向的端口和SDP信息STUN将不必为了做封装信息而发送RTP到您的MVB2000服务器上,只在STUN服务器上操作即可)。
如果没有STUN支持,您将需要设置NAT=yes或者NAT=route,并且在MVB2000服务器没有收到来自电话的声音包之前,您将听不到声音。
3.2 MVB2000作为SIP服务器在NAT外部,与NAT外部的SIP代理服务器或客户端相联。
不用地址转换,不存在问题
3.3 MVB2000作为SIP客户端在NAT外部,与NAT外部的SIP代理服务器或电话相联。
不用地址转换,不存在问题
3.4 MVB2000作为SIP客户端在NAT外部,与NAT内部的SIP代理服务器相联。
您需要将端口转移到NAT上的信号端口,同时转移RTP端口如果代理服务器也负责RTP端口)
这个问题与第一个问题相识。
3.5 MVB2000作为SIP服务器在NAT内部,与NAT内部的SIP代理服务器或客户端相联。
不用地址转换,不存在问题
3.6 MVB2000作为SIP服务器在NAT内部,与NAT外部的客户端相联。
您需要将MVB2000应用到的所有RTP端口在RTP.conf中定义)转移到NAT上,同样,也要做SIP信号端口sip.conf中有端口选项)转移
您也可以在sip.conf 上配置externip和localnet 选项。
3.7 MVB2000作为SIP客户端在NAT内部,与NAT外部的SIP代理服务器/电话/网关相联。
能不能工作依赖于对方的电话/网关您必须使用externip和localnet 选项)
3.8 MVB2000作为SIP客户端在NAT内部,与NAT内部的SIP代理服务器/电话/网关相联。
不用地址转换,不存在问题
3.9 MVB2000在NAT内部,电话/网关在另一个NAT内部
针对这种情况,我们需要一个中间人来相互辨认对方,它应该是一个局外的SIP代理服务器,由它来负责SIP服务器的传输,而且所有的终端都能与它建立联接。如果希望点对点传输多媒体信息流,那么,我们需要另外一个多媒体服务器。
可以采用的解决多媒体服务器办法有:
◆Portaone's RTPProxy适合对称型NAT,需要SER组件支持)
◆AG Projects MediaProxy适合对称型NAT,需要SER组件支持)
◆在NAT外设置两个MVB2000通过配置适合所有NAT类型,非对称型NATs需要设置NAT=route)
当MVB2000处于NAT内部时,如果您想应用对称型NAT,您需要了解sip.conf里面的 externip和localnet。
评论暂时关闭