1. 程式人生 > >SIP穿越NAT SIP穿越防火墻-SBC

SIP穿越NAT SIP穿越防火墻-SBC

和源 消息 alt spl sim 連接建立 穿透 creat nec

FireWall&NAT
FireWall是一種被動網絡安全防衛技術,位於網絡的邊界。在兩個網絡之間運行訪問控制策略。防止外部網絡對內部信息資源的非法訪問,也能夠阻止特定信息從內部網絡被非法輸出。一般來說,防火墻將過濾掉全部不請自到的網絡通信(除指定開放的地址和port)。

NAT技術分為主要的網絡地址轉換技術(NAT)和網絡地址與port轉換技術(NAPT。Network Address and Port Translator),其主要功能是為流出內網的分組分配一個全局的IP地址和port號作為其源地址和源port號,並將此映射關系增加一個地址/port映射表。

對於外來分組,NAT server將利用地址/port映射表將外來分組的目的IP地址和port號正確的變換回內部主機所使用的內部IP地址和port號,然後再轉發給內網主機。

主要的NAT實現的功能非常easy,在子網內使用一個保留的IP子網段,這些IP對外是不可見的。子網內僅僅有少數一些IP地址能夠相應到真正全球唯一的IP地址。假設這些節點須要訪問外部網絡,那麽基本NAT就負責將這個節點的子網內IP轉化為一個全球唯一的IP然後發送出去。(主要的NAT會改變IP包中的原IP地址,可是不會改變IP包中的port)。

第二種NAT叫做NAPT。從名稱上我們也能夠看得出,NAPT不但會改變經過這個NAT設備的IP數據報的IP地址,還會改變IP數據報的TCP/UDPport。

基本NAT的設備可能我們見的不多。見下圖
技術分享

有一個私有網絡10.0.0.0,Client A是當中的一臺計算機,這個網絡的網關(一個NAT設備)的外網IP是155.99.25.11(應該另一個內網的IP地址。比方10.0.0.10)。假設Client A中的某個進程(這個進程創建了一個UDP Socket,這個Socket綁定1234port)想訪問外網主機18.181.0.31的2234port。那麽當數據包通過NAT時會發生什麽事情呢?

首先NAT會改變這個數據包的源IP地址,改為155.99.25.11。

接著NAT會為這個傳輸創建一個Session(Session是一個抽象的概念,假設是TCP,或許Session是由一個SYN包開始。以一個FIN包結束。而UDP呢,以這個IP的這個port的第一個UDP開始,結束呢,或許是幾分鐘,或許是幾小時),而且給這個Session分配一個port,比方62000,然後改變這個數據包的源port為62000。

所以本來是(10.0.0.1:1234->18.181.0.31:2234)的數據包到了互聯網上變為了(155.99.25.11:62000->18.181.0.31:2234)。

一旦NAT創建了一個Session後,NAT會記住62000port相應的是10.0.0.1的1234port。以後從18.181.0.31發送到62000port的數據會被NAT自己主動的轉發到10.0.0.1上。(註意:這裏是說18.181.0.31發送到62000port的數據會被轉發,其它的IP發送到這個port的數據將被NAT拋棄)這樣Client A就與Server S1建立以了一個連接。前面我們所說的在NAT上建立的那個Session,就是我們常說的:”在內網的NAT上打上一個’洞’”。這個洞不能由外部來打,僅僅能由內網的主機來打。而且這個洞是有方向的。

如上例所說的是從內部某臺主機(10.0.0.1)向外部的某個IP(18.181.0.31)發送一個UDP包。那麽就在這個內網的NAT設備上打了一個方向為18.181.0.31的”洞”。

以後18.181.0.31就能夠通過這個洞與內網的10.0.0.1聯系了。(此處說明一點,在NAT上打的這個”洞”僅僅能由這兩個IP使用。其它的IP不能利用這個洞進行通信。) 這就是稱為UDP Hole Punching的技術。

在沒有活動的時候,這個Hole會過期。NAT對於地址轉換關系是有一定生命期的,某個地址轉換後在一段時間內沒有被使用將會被清除。當這個業務流再次出現時。將會建立一個新的地址轉換關系。

