SIP NAT/FW

來源:互聯網
上載者:User
SIP NAT/FW


預設字型9pt10pt11pt12pt13pt14pt15pt16pt17pt18pt20pt25pt30pt35pt40pt45pt50pt

NAT和Firewall的基本原理
首先,NAT的幾種方式:

Full Cone:當一台私網內的主機向公網發一個包,其本地地址和連接埠是{A:B},NAT會將其私人地址{A:B}轉換成公網地址{X:Y}並綁定。任何包都可以通過地址{X:Y}送到該主機的{A:B}地址上,NAT會將任何發送到{X:Y}的incoming包的地址{X:Y}轉換成{A:B}。

Partial/Restricted Cone:當一台私網內的主機向公網發一個包,其本地地址和斷口是{A:B},NAT會將其私人地址{A:B}轉換成公網地址{X:Y}並綁定。任何包都可以通過地址{X:Y}送到該主機的{A:B}地址上,但是,NAT只為第一個發往{X:Y}的包綁定成{A:B}|{X:Y}<->{C:D},其中{C:D}是那個包的源地址和連接埠。也就是說,只有來自{C:D}的包才能於主機{A:B}通訊。

Partial和Restricted Cone的區別是Partial只綁定incoming packet 的IP地址,而Restricted Cone會綁定incoming packet的IP地址和連接埠。也就是上面描述的那種情況。

Symmetric Cone:當一台私網內的主機向公網某台主機發送一個包,{A:B}à{C:D}。NAT會將其地址{A:B}轉換成{X:Y},並為其綁定成{A:B}|{X:Y}<->{C:D}。NAT只接受來自{C:D}的incoming packet,將它轉給{A:B}。也就是說,如果私網內的主機要向外面發送一個包,它必須要知道對方的公網IP和連接埠。但如果對方也是處於一個私網內,它就很難獲知對方的公網IP和連接埠。

由此可見,Symmetric Cone條件最嚴格,Partial/Restricted Cone次之,Full Cone條件最不嚴格。

下面再看看Firewall的基本策略:

l         Firewall會判斷所有的包是來自內部(Inside)還是外部(Outside)。

l         一般,允許所有來自inside的包發出去。

l         一般,允許來自Outside的包發進來,但這個串連必須是由Inside發起的。

l         一般,禁止所有串連由Outside發起的包發進來。

l         一般,firewall會允許幾個信任的outside主機,他們可以發起建立串連,並發包進來。

所有NAT和Firewall都是對於TCP/IP層以下進行處理和過濾的,而SIP應用的地址是在應用程式層。所以必須採用其他的途徑來解決這一問題。

針對不同的NAT類型,可以有不同的解決方案。

l         UPnP

l         External Query

l         STUN

l         ALG

其中前3種都是由SIP Client(包括UA和Proxy)通過某種手段或協議在INVITE之前擷取自己的公網地址和連接埠。需要SIP Client提供額外支援,並且也不適應所有的NAT方式。

ALG(Application Layer Gateway)適應所有NAT方式,並不需要SIP Client做任何額外的支援。它對Application層的SIP信令進行處理和修改,從而做到透明轉換地址。

下面針對一個案例詳細描述ALG的解決方案。

SIP ALG解決方案
ALG修改SIP訊息裡面的SIP地址和連接埠和SDP訊息裡面的RTP地址和連接埠,其中RTP地址和連接埠要向RTP Proxy請求獲得,RTP Proxy分配自己的一個閒置地址和連接埠,並和這個Call保持映射關係。並為分配給呼叫雙方的地址和連接埠進行綁定,這樣,呼叫雙方的RTP串連地址都是RTP Proxy,由RTP Proxy經過中轉,發至真正的目的地。
假設,有兩個SIP Client要進行通訊,Ada和Bob,他們分別位於自己的Nat Server後面:

其中兩台NAT Server都是Symmetric Cone方式。

其信令流程如下:

1.         Ada發起信令,Invite Bob。

