一種保證網絡地址轉換設備與外網互通的方法
2023-05-31 23:11:31
專利名稱:一種保證網絡地址轉換設備與外網互通的方法
技術領域:
本發明涉及網絡通信領域,特別涉及通過網絡地址轉換進行網絡互聯的方法。
背景技術:
隨著網際網路的迅速發展,網際網路網絡地址日益面臨被耗盡的危險。為了使區域網中的多臺主機能夠通過有限的幾個公網地址接入Internet,一種NAT(Network Address Translation,即網絡地址轉換)技術應運而生。NAT技術是一種地址轉換技術,通常用於內部網絡內具有私有IP位址的主機訪問外部網絡時,將該主機的內部局部地址(Inside Local Address)轉換為一個外部唯一可識別的合法IP位址(Inside Global Address);同時,將外部網絡返回給內部網絡主機的合法IP位址(Inside Global Address)映射回在內部網絡中該主機的私有IP位址(Inside Local Address),使得不同私有網絡可以使用相同的私有IP位址段,並能和外部網絡進行正常通信,卻不會導致地址信息出現混亂。從而擴展了IP位址的應用範圍,在一定程度上緩解了當前IPv4地址空間不足的問題。
在NAT技術中有一種動態可重用NAT的技術,也叫做NAPT(NetworkAddress Port Translation,即網絡地址埠轉換)或者PAT(Port AddressTranslation,即埠地址轉換),該技術根據內部主機的IP位址加埠對(IP,Port)來進行NAT轉換。由於每一個可分配的內部全局地址都有近64K個埠可以用來做埠地址轉換,所以如果在內部全局地址池裡有N個地址的話,就可以對內部網絡實現N*64K個IP位址加埠對進行NAT轉換,大大地擴充了可進行NAT轉換的內部網絡主機數量。這種技術對於TCP/UDP(傳輸控制協議/用戶數據報協議)報文是非常合適有效的,但是對於ICMP(網際網路控制消息協議)報文,由於報文沒有埠,似乎就無法處理了。目前的解決方案是利用ICMP Identifier(ICMP標識)(下面簡稱ICMP ID)來代替報文的源埠,從而通過IP位址加ICMP ID來進行NAT轉換。
由於公網地址非常緊缺和寶貴,為了節約公網地址資源,還開發了一種動態埠轉換復用接口地址NPAT的技術,該技術將NAT設備的接口地址配置在NAT地址池中,它通過埠區分的方式,不僅能使NAT設備可以和外部網絡進行正常通信,還能進行正常的PAT功能。
對於採用這種技術的NAT設備上,對於TCP/UDP的應用所使用的埠一般都小於某個固定值A,因此只要在PAT轉換中不分配A以下的埠值,就可以保證NAT設備既可以和外部網絡進行正常通信,同時也可以正常進行PAT轉換。但是,對於NAT設備生成的ICMP報文來說,其ICMP ID的值為1~65535,不會小於某個固定值A。而在現有的NPAT技術實現中,對於ICMP報文的PAT轉換是利用ICMP ID代替埠進行轉換的,即分配的埠值與ICMP ID相同。因此,它存在著一個明顯的缺陷,即一旦NAT設備生成的ICMP報文中的ID與NAT映射條目中分配的埠相同時,就會產生埠衝突,從而導致內部主機通過NPAT轉換ping不通外部主機(或網絡),或者NAT設備ping不通外部主機(或網絡)。
同樣,當NAT設備在outside(外部)接口接收到目的地址為本地地址的ICMP報文,並且報文中的identifier與ICMP映射條目中的埠值相同時,也無法判定該報文是發送到本地設備的還是需要進行NAT轉換送往內部主機(或網絡)的,從而導致外部主機ping不通NAT設備。
發明內容本發明要解決的技術問題是提供一種保證網絡地址轉換設備與外網互通的方法,能夠避免NAT設備生成的ICMP報文與轉發ICMP報文產生埠衝突。
為了解決上述技術問題,本發明提供一種保證網絡地址轉換設備與外網互通的方法,應用於網絡地址轉換設備,該設備包括用於轉發網際網路控制消息協議ICMP報文的網絡地址轉換NAT模塊和用於收發和處理本地ICMP報文的ICMP模塊,該方法包括以下步驟(a)當NAT設備從內部接口收到ICMP報文,NAT模塊判斷該報文需要進行埠地址轉換PAT但沒有相應映射條目,且為其分配了本地地址和埠時,向ICMP模塊發送申請預留消息,攜帶該埠的值;(b)ICMP模塊收到所述申請預留消息後,判斷與該埠值相同的ICMP標識是否已使用,如果是,回復失敗消息,執行步驟(c);否則預留與該埠值相同的ICMP標識不再分配,回復成功消息,執行步驟(d);(c)NAT模塊收到失敗消息後,重新分配埠,再次向ICMP模塊發送申請預留消息,返回步驟(b);(d)NAT模塊收到成功消息後,在映射表中創建該ICMP報文的映射條目,進行正常的NAT轉發。
進一步地,上述方法還可具有以下特點還包括以下釋放預留的ICMP標識的處理過程(h)NAT模塊需要刪除PAT映射條目時,如果該條目的協議類型是ICMP協議且內部全局地址為本地地址,則提取該條目中分配的埠值,向ICMP模塊發送釋放消息;(i)ICMP模塊收到該釋放消息後,釋放預留的與該埠值相同的ICMP標識,向NAT模塊回復釋放成功消息;(j)NAT模塊收到釋放成功消息後,直接刪除該映射條目。
進一步地,為了正確區分從外部接口接收的ICMP報文是需要進行NAT轉發還是由本地ICMP模塊處理,本發明方法還包括以下對外部接口收到的ICMP報文的處理過程(o)NAT設備從外部接口收到ICMP報文,如該報文需NAT轉換,由NAT模塊查映射表中是否有該ICMP報文的映射條目,如果有,執行步驟(p),如果沒有,執行步驟(s);步驟(p),NAT模塊再判斷該映射條目是否PAT映射條目,如果是,執行步驟(q),否則按正常的NAT轉發處理,結束;
步驟(q),判斷該ICMP報文的類型是否響應報文,如果是,執行步驟(r),否則,執行步驟(s);步驟(r),進行NAT的轉發處理,結束;步驟(s),將該ICMP報文交給ICMP模塊處理,結束;進一步地,上述方法還可具有以下特點所述步驟(a)NAT模塊向ICMP模塊發送申請預留消息後,記錄分配的埠值並等待ICMP模塊的應答消息,如果等待超時,則向ICMP模塊重發該申請預留消息。
進一步地,上述方法還可具有以下特點所述步驟(h)和步驟(p)中,NAT模塊是通過映射條目的埠值判斷該條目是否為PAT映射條目,如埠值不為0,則該條目是PAT映射條目,否則不是PAT映射條目。
進一步地,上述方法還可具有以下特點所述步驟(o)中,NAT設備是通過以下方式判斷收到的ICMP報文是否需進行NAT轉換的根據該報文的目的地址查找路由,如路由條目中的NAT標誌被置位,則認為該ICMP報文需進行NAT轉換。
由上可知,本發明在原有的技術基礎上增加了NAT模塊與ICMP模塊之間的交互,使得NAT設備生成的ICMP報文的ID不會與PATICMP映射條目中的埠衝突,保證NAT設備能夠正確區分本地接收的ICMP報文,使得NAT設備可以和外部網絡在進行ping操作時可以互通。
圖1是NAT設備網絡通信示意圖;圖2是本發明實施例中NAT設備在Inside接口接收到ICMP報文後處理的基本流程圖;圖3是本發明實施例中NAT設備釋放預留的ICMP ID的基本流程圖;圖4是本發明實施例中ICMP模塊收到ID申請預留消息的基本流程圖;圖5是本發明實施例中NAT設備在outside接口接收到目的地址為本地地址的ICMP報文後,NAT模塊處理的基本流程圖。
具體實施方式下面結合附圖和實施例對本發明做進一步地詳細描述。
為了清楚說明,我們將NAT設備中進行埠地址轉換的部分稱為NAT模塊,將生成和處理ICMP報文的部分稱為ICMP模塊。
圖2示出了本發明實施例中NAT設備在Inside(內部)接口方向接收到內部主機發送的ICMP報文後的處理流程,當系統判定報文需要進行NAT轉換並需要新創建映射條目時,NAT模塊進行如下步驟的處理步驟100,判斷該ICMP報文需要進行的轉換是否PAT轉換,如果是,進行步驟110;否則進行正常NAT轉換流程,結束;步驟110,提取ICMP報文中的源地址和ID號查找NAT轉換條目映射表,如果查找失敗,即映射表中沒有相應的映射條目,則進行步驟120,否則直接進行NAT轉換,結束;步驟120,為該ICMP報文分配內部全局地址和埠;步驟130,判斷內部全局地址是否為本地地址,如果是,表示該ICMP報文需要進行的轉換是NPAT轉換,進行步驟140,否則,表示該ICMP報文需要進行的是普通的PAT轉換,則進行正常NAT轉換流程,結束;步驟140,記錄分配的埠值,並向ICMP模塊發送ID申請預留消息,該消息中包括分配的該埠值;步驟150,等待ICMP模塊的應答消息,如果等待超時,進行步驟160,如果收到返回的響應消息,進行步驟170;步驟160,向ICMP模塊重發ID申請預留消息,返回步驟150;步驟170,判斷接收的消息類型,如果為申請預留成功消息,則進行步驟180;如果是申請預留失敗消息,表示ICMP模塊中與分配埠相同的ID已經被使用,則重新分配本地地址和埠,進行步驟130;步驟180,在映射表中創建內部主機IP、ICMP ID號與分配的內部IP位址、公用埠的PAT映射條目,然後進行正常的NAT轉發。
圖3示出了本發明實施例中NAT模塊刪除映射條目的處理流程,當NAT模塊在準備刪除一條映射條目時,進行如下步驟步驟210,判斷該映射條目是否為PAT映射條目且協議類型為ICMP類型,如果是,進行步驟220;否則進行正常NAT刪除操作,結束;本實施例是根據映射條目中的埠值來判斷是否為PAT映射條目的,PAT映射條目的埠值不為0,非PAT映射條目的埠值為0。
步驟220,判斷該映射條目的內部全局地址是否為本地地址,如果是,進行步驟230;否則進行正常的PAT條目刪除操作,結束;步驟230,提取該映射條目中的埠值並向ICMP模塊發送ICMP ID釋放消息,該釋放消息中包括該埠值;步驟240,當收到ICMP模塊發送的ICMP ID釋放成功消息後,直接刪除該映射條目。
圖4示出了本發明實施例中ICMP模塊接收到來自NAT模塊的消息後的流程,包括如下步驟步驟310,判斷接收的消息類型,如果是ICMP ID申請預留消息,進行步驟320;如果為ICMP ID釋放消息,進行步驟350;步驟320,根據該申請預留消息中的埠值判斷與該值相同的ICMP ID是否已經被使用,如果是,進行步驟330;否則進行步驟340;步驟330,向NAT模塊發送申請預留失敗消息,結束;步驟340,預留該ICMP ID值,不再分配給ICMP報文,並向NAT模塊發送「申請預留成功」消息,結束;步驟350,根據該釋放消息中的埠值,找到並釋放值與該埠值相同的ICMP ID,並向NAT模塊發送「釋放成功」消息。
在本實施例中,在現有的技術基礎上增加了NAT模塊與ICMP模塊之間的交互,在NPAT轉換時,通知ICMP模塊預留了值與NPAT轉換中埠值相同的ID,在NAT設備生成ICMP報文時,就不會使用該ID,由此,NAT設備生成的ICMP報文的ID就不會與PAT ICMP映射條目中的埠衝突了。因而避免了埠衝突。不會出現內部主機通過NPAT轉換ping不通外部主機(或網絡),或者NAT設備ping不通外部主機(或網絡)的情況。
但是,對於外部主機ping NAT設備的情形,由於在外部主機ping NAT設備時,ICMP報文中的ID是外部主機生成的,其ID值無法控制。因此,在outside接口收到目的地址為本地地址的ICMP報文且報文中的ID與ICMP映射條目中的埠值相同時,由於該埠值即可能是分配給內部主機發送的ICMP,也是能是分配給ICMP模塊發送的ICMP,所以,還是無法判定該報文是發送到本地設備的還是需要進行NAT轉換送往內部主機。
圖5示出了本發明實施例當NAT設備從外部接口接收到ICMP報文後的流程,包括如下步驟步驟410,判斷接收到的ICMP報文是否需要進行NAT轉換,如果是,進行步驟420;否則進行普通的報文轉發流程,結束;在本實施例中,根據報文目的地址查路由,如果發現NAT標誌被置位,則表示路由條目是NAT轉換生成的,需要進行NAT轉換。
步驟420,將報文送到NAT模塊;步驟430,通過該ICMP報文的源IP位址和ICMP ID號來查映射表,如果查到,進行步驟440,如果查不到,進行步驟460;對於發送給NAT設備的應答報文,查找映射表時肯定失敗,因為NAT設備發出的ICMP報文,報文的ID不會和NAT映射條目中的埠值相同,這就是前面預留ICMP ID的目的,此時應交給ICMP模塊處理。只有是發往內部主機的應答,查映射表時才會成功。
步驟440,判斷該ICMP報文需要進行的轉換是否PAT轉換,如查出的映射條目中的埠值不為0,則為PAT轉換,進行步驟450,否則,進行正常NAT轉發流程,結束;
步驟450,判斷該ICMP報文類型是否為ICMP請求報文,如果是,進行步驟460;否則,即為ICDMP響應報文,進行步驟470;步驟460,將報文直接交給ICMP模塊進行處理,結束;步驟470,進行PAT的轉發處理,結束。
由於目前對於動態NAT轉換不支持從外部主機ping內部主機,因此對於從外部接口收到的ICMP請求報文無需進行NAT處理,只需將它送到ICMP模塊進行相應的操作,或應答或丟棄。
權利要求
1.一種保證網絡地址轉換設備與外網互通的方法,應用於網絡地址轉換設備,該設備包括用於轉發網際網路控制消息協議ICMP報文的網絡地址轉換NAT模塊和用於收發和處理本地ICMP報文的ICMP模塊,該方法包括以下步驟(a)當NAT設備從內部接口收到ICMP報文,NAT模塊判斷該報文需要進行埠地址轉換PAT但沒有相應映射條目,且為其分配了本地地址和埠時,向ICMP模塊發送申請預留消息,攜帶該埠的值;(b)ICMP模塊收到所述申請預留消息後,判斷與該埠值相同的ICMP標識是否已使用,如果是,回復失敗消息,執行步驟(c);否則預留與該埠值相同的ICMP標識不再分配,回復成功消息,執行步驟(d);(c)NAT模塊收到失敗消息後,重新分配埠,再次向ICMP模塊發送申請預留消息,返回步驟(b);(d)NAT模塊收到成功消息後,在映射表中創建該ICMP報文的映射條目,進行正常的NAT轉發。
2.如權利要求
1所述的方法,其特徵在於,還包括以下釋放預留的ICMP標識的處理過程(h)NAT模塊需要刪除PAT映射條目時,如果該條目的協議類型是ICMP協議且內部全局地址為本地地址,則提取該條目中分配的埠值,向ICMP模塊發送釋放消息;(i)ICMP模塊收到該釋放消息後,釋放預留的與該埠值相同的ICMP標識,向NAT模塊回復釋放成功消息;(j)NAT模塊收到釋放成功消息後,直接刪除該映射條目。
3.如權利要求
1或2所述的方法,其特徵在於,還包括以下對外部接口收到的ICMP報文的處理過程(o)NAT設備從外部接口收到ICMP報文,如該報文需NAT轉換,由NAT模塊查映射表中是否有該ICMP報文的映射條目,如果有,執行步驟(p),如果沒有,執行步驟(s);步驟(p),NAT模塊再判斷該映射條目是否PAT映射條目,如果是,執行步驟(q),否則按正常的NAT轉發處理,結束;步驟(q),判斷該ICMP報文的類型是否響應報文,如果是,執行步驟(r),否則,執行步驟(s);步驟(r),進行NAT的轉發處理,結束;步驟(s),將該ICMP報文交給ICMP模塊處理,結束。
4.如權利要求
1所述的方法,其特徵在於,所述步驟(a)NAT模塊向ICMP模塊發送申請預留消息後,記錄分配的埠值並等待ICMP模塊的應答消息,如果等待超時,則向ICMP模塊重發該申請預留消息。
5.如權利要求
3所述的方法,其特徵在於,所述步驟(h)和步驟(p)中,NAT模塊是通過映射條目的埠值判斷該條目是否為PAT映射條目,如埠值不為0,則該條目是PAT映射條目,否則不是PAT映射條目。
6.如權利要求
3所述的方法,其特徵在於,所述步驟(o)中,NAT設備是通過以下方式判斷收到的ICMP報文是否需進行NAT轉換的根據該報文的目的地址查找路由,如路由條目中的NAT標誌被置位,則認為該ICMP報文需進行NAT轉換。
專利摘要
一種保證網絡地址轉換設備與外網互通的方法,應用於NAT設備,該設備包括NAT模塊和ICMP模塊。NAT設備從內部接口收到ICMP報文後,如該報文需要進行PAT轉換但沒有映射條目,且NAT模塊為其分配了本地地址和埠時,向ICMP模塊發送申請預留消息,攜帶該埠的值;ICMP模塊判斷與該埠值相同的ICMP標識是否已使用,如果是,回復失敗消息,否則預留該值的ICMP標識不再分配,回復成功消息;NAT模塊如果收到失敗消息,重新分配埠,再次申請預留;如果收到成功消息,在映射表中創建該ICMP報文的映射條目,進行正常的NAT轉發。本發明可避免NAT設備生成的ICMP報文與轉發ICMP報文產生埠衝突。
文檔編號H04L12/56GK1992675SQ200510135671
公開日2007年7月4日 申請日期2005年12月31日
發明者洪先進 申請人:中興通訊股份有限公司導出引文BiBTeX, EndNote, RefMan