天天看點

NAT ALG原理與應用

1  NAT ALG簡介

普通NAT實作了對UDP或TCP封包頭中的的IP位址及端口轉換功能,但對應用層資料載荷中的字段無能為力,在許多應用層協定中,比如多媒體協定(H.323、SIP等)、FTP、SQLNET等,TCP/UDP載荷中帶有位址或者端口資訊,這些内容不能被NAT進行有效的轉換,就可能導緻問題。而NAT ALG(Application Level Gateway,應用層網關)技術能對多通道協定進行應用層封包資訊的解析和位址轉換,将載荷中需要進行位址轉換的IP位址和端口或者需特殊處理的字段進行相應的轉換和處理,進而保證應用層通信的正确性。

例如,FTP應用就由資料連接配接和控制連接配接共同完成,而且資料連接配接的建立動态地由控制連接配接中的載荷字段資訊決定,這就需要ALG來完成載荷字段資訊的轉換,以保證後續資料連接配接的正确建立。

2  NAT ALG特點

NAT ALG為内部網絡和外部網絡之間的通信提供了基于應用的通路控制,具有以下優點:

(1)    ALG統一對各應用層協定封包進行解析處理,避免其它子產品對同一類封包應用層協定的重複解析,可以有效提高封包轉發效率。

(2)    可支援多種應用層協定:FTP、H.323(包括RAS、H.225、H.245)、SIP、DNS、ILS、MSN/QQ、NBT、RTSP、SQLNET、TFTP等。

3  NAT ALG技術實作

先介紹ALG涉及到的兩個概念:

會話:記錄了傳輸層封包之間的互動資訊,包括源IP位址、源端口、目的IP位址、目的端口,協定類型和源/目的IP位址所屬的VPN執行個體。互動資訊相同的封包屬于一條流,通常情況下,每個會話對應出方向和入方向的兩條流。

動态通道:當應用層協定封包中攜帶位址資訊時,這些位址資訊會被用于建立動态通道,後續符合該位址資訊的連接配接将使用已經建立的動态通道來傳輸資料。

下面以多通道應用協定FTP在NAT組網環境中的ALG應用來具體說明封包載荷的轉換過程。

3.1  ALG與FTP的應用

FTP的兩種不同工作模式:PORT(主動模式)與PASV(被動模式)。

FTP需要用到兩個連接配接:控制連接配接與資料連接配接,控制連接配接專門用于FTP控制指令及指令執行資訊傳送;資料連接配接專門用于傳輸資料(上傳/下載下傳)。

3.1.1  主動模式(PORT)的連接配接過程

如​​圖1​​所示,位于内部網絡的用戶端以PORT方式通路外部網絡的FTP伺服器,經過中間的裝置進行NAT轉換,該裝置上使能了ALG特性。

NAT ALG原理與應用

                                                                                   圖1 FTP PORT方式封包載荷的ALG處理圖

圖1中私網側的主機要通路公網的FTP伺服器。NAT裝置上配置了私網位址192.168.1.2到公網位址8.8.8.11的映射,實作位址的NAT轉換,以支援私網主機對公網的通路。組網中,若沒有ALG對封包載荷的處理,私網主機發送的PORT封包到達伺服器端後,伺服器無法根據私網位址進行尋址,也就無法建立正确的資料連接配接。整個通信過程包括如下四個階段:

(1)    私網主機和公網FTP伺服器之間通過TCP三向交握成功建立控制連接配接。

(2)    控制連接配接建立後,私網主機向FTP伺服器發送PORT封包,封包中攜帶私網主機指定的資料連接配接的目的位址和端口,用于通知伺服器使用該位址和端口和自己進行資料連接配接。

(3)    PORT封包在經過支援ALG特性的NAT裝置時,封包載荷中的私網位址和端口會被轉換成對應的公網位址和端口。即裝置将收到的PORT封包載荷中的私網位址192.168.1.2轉換成公網位址8.8.8.11,端口1084轉換成12487。

(4)    公網的FTP伺服器收到PORT封包後,解析其内容,并向私網主機發起資料連接配接,該資料連接配接的目的位址為8.8.8.11,目的端口為12487(注意:一般情況下,該封包源端口為20,但由于FTP協定沒有嚴格規定,有的伺服器發出的資料連接配接源端口為大于1024的随機端口,如本例采用的是wftpd伺服器,采用的源端口為3004)。由于該目的位址是一個公網位址,是以後續的資料連接配接就能夠成功建立,進而實作私網主機對公網伺服器的通路。