IP Packet IP Address:

From: 192.168.1.10:5060

T 128.97.41.56:5060 (SIP ALG)

SIP Msg IP Address:

From: 192.168.1.10:5060

T 128.97.41.56:5060

SDP Body IP Address for RTP:

192.168.1.10:10024

2.         經過NAT Server,NAT將其私人地址轉換成公網地址,並綁定,由於是採用Symmetric Cone方式,所以還綁定目的的IP地址。

{192.168.1.10:5060}|{128.96.41.1:5678}<->{128.97.41.56:5060}

IP Packet IP Address:

From: 128.96.41.1:5678

T 128.97.41.56:5060 (SIP ALG)

SIP Msg IP Address:

From: 192.168.1.10:5060

T 128.97.41.56:5060

SDP Body IP Address for RTP:

192.168.1.10:10024

3.         SIP ALG接受到該INVITE,發現其包的IP地址和SIP IP地址不同,就判斷其是經過NAT,於是就將其相關的SIP IP地址修改。

並檢查它的Body中是否是包含SDP資訊,如果是,且有RTP地址,SIP ALG就會去向RTP Proxy請求一個公網RTP地址來代替原有的RTP地址。

IP Packet IP Address:

From: 128.97.41.56:5060

T 128.96.63.25:5566

SIP Msg IP Address:

From: 128.96.41.1:5678

T 128.96.63.25:5566(下一跳的地址)

SDP Body IP Address for RTP:

128.97.44.5:3000

4.         因為Bob不斷的向SIP ALG發送註冊包,所以,它的NAT Server始終為它保留著這麼個綁定,{10.0.0.12:5060}|{128.96.63.25:5566}<->{128.97.41.56:5060}。所以,由SIP ALG發出的INVITE,Bob能收到。

Bob返回200 OK,包含SDP資訊。

IP Packet IP Address:

From: 10.0.0.12:5060

T 128.97.41.56:5060

SIP Msg IP Address:

From: 10.0.0.12:5060

T 128.97.41.56:5060(下一跳的地址)

SDP Body IP Address for RTP:

10.0.0.12:10002

5.         NAT Server將其包的IP地址修改。發往SIP ALG。

6.         SIP ALG接受到該200 OK,發現其包的IP地址和SIP IP地址不同,就判斷其是經過NAT,於是就將其相關的SIP IP地址修改。

並檢查它的Body中是否是包含SDP資訊,如果是,且有RTP地址,SIP ALG就會去向RTP Proxy請求一個公網RTP地址來代替原有的RTP地址。

IP Packet IP Address:

From: 128.96.63.25:5566

T 128.96.41.1:5678

SIP Msg IP Address:

From: 128.96.63.25:5566

T 128.96.41.1:5678(下一跳的地址)

SDP Body IP Address for RTP:

128.97.44.5:3002

7.         此時,RTP Proxy為這個Session保持著這麼個串連綁定

{128.97.44.5:3000|128.97.44.5:3002}

8.         Ada收到200 OK,它認為對方的RTP地址是128.97.44.5:3002。將與其建立串連。

而Bob認為對方的RTP地址是128.97.44.5:3000。將與其建立串連。

9.         當RTP Proxy的3002連接埠收到包,它可以從包地址獲得Ada的RTP公網IP。

當RTP Proxy的3000連接埠收到包,它可以從包地址獲得Bob的RTP公網IP。

從而,RTP Proxy會將3002連接埠收到的包轉寄到Bob的RTP公網IP。

同樣,RTP Proxy會將3000連接埠收到的包轉寄到Ada的RTP公網IP。

這樣,一個通話的串連就成功建立。

SIP ALG的部署
因為無論如何,都需要所有RTP包經過RTP Proxy,所以所有的MS都要有修改SDP的能力,而只有SIP ALG需要有修改SIP訊息的能力。讓使用者配置自己的Proxy是什麼,避免公網的SIP Client也經過SIP ALG,造成沒必要的消耗。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.