97成人免费视频,97视频免费公开成人福利,免费视频99,99婷婷,国产伊人久久,亚洲视频欧美,国产精品福利久久

您當前的位置是:  首頁 > 資訊 > 國內 >
 首頁 > 資訊 > 國內 >

SIP呼叫和路由器ALG相關配置詳解

2019-11-05 11:08:02   作者:james.zhu    來源:CTI論壇   評論:0  點擊:


  在涉及SIP的呼叫業(yè)務中,呼叫的穩(wěn)定性是企業(yè)通信電話系統(tǒng)或呼叫中心的核心問題。當前的部署環(huán)境呼叫中,外網注冊,NAT環(huán)境是技術人員經常遇到的挑戰(zhàn)。因此,技術人員也經常會聽到客戶的投訴和抱怨,呼叫掉線,分機BLF/MWI顯示不正常,呼叫有振鈴沒有語音等問題。在一般的SIP呼叫的配置環(huán)境中,大部分的問題和NAT配置,路由器的ALG配置相關。
  圖片來自于互聯網
  我們一說到NAT問題,讀者馬上就會聯想到路由器配置或者路由器的地址轉換方面的內容。今天,我們針對應用層的NAT-ALG進行一個比較完整的詳解介紹,幫助讀者進一步加深對SIP中的ALG配置,和其帶來的影響。
  1、ALG背景介紹
  大部分的讀者可能已經了解了網絡OSI的架構,這里不再做過多介紹。ALG全稱是Application-level gateway。其應用包括很多。我們使用的SIP是其中一種。
  圖片來自于互聯網
  ALG支持4種功能,其中一個比較重要的功能就是“防火墻”功能。注意,這里的防火墻是加了引號的,因為在當前針對SIP的部署環(huán)境中,SBC承擔了SIP防火墻的功能。關于SBC的完整的介紹,讀者可以查閱筆者的歷史文檔,筆者對SBC部署發(fā)布了大量的技術資料,因此,這里不再重復。
  如何搭建一個完整免費的邊界會話控制器(SBC)測試場景
  ALG可以把網絡層的地址公網地址和內網地址進行NAT處理轉換,實現內外網進行互聯互通。在具體的實際應用中,ALG會重寫一些SIP修改的消息內容來保證SIP服務器端和SIP終端之間地址的統(tǒng)一,保證其連接正常。這里,讀者一定要注意幾個需要注意到提示:
  • ALG僅對應用層(SIP/SDP)的消息進行重寫
  • ALG僅針對NAT規(guī)則進行處理,如果沒有NAT問題,無需ALG
  • 在NAT后面的SIP設備不會感覺ALG的存在
  因為大部分的SIP網絡應用基本上都涉及了外網用戶注冊的問題,設備在NAT后,或者SIP服務器是公網部署。所以部署方案會帶來很多潛在的問題。很多時候,在一些中小型企業(yè)通信的部署環(huán)境中,通過修改路由器的ALG配置可以解決一定的問題。但是,隨著部署環(huán)境越來越復雜,客戶對網絡使用的靈活性要求越來越高,因此VOIP解決方案部署和NAT問題一直處于一種并存狀態(tài),這種狀態(tài)給客戶帶來很多呼叫問題,包括單通,呼叫掉線,呼叫后無語音等問題。通過ALG開啟或者關閉的設置,一些簡單的問題都可以被輕松處理。接下來,我們具體介紹一下ALG針對SIP和SDP到底做了哪些處理。
  2、ALG到底做了哪些處理
  首先說明,ALG可以做NAT轉換同樣的工作,但是,ALG僅在第七層中進行處理。因為ALG是路由器的內置功能,因此,ALG主要做以下幾個方面的工作:
  1. ALG是在消息離開路由器之前修改SIP/SDP應用的必要的消息
  2. ALG替換使用公網地址和端口替換SIP設備的內網地址和端口
  簡單示例說明,如果一個在內網的SIP終端需要和公網的SIP服務器連接,它首先需要通過路由器出局,并且告訴公網SIP服務器其SIP終端的公網地址。否則,SIP公網服務器不能和一個私人網IP的終端進行通信。那怎么辦呢?只能通過路由器的ALG轉換一個公網地址,然后和SIP服務器連接互通,返回時,路由器再通過這個綁定消息返回到內網SIP終端。這就是ALG簡單的工作原理。在ALG處理中,SIP和SDP都需要進行修改處理:
  1. IP地址和端口修改
  2. 超時設置,媒體轉發(fā)設置
  3. ALG修改SIP頭中的Via和Contact,有的路由器也可能修改Route和Record-  Route頭。
  4. ALG修改SDP消息體中的m=,c=和o=,有時也修改a=。這些參數的具體內容,參考RFC4566-5章節(jié)
  注意,在七層協(xié)議中,ALG和proxy服務器的地址轉換有所不同。ALG設置無需SIP用戶端進行配置,而proxy則需要用戶端或者SIP服務器進行適當配置。以下示例就是一個典型的在路由器上開啟ALG功能設置以后,SIP內網終端連接外網SIP服務器時的一個呼叫請求,在這個呼叫請求,SIP終端的Via,Contact發(fā)生轉換的流程,ALG把Via和Contact通過公網地址進行了修改,替換為路由器公網地址,然后發(fā)送到SIP服務器。
  圖片來自于互聯網
  我們討論了關于ALG處理的一些參數。為了解決NAT問題,其實很多終端或者服務器端已經增加了針對NAT的功能支持,可以非常友好地解決NAT問題。但是,還有一部分產品沒有支持NAT檢測功能。因此,有時需要ALG開啟,有時又需要ALG關閉。接下來,我們將討論開啟或者關閉ALG的必要性。
  3、開啟ALG功能設置
  現在NAT問題非常普遍,很多SIP終端設備已經具備了NAT檢測功能。但是市場上一些SIP終端(可能思科話機和比較老的品牌的話機有一部分不支持NAT檢測)仍然沒有支持NAT檢測。不支持NAT檢測功能的SIP終端對七層應用中消息寫入一個私網IP地址。遠端SIP服務器就會根據這個私網地址返回SIP響應。因為這個SIP終端是在NAT背后的私網地址,所以,SIP服務器端返回的消息永遠不會抵達SIP終端。這樣的話,類似這樣的SIP終端就需要路由器開啟ALG支持,通過ALG來修正到正確的IP地址上。如果SIP終端是在NAT背后的話,并且此SIP終端沒有支持NAT檢測,那么,這些設備就需要開啟路由器的ALG功能設置。過路由器以后,沒有開啟ALG功能。路由器出局的IP地址仍然是一個私網地址。如下示例:
  開啟路由器的ALG功能以后,SIP服務器/IPPBX收到的SIP和SDP地址則修改為其公網地址,包括SIP header和SDP消息體內容。在下面的示例中,我們在路由器開啟了ALG設置,SIP服務器可以收到其帶公網地址的SIP/SDP消息。這樣的話,不支持NAT檢測的SIP終端如果路由器開啟了ALG設置的話,則可以成功修改相關IP地址,可以保證和外網SIP服務器進行正常互通。
  因此,如果是不帶NAT檢測功能的終端,如果在NAT環(huán)境下,大部分情況下需要開啟ALG功能。
  4、關閉ALG的設置
  前面我們討論了在一些必要的SIP終端缺乏支持NAT檢測功能的時候,需要開啟ALG功能來解決公網IP地址的問題。但是,在很多場景中,SIP呼叫業(yè)務又不需要開啟ALG功能。很多時候,我們經常聽到技術人員說“檢測路由器,關閉ALG設置”。確實,關閉ALG設置可以解決很多問題。但是,我們在什么時候需要關閉ALG呢?通常情況下,有幾種情況需要讀者考慮關閉ALG功能:
  1. SIP設備支持NAT檢測功能
  2. SIP服務器是在NAT背后的網絡環(huán)境中, SIP終端通過外網呼叫內網SIP服務器
  3. SIP服務器部署在公網環(huán)境,SIP終端在帶NAT的環(huán)境中
  在當前的部署環(huán)境中,我們看到的環(huán)境大部分是SIP服務器端支持NAT檢測,SIP終端很少需要NAT檢測的設置。所以,很多廠家,包括一些開源的SIP軟交換或媒體服務器都能夠支持NAT檢測設置。如果是一個能夠檢測NAT的SIP服務器,它可以檢測到自己的公網IP地址,并且發(fā)送SIP消息之前,會把自己的公網地址寫入到SIP和SDP消息中。NAT檢測可以綁定某些外網的分機,通過修改地址的方式發(fā)送到NAT環(huán)境以外的SIP終端。現在,我們討論兩個基本點使用場景。一種是SIP服務器或者IPPBX在NAT背后場景。如果此SIP服務器在NAT背后的話是這樣處理的,ALG關閉以后,在內網的SIP服務器或者IPPBX會自動檢測NAT設置,在發(fā)送SIP消息前修改SIP/SDP中的內網地址為公網地址,然后發(fā)送到外網的SIP終端,SIP終端就會收到一個帶公網地址的SIP服務器的SIP/SDP消息,這樣就會保證其互通成功。如果這種環(huán)境下開啟ALG設置的話,可能會干擾SIP/SDP地址的發(fā)送。
  另外一種情況是SIP服務器或者IPPBX部署在公網環(huán)境或者云平臺,SIP分機在帶NAT的內網環(huán)境中。通常的處理方式可以是這樣的:在SIP 服務器創(chuàng)建分機時,其分機屬性設置支持NAT=yes以后,內網的SIP終端對SIP服務器端發(fā)送消息,路由器的ALG是關閉狀態(tài),SIP服務器收到SIP終端的消息后,包括其SIP終端的內網地址和SDP消息,看到分機設置為NAT=yes的設置,SIP服務器就會意識到有一個來自帶NAT處理請求的SIP終端,這個終端要求修改SIP/SDP的內網地址為發(fā)送消息的公網地址。外網的SIP 服務器或者IPPBX就會替換掉Via中的SIP內網地址為一個Receivedd IP地址。SIP服務器通過這個Via 中的IP地址返回到公網地址和SIP終端。以下是一個FreePBX中關于NAT=yes的設置策略,這個參數設置比較智能地解決了NAT問題,同時也不需要開啟路由器的ALG設置。
  這里,路由器的ALG是關閉狀態(tài),因此SIP終端的內網IP地址就會發(fā)送到SIP服務器端,根據NAT=yes的設置選項,SIP服務器端修改了Via此SIP的公網地址,然后返回到此公網。這樣的設置可以解決大部分的NAT問題。注意,有一些路由器也會干擾消息的處理,如果關閉ALG不能工作的話,技術人員需要開啟ALG設置做進一步的測試。
  因此,如果SIP服務器/IPPBX那個智能支持一個NAT=yes的選項,SIP服務器端自己首先進行NAT處理,無需開啟路由器的ALG,可以幫助用戶能夠快速智能地解決大部分的問題。
  提醒讀者,開源Asterisk或者FreeSWITCH都能非常智能地支持類似的功能,具體的設置語法包括:
  FreeSWITCH撥號規(guī)則中使用 <condition field="${sip_nat_detected}" expression="true">
  Asterisk中的PJSIP配置文件中的local_net 和external_media_address等參數
  如果通過FreePBX界面配置的話,參考www.freepbx.org.cn 的技術資料
  5、ALG超時設置和媒體轉發(fā)討論
  除了我們剛才討論的是否開啟ALG NAT功能以外,關于ALG設置還有兩個比較重要的功能,它們分別是ALG超時設置和ALG媒體轉發(fā)功能(sip-direct-media)。相對ALG地址的轉換以外,這兩個功能使用的場景可能相對比較少,但是它們有時仍然可能對呼叫產生一定的影響。在SIP會話處理過程中,一個呼叫可能涉及了多個定時器,包括最底層的路由器的UDP超時設置和SIP服務器/IPPBX端的SIP終端的會話的超時設置。但是,這些超時設置取值的大小會引起相互之間的沖突。例如,如果路由器的UDP超時設置是60秒的話,SIP服務器的SIP終端超時設置為120秒,那么,路由器中ALG的這個UDP超時會首先啟動,超時后,UDP端口可能就會關閉,SIP服務器仍然多關閉的端口發(fā)送SIP呼叫的話,最終呼叫就會失敗。因此,路由器的ALG超時設置一定要高于SIP服務器的各種會話超時設置-keepalive(注冊超時,option超時,呼叫超時設置)的最低值,這樣可以保證SIP服務器端的SIP終端可能始終獲得開放的UDP端口。
  在一些特殊情況下或者SIP服務提供商為了節(jié)省帶寬費用,SIP呼叫需要支持媒體轉發(fā)功能,繞過了SIP服務器的媒體處理能力支持,直接轉發(fā)到其他媒體服務器。通常情況下,如果需要支持類似的功能的話,技術人員需要在SIP服務器/IPPBX端進行設置,現在的PBX都有類似的功能支持。這樣的可以降低直接對接的SIP媒體服務器的負載,降低了帶寬資源的耗費,提高了點對點呼叫的效率提高,但是會導致SIP服務器錄音丟失,CDR記錄缺乏,缺乏呼叫控制等其他問題。路由器的ALG也可以支持類似的功能(sip-direct-media),如果用戶在路由器端的ALG上設置了類似的功能,那么,呼叫的媒體轉發(fā)就會直接在ALG上進行處理。
  6、ALG相關工具
  目前很多工具可以排查ALG的問題。Wireshark是首選的排查工具,用戶可以通過對路由器抓包來觀察進入路由器和離開路由器期間地址的變化。路由器開啟ALG以后,抓包測試SIP服務器地址,或者終端地址的變化。有時,一些用戶如果不能直接訪問路由器的設置的話,也可以下載測試工具來檢查自己的路由器是否開啟或者關閉了ALG設置。如下示例,如果筆者的網絡中支持了ALG開關,ALG檢測工具可以檢測到true或者false的設置。
  測試結果可以參照此說明來對照檢查:
  • If the results = False then a SIP ALG was not detected by the client.
  • If the results = True then a SIP ALG is active and must be turned off.
  另外一種sip-alg-detector是基于開源的項目,用戶可以下載到linux環(huán)境中來檢測是否開啟了ALG設置:
ruby sip-alg-detector-daemon.rb -i 99.88.77.66
  具體使用方式參考:
  sip-alg-detector
  https://github.com/ibc/sip-alg-detector
  7、路由器ALG功能的局限性
  當前的SIP呼叫業(yè)務的要求越來越復雜,本身路由器針對ALG功能支持相對比較簡單,它天生具有一定的局限性。所以,如果使用SIP呼叫時,很多用戶一般都關閉了ALG功能,通過SBC來處理SIP呼叫業(yè)務。現在,我們討論幾個關于ALG功能局限性話題:
  根據目前市場上,用戶對ALG的反饋,一些路由器廠家針對ALG或者SIP設置功能的支持不友好,帶來一些不穩(wěn)定的因素,所以很多用戶一般選擇關閉ALG功能。
  ALG在NAT處理過程中替換一些必要的地址,有可能會替換掉SIP消息中的Call-ID的IP地址參數。如果修改了call-id的話,就會導致整個SIP會話管理出現問題,同一呼叫中系統(tǒng)出現了不同的會話消息,呼叫就會失敗。
  一些兼容性不好的路由器針對ALG的語法構建支持不好,很多時候在重寫SIP消息時,可能會出現一些非法的字符,ALG處理以后的SIP內容格式破壞了SIP語法格式,SIP服務器端解析消息出現問題。
  ALG僅支持了SDP的Payload,缺少針對SIP的其他支持,例如加密的SDP,TLS,FQDN解析處理,SIP認證處理機制,IPv6環(huán)境中對SIP的支持比較弱等問題。
  針對SIP終端支持的BLF功能,其ALG兼容性相對比較弱(ALG僅支持3000-byte SIP 消息數據)。因為BLF需要產生大量的Notify消息,這些消息數據會超過ALG所限定的數據量。大家可以想象一下,如果幾百臺SIP話機都開啟了BLF功能的話,都需要經過ALG處理的話,它們之間相互交互交互就會導致路由器負載很高。如果因為大量數據交換引起系統(tǒng)的穩(wěn)定性問題,也可能最終導致其他的消息格式錯誤。因為UDP數據損壞導致的問題已經是SIP呼叫的一個大的問題。UDP Fragmentation Breaks SIP in Today's IP-PBXs
  http://blog.tmcnet.com/third-screen/2009/03/udp_fragmentation_breaks_sip_in_todays_ip-pbxs.html
  ALG缺少針對SIP methods和安全,其他SIP拓展的支持。市場上,大部分的路由器缺少專門針對SIP應用等功能比較完善的支持,一些廠家也針對ALG增加了一些針對SIP協(xié)議場景的拓展功能,因此,ALG功能得到了一定的提升。但是,其功能仍然很難完全滿足運營級SIP呼叫的業(yè)務需求。畢竟,路由器的產品定位和會話邊界控制器(SBC)的定位是不一樣的。因此,如果需要非常專業(yè)的專門針對SIP和媒體處理的業(yè)務需求,強烈建議用戶使用SBC來管理SIP呼叫和其他相關的業(yè)務功能。
  通過SBC實現SIP分機的外網注冊功能
  8、總結
  路由器的ALG配置一直是用戶非常關心的話題。筆者認為,通過本文章完整的介紹,讀者可以基本上了解了關于ALG的功能,啟用/關閉ALG的條件場景,以及ALG目前的局限性。
  首先,筆者介紹了ALG的使用背景和技術特點,然后筆者針對具體的場景分別做了不同的說明。用戶需要在什么時候開啟ALG功能,什么時候關閉ALG功能。通過非常細節(jié)的拓撲圖示例說明了工作的流程。然后,筆者介紹了幾款關于ALG檢測的實用工具,用戶可以直接通過本地根據來檢查路由器開啟狀態(tài)。最后,筆者討論了ALG的一些局限性,幫助讀者能夠對ALG有一個完整專業(yè)的認識,也幫助用戶能夠了解針對SIP的部署的解決方案-SBC。通過SBC部署滿足越來越復雜的SIP相關技術需求。
  最后,筆者這里再次說明,本人沒有可能耗費太多精力去測試多臺路由器的ALG功能,因此不會針對每一款產品做出非常準確的評價,因此,在文章編寫過程中可能出現一些錯誤的表述,望讀者諒解。因為路由器廠家對ALG功能支持的力度有所不同,可能導致不同的設置結果。因此,強烈建議讀者自己親自在自己的環(huán)境中,通過不同配置,然后使用排查工具來進行實驗驗證。
  參考資料:
  https://tools.ietf.org/html/rfc2663
  https://github.com/ibc/sip-alg-detector
  https://tools.ietf.org/html/rfc4566#section-5
  https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-3s/nat-xe-3s-book/iadnat-fw-sip-alg-hardng.html
  https://wiki.asterisk.org/wiki/display/AST/Configuring+res_pjsip+to+work+through+NAT
  https://www.researchgate.net/publication/291299719_Firewall-friendly_VoIP_secure_gateway_and_VoIP_security_issues/link/56c54e3a08ae736e704719a1/download
  https://support.ringlogix.com/index.php?/Knowledgebase/Article/View/167/38/sip-alg-detector
  https://fortinetweb.s3.amazonaws.com/docs.fortinet.com/v2/attachments/01b12c6d-1a17-11e9-9685-f8bc1258b856/fortigate-sip-60.pdf
  https://www.juniper.net/documentation/en_US/junos/topics/topic-map/security-sip-alg.html
  https://www.ecg.co/blog/125-sip-and-fragments-together-forever


  關注微信公眾號:asterisk-cn,獲得有價值的Asterisk/SIP技術和行業(yè)分享
  權威Asterisk freepbx FreeSBC技術文檔: www.freepbx.org.cn
  完整企業(yè)融合通信商業(yè)解決方案:www.hiastar.com
  如何使用FreeSBC+FreeSWITCH/Asterisk,qq技術分享群:334023047
【免責聲明】本文僅代表作者本人觀點,與CTI論壇無關。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

專題

CTI論壇會員企業(yè)

诸城市| 清河县| 普安县| 云龙县| 望都县| 乌海市| 浪卡子县| 那曲县| 延津县| 公安县| 波密县| 长春市| 白玉县| 鸡泽县| 江津市| 正蓝旗| 嘉义县| 贞丰县| 普定县| 封开县| 荥经县| 绥德县| 斗六市| 漳州市| 股票| 蓬莱市| 交城县| 吉首市| 中山市| 余庆县| 吐鲁番市| 大方县| 通道| 翼城县| 霍邱县| 景宁| 枝江市| 临武县| 玛纳斯县| 昔阳县| 且末县|