在HOST(FTP用戶端)抓包如圖2所示:

NAT ALG原理與應用

                                                                                            圖2 PORT模式FTP用戶端抓包

在FTP伺服器端抓包如圖3所示:

NAT ALG原理與應用

                                                                                           圖3 PORT模式FTP伺服器端抓包

由上抓包可知:主動模式(PORT)的連接配接過程是:用戶端程式首先會為自己随機配置設定一個TCP 端口,它使用這個端口向伺服器的FTP端口(預設為21)發出連接配接請求,伺服器接受請求之後會建立一條控制鍊路,然後客戶程式向伺服器發出PORT指令(通常格式為PORT A1,A2,A3,A4,P1,P2,其中A1,A2,A3,A4為用戶端IP位址,P1,P2為随機的一個資料連接配接端口号,端口号等于P1*256+P2),告訴伺服器它的資料通道的端口打開了。當需要傳送資料時,伺服器向用戶端提供的随機端口發送連接配接請求,請求被接受之後便開始傳輸資料,主動模式下,需要做ALG處理的是用戶端發出的PORT封包,如FTP用戶端上抓包中的第13個封包,其中有一個包含位址和端口的字段為Request arg,如圖4所示:

NAT ALG原理與應用

                                                                                              圖4 ALG轉換前的PORT封包

FTP用戶端發出的PORT封包經過NAT裝置後對應FTP伺服器端上抓的第13個封包,私網位址192.168.1.2轉換成公網位址8.8.8.11,端口1084轉換成12487,如圖5所示:

NAT ALG原理與應用

                                                                                              圖5 ALG轉換後的PORT封包

3.1.2  被動模式(PASV)的連接配接過程

如​​圖6​​所示,位于外部網絡的FTP用戶端以PASV方式通路内部網絡的FTP伺服器,經過中間的裝置進行NAT轉換,該裝置上使能了ALG特性。

NAT ALG原理與應用

                                                                                   圖6 FTP PASV方式封包載荷的ALG處理圖

圖2中的NAT裝置上配置了私網位址192.168.1.1到公網位址8.8.8.2的映射,實作位址的NAT轉換。整個通信過程包括如下四個階段:

(1)    建立控制通道

用戶端向伺服器發送TCP連接配接請求。TCP連接配接建立成功後,伺服器和用戶端進入使用者認證階段。若TCP連接配接失敗,伺服器會斷開與用戶端的連接配接。

(2)    使用者認證

用戶端向伺服器發送認證請求,封包中包含FTP指令(USER、PASSWORD)及指令所對應的内容。用戶端發送的認證請求封包在通過配置了ALG的裝置時,封包載荷中攜帶的指令字将會被解析出來,用于進行狀态機轉換過程是否正确的檢查。若狀态機轉換發生錯誤,則丢棄封包。這樣可防止用戶端發送狀态機錯誤的封包攻擊伺服器或者非法登陸伺服器,起到保護伺服器的作用。用戶端的認證請求封包通過ALG處理之後,到達伺服器端,伺服器将對其進行響應。

(3)    建立資料通道

認證狀态正确且使用者是伺服器已經授權的用戶端,才能和伺服器建立資料連接配接,進行資料的互動。如​​圖6​​所示,當用戶端發送“PASV”指令發起連接配接時,伺服器會在發送給用戶端的PASV響應封包中攜帶自己的私網位址和端口号(IP1,Port1),響應封包經過ALG裝置時被解析,其中攜帶的伺服器的私網位址和端口号被轉換成其對應的公網位址和端口号(IP2,Port2),之後在該位址和端口與用戶端的位址和端口之間将建立起資料通道。

(4)    資料互動

用戶端和伺服器之間的資料互動可以直接通過資料通道來進行。

在FTP伺服器端抓包如圖7所示:

NAT ALG原理與應用

                                                                                          圖7 PASV模式FTP伺服器端抓包

由上抓包可知:被動模式(PASV)的連接配接過程是用戶端程式首先為自己随機配置設定一個TCP端口,使用這個端口向伺服器的FTP端口發出連接配接請求,伺服器接受請求之後會建立一條控制鍊路,然後用戶端程式發出PASV指令,要求伺服器采用PASV模式建立資料連接配接,伺服器便為自己随機配置設定一個資料通道端口,并将這個端口号告訴用戶端程式(通常格式為:Entering Passive Mode (A1,A2,A3,A4,P1,P2),其中A1,A2,A3,A4為伺服器IP位址,P1,P2為随機端口号)。當需要傳送資料時,用戶端程式采用另一個随機端口向伺服器提供的資料通道端口發送連接配接請求,請求被接受之後便開始傳輸資料,資料鍊路通道打開,被動模式下,需要做ALG處理的是伺服器發出的Pasv response封包,如上抓包中的第14個包,其中有一個包含位址和端口的字段為Response arg,如圖8所示:

NAT ALG原理與應用

                                                                                     圖8 需要做ALG的Pasv response封包

3.2  ALG與H323/SIP的應用

3.2.1  ALG與H323的應用

H.323協定用于發起會話,它能控制多個參與者參加的多媒體會話的建立和終結,并能動态調整和修改會話屬性,如會話帶寬要求、傳輸的媒體類型(語音、視訊等)、媒體的編解碼格式、廣播的支援等。

H.323協定采用Client/Server模型,如在圖9所示的語音組網中,主要通過網關(Gateway)與網守(Gatekeeper)之間的通信來完成使用者呼叫的建立過程。

網關(Gateway):用于連接配接H323電話終端;

網守(Gatekeeper):注冊/位置/代理伺服器,管理各gateway

NAT ALG原理與應用

                                                                                                  圖9 H.323語音應用組網圖

H323協定棧如圖10所示:

NAT ALG原理與應用

                                                                                                        圖10 H.323協定棧

由協定棧可知,H323是一個協定族,由衆多協定來完成位址定位,注冊,媒體協商等一系列工作。其中TCP/UDP載荷中帶有位址或者端口資訊,若在網關進行了NAT處理後,則需要進行ALG處理的有H.225、H.245、RAS等信令協定封包,具體為:

(1)    UDP RAS封包:gatekeeper、registar、admission的request和confirm封包

(2)    TCP H.225封包:setup、alerting、connect封包

(3)    TCP H.245封包:open logical chanel、open logical chanel ACK封包

H323通信中會建立4種連接配接:

RAS連接配接:網關與網守之間的UDP連接配接,源目的端口均是1719。

H.225連接配接:routed模式建立在網關與網守之間,redirect模式建立在網關與網關之間的TCP連接配接。源端口一般是發起方随機配置設定的,目的端口是1720。

H.245連接配接:routed模式建立在網關與網守之間,redirect模式建立在網關與網關之間的TCP連接配接。源端口一般是發起方随機配置設定的,目的端口通過H.225的connect封包協商。

RTP/RTCP連接配接:建立在網關與網關之間的UDP連接配接。源和目的通過H.245連接配接裡的open logical chanel及其ACK封包協商。

3.2.2  ALG與SIP的應用

SIP(Session Initiation Protocol,會話初始協定)是一個用于建立、更改和終止多媒體會話的應用層控制協定,其中的會話可以是IP電話、多媒體會話或多媒體會議。SIP是通過各種頭域裡的資訊的互動來管理會話的。而頭域裡與呼叫建立相關的包含IP位址和端口資訊的字段需要被ALG處理,否則無法正确進行呼叫。SIP UA直接呼叫組網如圖11所示(兩台路語音由器作為SIP UA,能夠互相直接呼叫):

NAT ALG原理與應用

                                                                                               圖11 SIP UA直接呼叫組網圖

SIP消息采用文本方式編碼,包括請求消息與響應消息兩類。SIP請求消息包括如下六種。

(1)    INVITE:用于邀請使用者加入一個呼叫。

(2)    ACK:用于對請求消息的響應消息進行确認。

(3)    OPTIONS:用于請求協商能力資訊。

(4)    BYE:用于釋放已建立的呼叫。

(5)    CANCEL:用于釋放尚未建立的呼叫。

(6)    REGISTER:用于向SIP注冊伺服器登記使用者位置等資訊。

SIP響應消息用于對請求消息進行響應,訓示呼叫或注冊的成功或失敗狀态。在請求與響應封包中需要進行ALG處理的位址字段類型主要有:Via、Record_Route、Contact、SDP。

ALG處理流程為如下三個步驟:

首先,ALG根據會話辨別的協定類型對封包進行解碼,若解碼發現封包為不需要做ALG或解碼發現為錯誤字段時退出,解碼發現需進行字段轉換時進一步處理;

其次,ALG查找接口上的NAT配置,根據NAT配置轉換封包中的IP位址、端口、call-id等資訊并建立關聯表,關聯表記錄了載荷位址的轉換關系;

繼續閱讀