一 前言
企業(yè)為了確保網絡安全,普遍部署各種防火墻,作為邊緣和隔離設備,將企業(yè)的信任和非信任網絡(一般外網非信任,內網為信任)分隔開來,避免直接訪問。同時,防火墻兼具NAT功能,隱藏內網并代理內網對外網的訪問。
由于防火墻的存在,部署SBC變得較為復雜。某些情況下還需要防火墻的配合,才能夠完成SIP信令和語音流的防火墻/NAT穿透。
就防火墻和SBC的位置關系,一般分成兩種模式:近端防火墻,也就是SBC在防火墻內,對接的設備在近端防火墻外或者在遠端防火墻內;遠端防火墻,也就是SBC在防火墻外,對接的設備在防火墻內。
這兩種模式下,毅航互聯(lián)SBC均可以完成信令和媒體的正確穿透。
二 方案簡介
1 概述
毅航互聯(lián)SBC充分考慮了近端和遠端防火墻對信令和媒體的影響。在信令層面通過對From/To/Contact/rport/SDP等IP地址進行處理,反映出實際的對接地址,避免信令不通,摘機超時,掛機掛不斷等問題。
同時,SBC支持OPTIONS/REGISTER等心跳模式(接收或者發(fā)送),用于保持防火墻的session(保活),保證防火墻/NAT的端口可用和不變化。
媒體通過識別遠端的IP/PORT,然后向這個IP/PORT發(fā)送媒體包的方法,達到各種NAT情況的穿透。
合理的防火墻穿透方式,防火墻/NAT有各種模式和對應的各種穿透方式。但是,較為合理的穿透方式是從防火墻外網IP/PORT收到包,回應或者主動發(fā)的包再送回這個IP/PORT。
示意圖如下圖:

2 防火墻SIP ALG
由于現在的防火墻普遍內置SIP ALG(應用層代理),此功能會對SIP信令和媒體產生很大的影響。但是,由于ALG的實現一般不完善,很容易使得信令和數據不通和單通等各種問題,導致各種不可預測的問題,所以需要將防火墻的SIP ALG功能關閉。
毅航互聯(lián)在大量的工程支持中,SIP ALG基本上都會導致問題。建議將此作為一個部署的前置檢查項,避免在聯(lián)調時再檢查,會耗費比較多的時間。
3 遠端防火墻
當SBC對接的設備處于防火墻之內,SBC處于防火墻外時,就構成了遠端防火墻模式。比如:SBC放公網,代理內網的座席注冊;或者對接內網的PBX等等。
由于NAT的存在,SBC看到的SIP信令信息和媒體的信息均和原始的信令不同,必須采用一些特別的處理方式來應對這種情況。
邏輯結構
遠端防火墻的示意結構如下圖:

注意:
圖中用單層防火墻做示意,實際上這種模式可以支持多層防火墻。
SBC可能在防火墻內。這種模式放到近端防火墻做討論,不影響遠端防火墻的邏輯結構。
一般將防火墻內的設備作為客戶端,毅航互聯(lián)SBC作為服務端,便于建立和維持互通。
信令配置
為了自動的遠端防火墻穿透,一般將防火墻內部的設備(座席、PBX等)作為客戶端,而防火墻外部的SBC作為服務端。
由客戶端向服務器發(fā)起周期性的心跳(比如:注冊REGISTER、OPTIONS等),周期時間控制在120s以內,這樣就可以維持防火墻的session,達到;畹哪康模ㄒ簿褪欠阑饓Σ魂P閉外網的端口,SBC可以從這個端口向內網設備主動發(fā)信令消息)。
各種內網設備均有自己不同的配置界面,一般都可以找到相應的注冊和OPTIONS的配置。找到相應的配置后,按照要求進行配置后即可。SBC側無需對信令做特別配置。
對于像PBX等設備,可能不能夠配置為客戶端,此時需要在防火墻上做映射,將PBX的信令IP/PORT映射到防火墻的外網,這樣SBC才能夠訪問。
毅航SBC支持SIP在TCP協(xié)議上傳輸,如果UDP穿透存在難以配置的情況,也可以通過采用TCP協(xié)議來完成信令的穿透。采用TCP協(xié)議時,建議采用永久連接,避免連接斷開而導致防火墻的阻斷。
信令穿透
內網設備無需做特殊的協(xié)議修改,所有的穿透由SBC完成。
由于內網設備配置的是內網IP地址,經過防火墻后,這些地址對于SBC來講是無效的(無法訪問),如果根據這些地址作為后續(xù)信令的傳輸地址,將無法通信。
比如:發(fā)送掛機BYE SIP信令時,遠端地址來自于內網設備 INVITE SIP信令Contact頭域中的IP地址和端口。此時肯定是內網的IP地址,就會導致BYE SIP信令無法觸達內網設備,導致不能夠掛機。
又比如:SBC會根據INVITE SIP信令中的From/To/Contact等頭域中的IP地址校驗有效性,或者進行中繼組的匹配。穿透模塊會用TCP/IP協(xié)議棧的真實IP/PORT替換相應的域,達到有效校驗或者匹配的目的。
毅航SBC會用從網絡協(xié)議棧收到的真實IP/PORT替換上述的關鍵頭域中的IP/PORT等信息,滿足安全和中繼組識別等要求。并且將給內網設備的SIP信令送給上述真實的IP/PORT,保證了信令可以觸達內網設備。
媒體穿透
和信令類似,SBC在收到內網設備發(fā)送的RTP/RTCP包后,識別出真實的IP/PORT,然后將送給內網設備的RTP/RTCP包轉發(fā)到此IP/PORT,完成穿透。
毅航SBC的媒體引擎有多種模式用于幫助媒體的穿透和適應變化:
斷流檢測
在一定時間內沒有收到對端的RTP包視為斷流,將觸發(fā)告警,用于主動掛機或者reinvite重協(xié)商。
NAT等待
在未收到對端包,端點學習未完成的情況下,不執(zhí)行向這個端點的包轉發(fā)。
非對稱端點
只接受SDP中地址的包,關閉遠端端點學習功能。
嚴格端點地址
執(zhí)行一次遠端端點學習,識別出遠端端點后,將只轉發(fā)此端點的包。
端點開放模式
轉發(fā)過程中會重學習,可能導致遠端端點的切換。
4 近端防火墻
當SBC處于防火墻之內時,就構成了近端防火墻模式。由于近端防火墻/NAT的存在,防火墻和SBC均需要做一些配置才能夠完成穿透功能。
邏輯結構
近端防火墻的示意結構如下圖:

如下圖,外部網絡處于防火墻內部也是比較常見的場景,此情況也歸類為近端防火墻,要求是相同的。

注意:
近端防火墻盡量使單層防火墻,如果是多層防火墻,可能會涉及到每層防火墻的修改,導致維護上的問題。
遠端設備是否在防火墻內,不影響近端防火墻的邏輯結構。
一般將毅航互聯(lián)SBC作為服務端,遠端設備作為客戶端,便于建立和維持互通。
防火墻配置
需要將SBC的地址映射到防火墻的外網,并且可以只開放信令端口和媒體端口段。映射建議采用簡單的開端口模式(有些叫開服務),避免復雜的IP地址替換之類的策略,避免對原始數據的修改,從而影響穿透的效果。
注意:
防火墻開端口不修改防火墻的安全和過濾規(guī)則,不要降低防火墻的安全要求。
建議打開的SIP信令端口和SBC上配置的信令端口相同,減少問題查找時的轉換。
媒體端口需要開放一個端口段,缺省為40000~60000?梢愿鶕l(fā)(一通音頻呼叫需要兩個UDP端口)量調整端口段的范圍,此值必須和SBC上的配置一致。
上述端口轉發(fā)的規(guī)則是一一對應的。也就是防火墻40000端口收到包,需要轉發(fā)到SBC的40000端口,其他依次類推。
SBC信令配置
需除了在防火墻外網配置信令的IP和端口外,還需要在對接的SBC SIP棧上配置相應的信息,用于在送給遠端設備的信令中反映出這種變化。要在SIP棧上面進行的配置如下圖:

SBC媒體配置
目前采用修改配置文件的方式,后續(xù)會在web上進行修改。

三 問題分析
日志分析
當出現問題時,建議首先進行日志分析,確認SBC收到呼叫,并且動作正常。
抓包分析
由于在防火墻上抓包可能會比較困難,首先需要在SBC上進行抓包,分析呼叫流程是否正確,媒體流是否存在?
在SBC上確認正常后,就需要防火墻配合抓包,此時就需要防火墻對內外網均抓包,查看問題是出在外網、內網還是防火墻的轉發(fā)規(guī)則。