1.單一網(wǎng)絡(luò )環(huán)境
如上圖,手機APP和IP話(huà)機通過(guò)SIP注冊消息,向服務(wù)器提供自身的IP地址,服務(wù)器將注冊地址保存起來(lái),兩個(gè)終端互相通話(huà)沒(méi)有什么問(wèn)題。
2. 服務(wù)器處于公網(wǎng)環(huán)境

NAT設備會(huì )將IP數據包頭的地址和端口,換成外網(wǎng)的地址和端口,但是服務(wù)器正常情況下采用的SIP注冊消息中攜帶的地址作為終端地址,此時(shí)兩個(gè)終端連注冊都無(wú)法成功,服務(wù)器在SIP注冊消息中獲取的是局域網(wǎng)IP地址,發(fā)出的200 OK無(wú)法抵達終端設備。
這里涉及三個(gè)角色,有各自的辦法可解決NAT穿透問(wèn)題:
1)終端設備側
采用STUN服務(wù),STUN的原理是:在公網(wǎng)上部署一個(gè)STUN服務(wù)器,位于NAT后面的客戶(hù)端設備向它發(fā)送一系列的UDP包先在NAT設備上“打洞”,STUN服務(wù)器取到UDP包的來(lái)源地址后,回送相關(guān)的消息告訴該客戶(hù)端它被映射的外網(wǎng)地址。使用STUN后,SIP消息的contact頭域中就可以直接填入外網(wǎng)地址。

注意,STUN技術(shù)在對稱(chēng)型NAT設備中是無(wú)能為力的,因為學(xué)習到的外網(wǎng)IP地址會(huì )失效,此時(shí)需要和TURN中繼服務(wù)配合使用。
2)NAT設備側
應用層網(wǎng)關(guān)(ALG)是解決NAT對應用層協(xié)議無(wú)感知的一個(gè)最常用方法,已經(jīng)被NAT設備廠(chǎng)商廣泛采用,通過(guò)感知應用層協(xié)議,對報文深層的內容進(jìn)行檢查,當發(fā)現任何形式表達的IP地址和端口時(shí),將會(huì )把這些信息同步轉換,并且為這個(gè)新連接創(chuàng )建一個(gè)附加的轉換表項。

注意,NAT設備的ALG無(wú)法解決私有協(xié)議或加密協(xié)議的穿越問(wèn)題。
3)服務(wù)器側
融合通信服務(wù)器通過(guò)開(kāi)啟NAT檢測功能,內含nat.auto是一個(gè)ACL,包含了RFC1918規定的私網(wǎng)地址,并去掉了本地網(wǎng)絡(luò )的地址。當SIP終端注冊時(shí),通過(guò)比較contact地址是否包含在此ACL中來(lái)判定該終端是否處于NAT背后,如果是那么它就把contact地址自動(dòng)替換為SIP包的來(lái)源地址,信令就可以正常抵達。

3. 服務(wù)器處于內網(wǎng)NAT環(huán)境
當服務(wù)器處于內網(wǎng)環(huán)境時(shí),服務(wù)器的解決辦法有:STUN、直接配置外網(wǎng)地址,同時(shí)服務(wù)器還支持Upnp協(xié)議,需要NAT設備支持該協(xié)議并開(kāi)啟,該協(xié)議允許應用程序向NAT設備申請并管理內外網(wǎng)地址、端口映射。

之所以要配置端口轉發(fā),是因為NAT設備的特性決定了只能內網(wǎng)主機接觸過(guò)的外網(wǎng)主機才能向內發(fā)數據,而融合通信系統首先發(fā)起注冊的是終端設備。
4.服務(wù)器和客戶(hù)頓都處于NAT環(huán)境
測試環(huán)境中很多都是這個(gè)網(wǎng)絡(luò )環(huán)境,但是實(shí)際部署的環(huán)境通常卻比較簡(jiǎn)單。

這樣的結構,將解決NAT穿透的問(wèn)題主要交給了服務(wù)器側,因為終端設備的種類(lèi)多,無(wú)法讓所有終端都自行解決穿透問(wèn)題。