兩個 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 ,則滿足一定條件時可媒體直達。