NAT經常使用的分類例如以下:
Full Cone NAT(全然圓錐型)
Address Restricted Cone NAT(地址限制圓錐型 )
Port Restricted Cone NAT(port限制圓錐型)
Symmetric NAT(對稱型)

Full Cone NAT(全然圓錐型NAT )

在全然圓錐型NAT(Full Cone NAT)中,NAT會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定。不論什麽包都能夠通過地址{A:b}送到客戶主機的{X:y}地址上。如圖所看到的:
技術分享

Address Restricted Cone NAT(地址限制圓錐型)

地址限制圓錐型NAT(Address Restricted Cone NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定。僅僅有來自主機{P}的包才幹和主機{X:y}通信。

例如以下圖所看到的:
技術分享

Port Restricted Cone NAT(port限制圓錐型)

port限制圓錐型NAT(Port Restricted Cone NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定。僅僅有來自主機{P,q}的包才幹和主機{X:y}通信。

例如以下圖所看到的:
技術分享

Symmetric NAT(對稱型)

對稱型NAT(Symmetric NAT)會將客戶機地址{X:y}轉換成公網地址{A:b}並綁定為{X:y}|{A:b}<->{P:q}。對稱型NAT僅僅接受來自{P:q}的incoming packet,將它轉給{X:y} ,每次客戶機請求一個不同的公網地址和port,NAT會新分配一個port號{C,d} 。例如以下圖所看到的:
技術分享

部署SIP網絡出現的問題

基於SIP協議的語音和視頻會話採用主叫呼入方式(unsolicited incoming calls)。被叫方無法事先預知,所以終端必須隨時監聽外來的呼叫,這和前面介紹的防火墻工作原理是相悖的。即使打開防火墻上的一個port來專門接收呼叫信令。SIP語音和視頻通信協議還會動態分配別的port來傳送語音和視頻等媒體數據。

怎樣在不減少網絡安全性的前提下為防火墻後面的用戶提供安全的雙向通信就是一個重要問題。

同一時候NAT對SIP語音和視頻通信的傳輸有關鍵性的影響。首先,SIP會話信令(Layer 5)的SDP中包括了終端準備用來收發信令/媒體的地址和port信息。這些信息對NATserver是透明的,在經過NATserver之後保持不變。當位於內網的SIP終端作為主叫向外發起呼叫請求的時候,SIP信令經過NATserver之後僅僅有(Layer 3)的地址信息被改寫,而layer 5的會話信令中包括的地址信息被原封不動的送到了被叫,中間可能經過多個SIP Proxy,利用SIP協議的這一機制,主叫和被叫能夠完畢媒體協商過程。可是當被叫使用主叫的私有地址來發送媒體的時候,媒體流將發送失敗。總之,針對NAT 的解決方式必須保證安全的雙向通信,支持主叫呼入方式,同一時候要盡可能避免對NAT設備的改動或是依賴於特定類型的設備。


技術分享

NAT的經常使用解決方式

解決NAT穿越有非常多中解決方式,經常使用的有:

1、ALG(Application Level Gateway)

能夠識別SIP信令,能夠適當地改動數據包。

ALG能夠是單獨的連接於外網和內網之間的設備。也能夠是內置於防火墻內的插件。當FW/NAT發現外網呼叫信令為SIP時,將其轉發到ALG(應用層網關)。通過ALG建立起內網偽地址終端與外網終端的通信連接。


技術分享

經過NAT轉換後。到外網SIP包中via,contact。ower/creator,connection information均須要改為NAT外網IP。

使用ALG須要對現有設備升級改造。比如思科的路由器都支持配置ALG。光口板用的正是ALG功能。

附件為光口板sip alg功能所遇到的一些關鍵問題。

2、MidCom(Middlebox Communications)

MIDCOM技術是為了解決ALG和代理技術所共同擁有的可擴展性不強而出現的一種NAT穿越解決方式。MIDCOM技術是採用可信的第三方(MIDCOM Agent)對Middlebox(NAT)進行控制,由MIDCOM Agent控制Middlebox打開和關閉媒體port。

總的來說,MIDCOM技術是一種理想的NAT穿越解決方式,它將IP語音和視頻業務識別的智能從Middlebox轉移到外部的MIDCOM Agent上,應用協議對Middlebox來說是透明的。
  通常。MIDCOM Agent的功能能夠集成在呼叫控制server(如SIPserver、GK或軟交換設備)之中。而Middlebox功能集成在NAT之中,MIDCOM Agent和Middlebox之間接口採用MIDCOM協議完畢互通。

MIDCOM技術的優勢在於可擴展性強,新增應用僅僅需對MIDCOM Agent進行擴展。而不會導致MIDBOX又一次升級。

然而。MIDCOM技術的實施須要對server和現有的NAT須要同一時候進行MIDCOM協議的升級擴展。因此該方案的實施不可避免帶來了現有設備升級的困難。同一時候,MIDCOM協議尚處於不斷完好的階段。設備制造商提供的產品種類有限,因而現階段MIDCOM方式的實際應用並不多見。但能夠預見的是。隨著MIDCOM協議的不斷成熟和發展,該方式將獲得越來越多的應用前景。

使用MidCom須要對現有設備升級改造。

3、STUN(Simple Traversalof UDP Through Network)
技術分享

IETF RFC 3489定義了怎樣確定由NAT分配的公網地址和port,不須要改造現有NAT。

主要特色:
- 能夠讓client發現NAT的存在以及類型;
- 能夠讓client發現NAT的綁定生命周期。
- 能夠工作在多NAT串聯環境下。
- 非常easy的協議,易於實現。負載低;
- STUNserver能夠位於公網不論什麽地方。

適用範圍:

  • 不適用於Symmetric NAT。
  • 對於Non- Symmetric NAT都適用;
  • 假設兩方都位於同一個NAT之後。就不適用。

4、SBC(Session Border Controller)
技術分享

SBC是VoIP接入層設備。它通過在網絡的邊界處對會話進行控制來實現NAT/防火墻穿透功能。同一時候還能夠進行帶寬限制、會話管理、流量統計等。

其次。SBC還能夠被看作支持VoIP的代理server,能夠識別第五層和第七層的消息,而且還能夠處理第五層以上的眾多會話信令協議。改動數據包頭的地址,從而實現SBC內外網地址變換。

SBC的穿透過程遵循一定的通信模型,在模型中可將會話分解成若幹信道。

在信道層面,通過對信道進行建立、維護和刪除等操作保證信道的可用性,在會話層面,將不同信道進行連接和釋放等操作,能夠實現整個會話穿透過程。SBC位於兩個網絡的邊界,其架構一般包括兩個主要的功能模塊:Signaling Proxy 和Media Proxy。當中Signaling Proxy 負責處理SIP會話信令,而Media Proxy負責對媒體流進行控制。Signaling Proxy和Media Proxy之間使用特定的協議和接口(比如Megaco 協議)來交換信息。例如以下圖
技術分享

–Signaling Proxy

Signaling Proxy是一個高性能的B2BUA(Back to Back User Agent)。負責對全部經過此節點的雙向SIP會話信令進行必要的處理。在B2BUA中。當中一個作為UAS(User Agent Server)負責接收並處理主叫終端的會話請求,而另一個就作為UAC(User Agent Client)向下一跳發出會話請求。與代理server不同。B2BUA必須維護各個會話的狀態。並參與到會話建立的信令交互過程中。

為了確保SIP會話信令通過SBC,能夠改動域名server中相應於呼叫server(Call Server)的條目。將SBC的IP地址作為呼叫server的IP地址響應給進行DNS查詢的終端,終端就會把發往呼叫server的信令都直接發到SBC。這些改動對終端用戶是透明的,但SBC能夠獲得全部的呼叫信息,並能夠參與到呼叫建立的過程中去詳細實施控制。

其次,Signaling Proxy也必須對SIP會話信令中與信令和媒體有關的地址信息進行改動。

(1)SIP用戶註冊消息處理。Signaling Proxy在截獲SIP的用戶註冊消息之後。將使用自己的IP地址和port號改寫SIP頭標中的Via和Contact域。然後再發往呼叫server(SIP註冊server),這樣就能夠把SIP用戶的當前位置綁定在SBC上,當該SIP用戶作為被叫的時候。信令都會首先發至SBC。

同一時候,由於NATserver會在比較短的間隔內清除地址/port映射表中的UDP無效表項,所以當終端使用UDP來傳輸SIP信令的時候。位於NATserver之後的終端必須周期性(大概幾十秒)的向外部的呼叫server發送註冊消息。才幹夠使NATserver中相應於該終端的地址/port映射表項保持有效。

(2)SIP消息改寫,為了確保Signaling Proxy始終位於信令通路上,Signaling Proxy必須使用本地的地址和port號來改寫SIP消息中的Via和Contact域。

當使用內部地址的終端用戶向呼叫server發送信令的時候。經過Firewall/NAT之後的IP分組將使用NATserver分配的源地址和源port。收到此信令的Signaling Proxy就會在本地建立一個映射關系,NATserver將為此終端分配的地址和port號。以及Signaling Proxy為此會話分配的地址和port號綁定在一起。這樣。當反向信令到達Signaling Proxy的時候,Signaling Proxy將透過Firewall/NAT上正確的地址和port號將信令發送給終端。

(3)改動SDP,為了將Media Proxy增加到媒體通路中,SIP消息中的SDP部分也應當被改寫。SDP中包括了終端準備用來收發媒體的地址和port信息。當終端位於Firewall/NAT之後的時候。這些信息假設原封不動的送達通信對端。就會導致通信對端發送媒體流失敗。Signaling Proxy將通過Media Proxy分配本地的地址和port號。並使用本地的地址和port號改寫這些信息,就能夠保證雙向媒體流的建立。

Signaling Proxy僅僅對特定SIP信令消息中的特定域進行改動,其它的消息和域都將維持不變。

–Media Proxy

Media Proxy接受Signaling Proxy的控制,是會話兩方之間RTP/RTCP媒體流的轉換點。由於全部的媒體流都要經過Media Proxy,所以應當具有控制媒體流的能力。對服務質量進行管理,獲取計費信息及動態的網絡地址/port轉換等。

經過SBC信令和媒體流整個過程如圖2所看到的。當主叫的用戶代理(UA)發起呼叫的時候①,Signaling Proxy會在收到INVITE消息之後向Media Proxy申請分配本地的NAT地址和port(呼叫server側)②。並使用Media Proxy 返回的地址和port號③,改寫信令消息中攜帶的SDP。然後再發往呼叫server④。終於由呼叫server送達被叫方⑤。

當反向信令到達Signaling Proxy的時候⑥⑦。Signaling Proxy會再次向Media Proxy申請分配本地的NAT地址和port(主叫用戶側)⑧。並使用返回的地址和port號⑨改寫反向信令中攜帶的SDP,然後再發往主叫的用戶代理⑩。
技術分享

技術分享

經過這樣的信令處理之後,主叫和被叫都會將媒體流發往Media Proxy上指定地址和port,此時Media Proxy就能夠通過讀取媒體流的源地址和源port來確定位於NAT之後的主叫/被叫在其Firewall/NAT上所使用的全局地址和port。進而把通信對端的媒體流發往該地址/port。由於Firewall/NAT上已經存在了相應此全局地址/port的映射關系,Firewall/NAT會將此媒體流轉發給內部的終端,至此雙向的媒體連接建立成功。因此,SBC在不減少網絡安全性的前提下,為Firewall/NAT後的用戶提供了安全的雙向通信。

(1)動態的網絡地址/port轉換(NAPT),Media Proxy所具備的NAPT功能不僅能夠解決運營商網絡或用戶網絡的IPv4地址短缺問題,還隱藏了運營商網絡和用戶網絡的拓撲信息,增強了對拒絕服務(Denial of Service)攻擊的防禦能力,也保證了運營商網絡拓撲的機密性。

(2)產生計費信息。Media Proxy 是媒體流的必經之處,因此能夠對會話的時長、會話的類型(語音、視頻等)以及雙向的數據流量進行監視和統計。是產生CDR(Charge Detail Records)的合適位置。

(3)網間的QoS映射。IP頭標中的ToS域(Type Of Service)/DS域(Differentiated Service)指示了分組所應獲得的QoS(Quality of Service)級別。為了保證端到端的服務質量,必須在兩個網絡的邊緣完畢QoS映射。

當會話的IP分組在經過Media Proxy的時候,都攜帶了來源網絡所做的ToS/DS標記。Media Proxy能夠依據事先配置好的映射規則改變這些標記。再送入目的網絡中,從而保證該會話的QoS 在不同運營商的網絡內保持一致,也就是保證其端到端的QoS。

(4)IPv4到IPv6的協議轉換,當處在兩個異種網絡(IPv4/IPv6)邊緣的時候,Media Proxy還能夠提供這兩種IP協議的轉換。

Media Proxy由於其所處的特殊位置成為部署IPv4/IPv6協議轉換的理想設備。

5、rport機制

獲得IP地址是在Via頭中帶上received參數。為了得到port信息,也參考了這樣的方式。即在Via頭中帶上rport屬性來指明port信息。

當在client和server之間是NAT的時候,請求可能會在NAT中創建(或刷新)一個綁定。為了讓client收到響應信息。在事務處理的過程中這個綁定必須保持存在。大多數的NAT綁定有超過1分鐘的超時時間。這超過了non-INVITE事務的持續時間。因而對non-INVITE事務的請求的響應僅僅能在綁定存在的時候存在。

INVITE事務倒是不存在這個問題。

為了保持這個綁定。client應該在每隔20s左右重發INVITE請求。這樣的重發機制須要發生在收到一個暫時的響應後。

當然剛才所說的大概1分鐘的超時時間也不是確定的,有時候會比這長,此時重發機制能夠發慢一點,否則,能夠發快一點。這些問題可參考RFC3489。

假設是支持rport機制的server,它須要在接收到的請求中檢查Via頭是否包括一個沒有值的rport參數。

假設有,它須要在回應中帶上rport的值。這與received的處理相似。

為了穿越對稱性的NAT,響應須要發送到同樣的IP地址和port。當server在多port或接口的請求上監聽請求時,它必須記住請求是從何處發的。

對一個穩定的Proxy,在一個傳輸的持續時間中,記住這些東西是沒有問題的。可是對於不穩定的Proxy。它不存儲請求和響應中的狀態信息。為了達到本規範的要求。它須要將地址和port信息加密到Via頭字段中,在響應信息到達的時候。它能提取加密的信息並將它放到響應中。

rport機制須要終端支持該種機制,因此應用情況比較受限。

–實例

以下舉一個發送REGISTER信息的實例。在請求信息的Via頭中包括了沒有值的rport參數,例如以下所看到的:

REGISTER sip:124.40.120.188:5060 SIP/2.0

Via:SIP/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport

Max-Forwards:70

Contact: <sip:19988888888@192.168.2.65:12344;rinstance=7cd1c532e92fdb0e>;expires=0
To: "19988888888"<sip:19988888888@124.40.120.188:5060>
From: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
Call-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 1 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE,INFO
User-Agent: eyeBeam release 1105a stamp 56793
Content-Length: 0

發送到的server支持rport機制,它看到請求中的rport後,將通過分析UDP包信息得到的NAT的公網地址(124.42.4.203)和port信息(15500)分別作為received和rport屬性帶給client:

SIP/2.0 200 OK

Via: SIP/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport=15500;

received=124.42.4.203
From: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
To: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=0005-058-7d6dc90516ae2e21
Call-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 4 REGISTER
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,

NOTIFY,MESSAGE
Contact: <sip:124.40.120.188:5060>
Content-Length: 0

client在得到響應信息後。知道了所使用的公網地址和port,在而後定期重發的REGISTER信息中,Contact變換成124.42.4.203: 15500。比如新發的REGISTER信息變為:

REGISTER sip:124.40.120.188:5060 SIP/2.0
Via: SIP/2.0/UDP 124.42.4.203:15500;branch=z9hG4bK-d8754z-1049ed261d2e643d-1---d8754z-;rport
Max-Forwards: 70
Contact: <sip:19988888888@124.42.4.203: 15500;rinstance=7cd1c532e92fdb0e>;expires=0
To: "19988888888"<sip:19988888888@124.40.120.188:5060>
From: "19988888888"<sip:19988888888@124.40.120.188:5060>;tag=203ba359
Call-ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
CSeq: 2 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: eyeBeam release 1105a stamp 56793
Content-Length: 0

SIP穿越NAT SIP穿越防火墻-SBC