- 作者:james.zhu(james.zhu@hiastar.com) www.hiastar.com 微信公眾號:asterisk-cn
- Asterisk課堂-如何通過(guò)源代碼安裝方式安裝Asteisk/dahdi
- Asterisk課堂-系統部署環(huán)境要求
- Asterisk課堂-Asterisk技術(shù)架構
- Asterisk課堂-撥號規則基礎
- Asterisk課堂-創(chuàng )建第一個(gè)撥號規則
- Asterisk課堂-撥號規則中的Contexts
- Asterisk課堂-撥號規則中變量的使用
- Asterisk課堂-撥號規則中的Extensions用法
- Asterisk課堂-撥號規則中匹配模式
- Asterisk課堂-IAX2 介紹
- Asterisk課堂-IAX2 呼叫流程
- Asterisk課堂-SIP介紹
- Asterisk課堂-SIP呼叫流程
- Asterisk課堂-終端注冊
- Asterisk課堂-SIP Trunk
- Asterisk課堂-SIP和NAT

Asterisk中如果使用了SIP協(xié)議進(jìn)行通信,用戶(hù)終端部署在外網(wǎng)。這樣的話(huà),不可避免會(huì )遇到語(yǔ)音單通的問(wèn)題或者注冊狀態(tài)不穩定的問(wèn)題。這些問(wèn)題就是可能就是NAT導致。因為SIP和NAT的問(wèn)題是一個(gè)非常復雜的問(wèn)題,不僅僅涉及了Asterisk服務(wù)器本身,也涉及了企業(yè)網(wǎng)絡(luò )的其他相關(guān)設備,例如防火墻和路由器,對端網(wǎng)絡(luò )設備,NAT類(lèi)型等等問(wèn)題。這里,因為環(huán)境和時(shí)間限制,我們不做過(guò)多的非常深入的分析。
視頻中介紹了NAT問(wèn)題,解決部署方式和RTP點(diǎn)對點(diǎn)通信設置和端口存活設置:
因為,很多用戶(hù)仍然對NAT問(wèn)題沒(méi)有基本的認知和服務(wù)器端設置的基礎,所以我們這里僅介紹幾個(gè)內容,它們包括NAT概念,如何通過(guò)其他方式來(lái)解決NAT問(wèn)題,點(diǎn)對點(diǎn)媒體流通信,保持端口狀態(tài)存活。下面,我們將逐一介紹這幾個(gè)方面的主要內容:
什么是NAT問(wèn)題。在互聯(lián)網(wǎng)中,NAT簡(jiǎn)單來(lái)說(shuō),NAT就是外網(wǎng)一個(gè)終端或設備和內網(wǎng)一個(gè)設備通信時(shí),路由器不能正確轉發(fā)到內網(wǎng)相應設備地址。更多概念或者原理大家可以參考網(wǎng)上的學(xué)習資料了解NAT問(wèn)題的細節。在A(yíng)sterisk 環(huán)境中,一個(gè)分機通過(guò)外網(wǎng)注冊到Asterisk中,但是這個(gè)分機不能和內網(wǎng)另外的分機進(jìn)行呼叫通信。具體表現為分機可以振鈴,但是沒(méi)有語(yǔ)音。很多情況下,就是路由器不能把語(yǔ)音包轉發(fā)到正確的終端地址上。很多用戶(hù)也把Asterisk直接部署在公網(wǎng),這種方式是一種簡(jiǎn)單粗暴的方式可能解決了簡(jiǎn)單NAT環(huán)境的配置問(wèn)題,但是這樣會(huì )帶來(lái)非常多的安全問(wèn)題和其他網(wǎng)絡(luò )部署的問(wèn)題。這里的實(shí)例中,簡(jiǎn)單的設置方法就是使用NAT=yes 來(lái)解決這個(gè)問(wèn)題。當然,在A(yíng)sterisk設置exteral IP 地址,開(kāi)啟RTP端口,開(kāi)啟路由器RTP端口,SIP端口也可以?xún)H僅一部分NAT問(wèn)題。這些需要用戶(hù)進(jìn)一步測試。圖例中的分機 注冊到了公網(wǎng)的Asterisk中,但是呼叫返回時(shí),因為Asterisk保存的是分機的內網(wǎng)地址,asterisk呼叫到路由器時(shí),路由器可能不能映射這個(gè)內網(wǎng)地址,這樣可能會(huì )導致單通的問(wèn)題。如果設置了NAT以后,Asterisk 注冊時(shí)保存了路由器的公網(wǎng)地址,呼叫則會(huì )映射到路由器,路由器再匹配相應的內網(wǎng)地址。


