两个 VOIP 相关问题
Version 0.7
2010-6-2
从 Server 判断 UA 是否在 NAT 后
基于 Via 头域及消息来源地址进行判断
前提:
假定 Server 前无 NAT 。
假定 UA 与 Proxy IP 地址不同。
情景分析:
基于简单情况——如只经过一个 Proxy ——进行分析,结论可推广到复杂情形。
1, UA 直接连接 Server
UA : 10.130.1.xxx
Server: 10.130.5.xxx
Server 收到的 SIP 消息中第一个 Var 的地址 10.130.1.xxx ;消息源地址 10.130.1.xxx
源地址与 Var 地址一致
2, UA 通过 NAT 到 Server
UA : 10.130.1.xxx
NAT : 123.x.x.x
Server: 9.x.x.x
Server 收到的 SIP 消息中第一个 Var 的地址 10.130.1.xxx ;消息源地址 123.x.x.x
Var 是一个私网地址,源地址为 NAT 的公网地址
源地址与 Var 地址不一致
3, UA 通过 Proxy 到 Server
UA : 10.130.1.xxx
Proxy : 10.130.2.xxx
Server: 10.x.x.x
Server 收到的 SIP 消息中第一个 Var 的地址 10.130.2.xxx ,第二个 var 的地址 10.130.1.xxx ;消息源地址 10.130.2.xxx
源地址与第一个 Var 相同
4, UA 通过 NAT+Proxy 到 Server
UA : 10.130.1.xxx
NAT : 123.x.x.x
Proxy : 7.130.2.xxx
Server: 9.x.x.x
Server 收到的 SIP 消息中第一个 Var 的地址 7.130.2.xxx ,第二个 var 的地址 10.130.1.xxx ;消息源地址 7.130.2.xxx
源地址与第一个 Via 相同
有时需要区分 3/4 两种情形,即使 proxy 支持信令穿透。例如为支持两个 UA 之间媒体直达
判断方法:如果多个 via 中同时有公网地址和私网地址,则认为存在 NAT
5, UA 通过 Proxy+NAT 到 Server
UA : 10.130.1.xxx
Proxy : 10.130.2.xxx
NAT : 123.x.x.x
Server: 9.x.x.x
Server 收到的 SIP 消息中第一个 Var 的地址 10.130.2.xxx ,第二个 var 的地址 10.130.1.xxx ;消息源地址 123.x.x.x
源地址与所有的 Via 都不同
6, Proxy 在 NAT 后
UA : 122.x.x.x
NAT : 123.x.x.x
Proxy : 10.130.2.xxx
Server: 9.x.x.x
Server 收到的 SIP 消息中第一个 Var 的地址 10.130.2.xxx ,第二个 var 的地址 122.x.x.x ;消息源地址 123.x.x.x
可以在 NAT 上做静态端口映射以支持该场景
源地址与所有 Via 都不同
非典型情形,暂不考虑
结论:
1, 如果源地址与第一个 via 不同,则认为存在 NAT ;否则:
2, 如果多个 via 中同时有公网地址和私网地址,则认为存在 NAT ;否则:
3, 认为不存在 NAT ;
两 SIP UA 媒体可直达的判断
从服务器判断两 UA 媒体是否可直达,不考虑服务器在私网而 UA 在公网的场景
媒体可直达的条件:
UA 都在公网,或在同一私网,或一 UA 在公网且支持 NAT 穿透
情景分析:
1, 服务器在公网, UA 都在私网
要求两 UA 在同一私网
判断方法:两 UA 的公网地址一样——这样要求它们通过同一个 NAT 到达 server
TBC :未找到更好办法以克服上述限制;
TBC :使用 ADSL 上网时猫的公网地址是否会被电信动态改变?如果会该怎么处理?
2, 服务器在公网,一 UA 在公网
要求该 UA 支持 NAT 穿透,例如采取 SBC 的方式。
判断方法:服务器检查 UA 是否在 NAT 后。
3, 三者都在公网或私网
判断方法:服务器没有发现任何 NAT 。
结论:
服务器没有发现任何 NAT ,或两 UA 来自同一公网地址时媒体可直达。
如果服务器发现某一 UA 未经过 NAT ,则满足一定条件时可媒体直达。