解決NAT問(wèn)題的辦法很多,大部分的解決辦法就是使用其他第三方的轉發(fā)服務(wù)器來(lái)解決NAT問(wèn)題。這里涉及了NAT類(lèi)型的問(wèn)題,部署成本的問(wèn)題,管理的問(wèn)題的相關(guān)因素。有的用戶(hù)為了解決NAT問(wèn)題,用戶(hù)可能部署了STUN 服務(wù)器來(lái)幫助解決NAT問(wèn)題,但是因為使用的第三方的服務(wù)器來(lái)解析地址,這樣可能導致服務(wù)器狀態(tài)不可控的問(wèn)題。另外一種辦法就是直接部署VPN來(lái)解決NAT問(wèn)題,外網(wǎng)終端設備和內網(wǎng)設備在同一網(wǎng)段,這樣基本上不會(huì )存在NAT的問(wèn)題。但是,這樣會(huì )導致用戶(hù)VPN濫用的問(wèn)題,同時(shí)也增加了用戶(hù)的管理成本和網(wǎng)絡(luò )的復雜度,VPN本身對SIP檢測不是太友好。目前,最好的辦法就是使用SBC來(lái)解決NAT問(wèn)題。因為SBC 不單解決了NAT問(wèn)題,同時(shí)對互聯(lián)網(wǎng)攻擊,呼叫路由,IMS等等方面也承擔了很多工作,同時(shí)增加了語(yǔ)音編碼支持,SIP-PSTN逃生功能。所以,SBC簡(jiǎn)單來(lái)說(shuō)就是一個(gè)SIP防火墻,專(zhuān)門(mén)針對SIP通信來(lái)設計的設備類(lèi)型。但是,SBC相對部署成本也比較高。




關(guān)于SBC 詳細介紹,用戶(hù)可以觀(guān)看視頻:
Direct-Media 或者點(diǎn)對點(diǎn)通信。在NAT章節中,很多用戶(hù)也使用了direct media 或者點(diǎn)對點(diǎn)直接通信的方式。這種方式實(shí)際上使用的服務(wù)非常有限,如果設置了點(diǎn)對點(diǎn)通信,這樣的話(huà),Asterisk 服務(wù)器可以極大減輕服務(wù)器的壓力。但是這種通信方式在實(shí)際環(huán)境中沒(méi)有任何實(shí)際意義。如果設置了direct media的話(huà),Asterisk 服務(wù)器就不會(huì )錄音,CDR 完全可能失去作用,其他的呼叫業(yè)務(wù)流程等等不能工作。有時(shí),用戶(hù)設置了direct media 以后,如果需要點(diǎn)對點(diǎn)通信的話(huà),用戶(hù)同時(shí)要注意檢查路由器設置和Asterisk中的NAT配置。路由器可能干擾了點(diǎn)對點(diǎn)通信配置,導致direct media 設置不成功。



設置端口存活狀態(tài)。因為防火墻的或路由器的檢測設置的問(wèn)題,大部分情況下,網(wǎng)絡(luò )的很多端口不會(huì )是一直開(kāi)放的狀態(tài),如果檢查到有一些端口沒(méi)有發(fā)送任何數據包的情況下,這些端口可能被關(guān)閉。為了讓Asterisk的SIP消息不中斷狀態(tài)檢測,我們需要讓Asterisk通知其他相關(guān)服務(wù)器或終端,本地服務(wù)器是存活狀態(tài),或者SIP終端也要讓Asterisk知道終端始終是活動(dòng)的。所以在asterisk中要設置一個(gè)qualify的狀態(tài),保證雙方確認正常的運行狀態(tài)。當然,這里也產(chǎn)生了一個(gè)問(wèn)題,因為系統消息不斷發(fā)送,系統的負載也會(huì )相應增加。

通過(guò)以上內容,我們介紹了NAT的概念,NAT的幾種解決方式和各自特點(diǎn),另外還介紹了direct media的問(wèn)題和排查方式,最后,我們給大家介紹了保持端口存活動(dòng)方式。這些問(wèn)題都和我們所討論的SIP和NAT問(wèn)題相關(guān),所以大家要根據具體的環(huán)境和業(yè)務(wù)類(lèi)型來(lái)做進(jìn)一步的分析,同時(shí)要考慮部署的復雜度,部署成本,維護難度等等問(wèn)題。