1. 程式人生 > >NAT 詳解【轉】

NAT 詳解【轉】

(轉自:https://blog.csdn.net/freeking101/article/details/77962312)

From:http://wwwcisco.blog.51cto.com/218089/39837

CCNA學習筆記之NAT:http://sweetpotato.blog.51cto.com/533893/1392884

網路地址轉換NAT原理及應用:http://blog.csdn.net/xiaofei0859/article/details/6630467

NAT技術基本原理與應用:http://www.cnblogs.com/dongzhuangdian/p/5105844.html

NAT地址轉換原理全攻略:

http://blog.csdn.net/lycb_gz/article/details/12079455

NAT基本結構和分類:http://blog.csdn.net/lycb_gz/article/details/11999459


NAT 


一、概述

        NAT英文全稱是“Network Address Translation”,中文意思是“網路地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,

允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上顧名思義它是一種把內部私有網路地址(IP地址)翻譯成合法網路IP地址的技術。NAT 可以讓那些使用私有地址的內部網路連線到Internet或其它IP網路上。NAT路由器在將內部網路的資料包傳送到公用網路時,在IP包的報頭把私有地址轉換成合法的IP地址。

RFC1918規定了三塊專有的地址,作為私有的內部組網使用:

  • A類:10.0.0.0—10.255.255.255      10.0.0.0/8
  • B類:172.16.0.0—172.31.255.255   172.16.0.0/12
  • C類:192.168.0.0—192.168.255.255 192.168.0.0/16

這三塊私有地址本身是可路由的,只是公網上的路由器不會轉發這三塊私有地址的流量;當一個公司內部配置了這些私有地址後,內部的計算機在和外網通訊時,公司的邊界路由會通過NAT或者PAT技術,將內部的私有地址轉換成外網IP,外部看到的源地址是公司邊界路由轉換過的公網IP地址,這在某種意義上也增加了內部網路的安全性。

        Basic NAT是一種把一組IP地址對映成另一組IP地址的方法,對映的過程在IP中繼裝置上完成,對使用者完全透明。NAPT則要複雜一些,它把許多(不能太多)IP地址連同TCP/UDP埠號對映到單獨一個IP地址和埠號上。無論是Basic NAT還是NAPT都提供一種把內部的私有地址轉換成在公網上可用的全球唯一IP地址的方法。


分類


NAT有三種類型:

  1. 靜態NAT(Static NAT)(一對一)。將內部網路的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一直不變的。
  2. 動態地址NAT(Pooled NAT)(多對多)。將內部網路的私有IP地址轉換為公用IP地址時,IP地址是不確定,隨機的。所有被授權訪問Internet的私有IP地址可隨機轉換為任何指定合法的IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態NAT轉換。動態NAT是在路由器上配置一個外網IP地址池,當內部有計算機需要和外部通訊時,就從地址池裡動態的取出一個外網IP,並將他們的對應關係繫結到NAT表中,通訊結束後,這個外網IP才被釋放,可供其他內部IP地址轉換使用,這個DHCP租約IP有相似之處。當ISP提供的合法IP地址略少於網路內部的計算機數量時。可以採用動態轉換的方式。
  3. 網路地址埠轉換NAPT(Network Address Port Translation)(Port-Level NAT)(多對一)。改變外出資料包的源埠並進行埠轉換,採用埠多路複用方式。內部網路的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,可以最大限度地節約IP地址資源。同時,也可以隱藏網路內部的所有主機,有效避免來自Internet的攻擊。因此,目前網路中應用最多的就是PAT規則。這是最常用的NAT技術,也是IPv4能夠維持到今天的最重要的原因之一,它提供了一種多對一的方式,對多個內網IP地址,邊界路由可以給他們分配一個外網IP,利用這個外網IP的不同埠和外部進行通訊。NAPT 與 動態NAT 不同,它將內部連線對映到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT裝置選定的埠號。
    NAPT是使用最普遍的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。
            (1)源NAT(Source NAT,SNAT):修改資料包的源地址。源NAT改變第一個資料包的來源地址,它永遠會在資料包傳送到網路之前完成,資料包偽裝就是一具SNAT的例子。
            (2)目的NAT(Destination NAT,DNAT):修改資料包的目的地址。Destination NAT剛好與SNAT相反,它是改變第一個資料懈的目的地地址,如平衡負載、埠轉發和透明代理就是屬於DNAT。

對於網路地址轉換技術來講,最重要的一點是,在配置 NAT 的路由器上形成了 NAT 轉換表,這個轉換表的形成是非常關鍵的。配置 NAT 後,能形成正確的轉換表,那麼我們的工作就算成功了。



NAT的三個方向:
NAT 在outside口生效,所有在inside口需要先路由,在outside口先nat。
ip nat inside source:
將內部區域性地址轉換為內部全域性地址;資料方向inside->outside,在outside上執行轉換;
ip nat inside destination:
將內部全域性地址轉換為內部區域性地址;資料方向outside->inside,在outside上執行轉換
ip nat outside source:
將外部全域性地址轉換為外部區域性地址;資料方向outside->inside,在outside上執行轉換;
NAT的應用分類:
ip nat source:
(1) 靜態 nat的對映:永遠一個ip對應另外一個ip。
ip nat inside source static A.B.C.D A.B.C.D
(2) 動態 nat的對映:每次一個IP會對應另外一個公網的IP;
ip nat inside source list 2 pool qing
(3) 動態PAT對映:pool裡面只有一個IP。
ip nat inside source list 2 pool qing overload
(4) 靜態PAT對映:
ip nat inside source list 3 interface fastEthernet 0/0 overload
ip nat inside destination:
tcp負載均衡,外網主動發起流量訪問內網伺服器。只用動態,沒有靜態。
ip nat inside destination list 10 pool feng
ip nat outside source:
當兩端同時做nat既inside和outside需要同時翻譯並出現地址衝突的時候需要用outside source和其他同時命令同時實現。

Cisco路由器配置3中NAT的主要命令:

靜態NAT:
1、指定NAT內部介面
在內網相應介面的介面配置模式下執行:ip nat inside
2、指定NAT外部介面
在外網相應介面的介面配置模式下執行:ip nat outside
3、在內部本地地址與內部全域性地址之間建立靜態地址轉換關係:
ip nat insde source static 內部本地地址 內部全域性地址

動態地址NAT:
1、指定NAT內部介面
在內網相應介面的介面配置模式下執行:ip nat inside
2、指定NAT外部介面
在外網相應介面的介面配置模式下執行:ip nat outside
3、在全域性配置模式下,定義一個標準的access-list規則,宣告允許哪些內部本地地址可以進行動態地址轉換:
access-list list-number permit 源地址 萬用字元
其中,list-number為199之間的一個任意整數。
4、在全域性配置模式下,定義內部全域性地址池:
ip nat pool 地址池名 起始IP地址 終止IP地址 netmask 子網掩碼
其中,地址池名可以任意設定,但最好有一定的說明意義。
5、在全域性配置模式下,定義符合先前定義的access-list規則的IP資料包與先前定義的地址池中的IP地址進行轉換:
ip nat inside source list list-number pool 內部全域性地址池名

網路地址埠轉換NAPT:
1、指定NAT內部介面
在內網相應介面的介面配置模式下執行:ip nat inside
2、指定NAT外部介面
在外網相應介面的介面配置模式下執行:ip nat outside
3、在全域性配置模式下,定義內部全域性地址池:
ip nat pool 地址池名 起始IP地址 終止IP地址 netmask 子網掩碼
其中,地址池名可以任意設定,但最好有一定的說明意義。
4、在全域性配置模式下,定義一個標準的access-list規則,宣告允許哪些內部本地地址可以進行復用地址轉換:
access-list list-number permit 源地址 萬用字元
其中,list-number為199之間的一個任意整數。
5、在全域性配置模式下,定義符合先前定義的access-list規則的IP資料包與先前定義的地址池中的IP地址進行復用地址轉換:
ip nat inside source list list-number pool 內部全域性地址池名 overload


二、工作原理

瞭解原理之前先了解下NAT 術語。

在配置了 NAT 的路由器上,可以把整個網路分成兩部分:內部網路 和 外部網路

        NAT 技術中有四個術語:

  1. 內部本地地址(Inside Local):內網中裝置所使用的IP地址
  2. 內部全域性地址(Inside Global):對於外部網路來說,區域網內部主機所表現的 IP 地址。
  3. 外部本地地址(Outside Local):外部網路主機的真實地址。
  4. 外部全域性地址(Outside Global):對於內部網路來說,外部網路主機所表現的 IP 地址。外網裝置所使用的真正的地址。


local 、global 是相對於埠狀態說的,local是inside部分可以被路由的,global是outside部分可以被路由的。

網路地址轉換常常和代理服務搞混,但是它們之間有明確的不同。NAT 對源和目的計算機都是透明的。沒有任何一方會意識到它正在和第三方裝置打交道。但是代理服務卻不是透明的。源計算機知道它正向代理伺服器發起一個請求,而且你還必須進行配置才能這樣做。目的計算機會認為代理伺服器就是與它直接通訊的源計算機。還有,代理服務通常工作在 OSI 參考模型的第 4 層 (傳輸層) 或更高,而 NAT 工作在第 3 層 (網路層)。由於代理服務工作在更高層,所以通常它將比 NAT 要慢。
  NAT 工作在 OSI 參考模型的網路層 (第3層) 是有道理的,因為路由器就工作在這一層:


NAT 原理

        NAT裝置維護一個狀態表,用來把非法的IP地址對映到合法的IP地址上去。每個包在NAT裝置中都被翻譯成正確的IP地址,發往下一級,這意味著給處理器帶來了一定的負擔。但對於一般的網路來說,這種負擔是微不足道的。在執行NAT的路由器中,當資料包被傳送時,NAT可以轉換資料包的IP地址和TCP/UDP資料包的埠號。設定NAT功能的路由器至少要有一個Inside(內部)埠和一個Outside(外部)埠。內部埠連線內網的使用者,外部埠一般連線到Internet。當IP資料包離開內部網路時,NAT負責將內網IP源地址(通常是專用地址)轉換為合法的公共IP地址。當IP資料包進入內網時,NAT將合法的公共IP目的地址轉換為內網的IP源地址。

        NAT的基本工作原理是:當私有網主機和公共網主機通訊的IP包經過NAT閘道器時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。

        當內部網路中的一臺主機想傳輸資料到外部網路時,它先將資料包傳輸到NAT路由器上,路由器檢查資料包的報頭,獲取該資料包的源IP資訊,並從它的NAT對映表中找出與該IP匹配的轉換條目,用所選用的內部全域性地址(全球唯一的IP地址)來替換內部區域性地址,並轉發資料包。 

        當外部網路對內部主機進行應答時,資料包被送到NAT路由器上,路由器接收到目的地址為內部全域性地址的資料包後,它將用內部全域性地址通過NAT對映表查找出內部區域性地址,然後將資料包的目的地址替換成內部區域性地址,並將資料包轉發到內部主機。

        其實主要就是 修改 IP 資料包中的源 IP 地址,或目的 IP 地址。主要目的是把 RFC1918所提議的私有地址轉變成在 Internet 上可路由的公有合法地址。對於某些有限的應用(如 DNS、 FTP 等),它也可以修改 IP 資料包有效載荷中的地址。由於應用的複雜性, NAT 目前支援的應用有限,當然,如果需要,完全可以針對新的應用做相應的開發工作。

        總體來說,NAT進行地址轉換的過程就是“本地地址”與“全域性地址”之間的轉換過程,無論資料包是從內部網路發往外部網路,還是從外部網路發往內部網路。不同的只是本地地址和全域性地址所對應的網路不同,以及資料包重新封裝的源和目的地址不同。具體如圖所示。


NAT基本地址轉換原理

這個過程是通過NAT中的本地址與全域性地址對映條目來實現的,所以事先要在NAT路由器上配置這樣的對映條目。


NAT中的轉換方式:

  1. 從內網中裝置上發出的IP包是以“inside local address”作為源地址,以“outside local address”作為目的地址。當資料包到達NAT裝置的“inside”介面後,地址分別被翻譯成“inside global address”和“outside global address”並從“outside”介面送出。
  2. 外網裝置上發出的IP包以“outside global address”作為源地址,以“inside global address”作為目的地址。當資料包到達NAT裝置的“outside”介面後,地址分別被翻譯成“outside local address”和“inside local address”並從“inside”介面送出。


        當內部網路使用者訪問外部網路時,所進行的是“內部本地地址”和“內部全域性地址”之間的轉換。
        在NAT路由器接收到來自內部網路主機發送的資料包時,其源IP地址(SA)為“內部本地地址”,目的IP地址(DA)為“外部本地地址”。當資料包被轉發到外部網路時,資料包的源IP地址(SA)就會轉變為“內部全域性地址”,而目的IP地址(DA)被轉變為“外部全域性地址”。也就是把資料包的所有源IP地址(SA)和目的IP地址(DA)全部由本地地址轉換為全域性地址。如圖6-9上部分資料包IP地址轉換示意圖。
        相反,當外部網路使用者訪問內部網路時,所進行的是“外部本地地址”和“外部全域性地址”之間的轉換。
        在NAT路由器接收到來自外部網路主機發送的資料包時,其源IP地址(SA)就是“外部全域性地址”,目的IP地址(DA)就是“內部全域性地址”。相當於由內部網路向外部網路傳送資料包時資料包中的源IP地址(SA)和目的IP地址(DA)的互換。而當資料包被路由器轉發到本地網路時,源IP地址(SA)被轉變為“外部本地地址”,目的IP地址(DA)被轉變為“內部本地地址”,也相當於由內部網路向外部網路傳送資料包時資料包中的源IP地址(SA)和目的IP地址(DA)的互換。如圖6-9下部分資料包IP地址轉換示意圖


NAT基本IP地址轉換原理

以上是從總體上介紹NAT的IP地址轉換原理的,實際NAT應用有時並不需要對源IP地址和IP地址進行全面替換,僅需要對源IP地址或者僅需要對目的IP地址進行轉換即可達到所需的目的。下面予以介紹。


內部地址NAT轉換原理

        多數情況下使用NAT的目的就是為了使內部網路中的多個使用者能使用一個註冊IP地址訪問外部網路,所以僅需要配置內部地址NAT轉換。即通過ip nat inside source命令實現“內部本地地址”到“內部全域性地址”之間的轉換(既可以採用靜態NAT方式實現,也可以採取動態NAT方式實現),只需要定義內部本地址與內部本局地址的對映。


一個簡單的NAT轉換示例

這是一個簡單的NAT轉換示例。要實現以下目的:當NAT路由器的內部網路s0介面上接收到一個源地址為內部本地地址10.10.10.1,目的IP地址為外部本地地址171.16.68.1的資料包時,在轉發到s1介面時,原來資料包源地址的內部本地地址10.10.10.1被轉換成內部全域性地址171.16.68.5,但目的地址不變,然後繼續傳送。在這個過程中,所進行的只是資料包中源IP地址的轉換,由內部本地地址向內部全域性地址轉換,且只是內部地址之間的轉換。

        相反,當在NAT路由器的外部網路介面s1上接收源地址為172.16.68.1外部本地地址,目的地址為內部全域性地址172.16.68.5的外部伺服器響應資料包時,目的地址將被轉換成10.10.10.1這個內部本地地址,然後繼續傳送。在這個過程中,所進行的只是資料包中目的IP地址的轉換,由內部全域性地址向內部本地地址轉換,也只是內部地址之間的轉換。

下面僅以靜態NAT轉換方式為例介紹內部地址轉換的配置步驟,詳細的NAT配置方法將在本章後面具體介紹。

(1)使用“ip nat inside source static”全域性配置命令啟用基於內部源IP地址的靜態NAT IP地址轉換。也就是定義內部本地地址和內部全域性地址,使它們之間形成一一對應的對映關係。

Router(config)#ip nat inside source static 10.10.10.1 171.16.68.5   
 !--- 在內部本地地址10.10.10.1與內部全域性地址171.16.68.5之間建立靜態NAT對映關係,使內部網路主機知道要以171.16.68.5這個地址到達外部網路主機

(2)使用以下兩條語句配置路由器的s0為NAT的內部網路介面。

Router(config)#interface s0    !---  進入s0串列埠配置模式
Router(config-if)#ip nat inside    !--- 把s0串列埠指定為內部網路介面

(3)使用以下兩條語句配置路由器的s1為NAT的外部網路介面。

Router(config)#interface s1    !--- 進入s1串列埠配置模式
Router(config-if)#ip nat outside   !--- 把s1串列埠指定為外部網路介面

(4)使用show ip nat translations特權模式命令驗證上述進行的路由器NAT配置。輸出資訊中顯示以上配置的NAT條目配置為:內部本地地址為10.10.10.1,內部全域性地址為171.16.68.5。這與上面的配置是一致的,證明配置是成功的。

Router#show ip nat translations   !--- 在特權模式下顯示當前路由器NAT配置

Pro Inside global Inside local Outside local Outside global
171.16.68.5 10.10.10.1

此時如果對外部網路目的主機進行ping操作,就會有資料包從內部網路轉發到外部網路。然後再在路由器特權模式下執行“show ip nat translations”命令,顯示的NAT資訊如下。多了一條icmp協議型別資料包(執行ping操作後加的)顯示,但因為此時沒有配置外部網路的本地地址和全域性地址,所以顯示的外部本地地址和外部全域性地址都是一樣的,都是ping操作目的主機地址171.16.68.1。

Router#show ip nat translations

Pro Inside global Inside local Outside local Outside global
icmp 171.16.68.5:15 10.10.10.1:15 171.16.68.1:15 171.16.68.1:15
171.16.68.5 10.10.10.1

通過以上配置後,從內部網路發往外部網路的資料包只是源地址(SA)將在經過路由器後進行轉換(由內部本地地址10.10.10.1轉換成內部全域性地址171.16.68.5),但目標地址(DA)不變,但從外部網路發往內部網路的應答資料包的源地址沒有改變,只是經過路由器後的資料包目的地址發生了轉換(由內部全域性地址172.16.68.5轉換成內部本地地址10.10.10.1),但源地址(SA)不變。因為此時還沒有為NAT路由器配置外部網路的本地地址和全域性地址轉換。
此時,資料包在內、外部網路中的源地址、目的地址的轉換方式參如圖


經驗之談在內部地址的NAT轉換中,無論資料包來自哪裡,資料包中地址變化的只是內部地址之間的轉換。但要注意,地址變化所對應的是源地址,還是目的地址是要看資料包是來自內部網路,還是來自外部網路:如果是來自內部網路,轉換是源地址;如果是來自外部網路,轉換的是目的地址。


外部地址NAT轉換原理

當公司伺服器位於內部網路,使用內部網路私有IP地址,為了方便外部網路使用者對內部網路伺服器進行訪問,則需要使用ip nat outside source命令配置“外部全域性地址”與“外部本地地址”之間的轉換(既可以採用靜態NAT方式實現,也可以採取動態NAT方式實現)。外部地址NAT轉換與上節介紹的內部地址NAT轉換是相反的,它僅需要定義外部地址(包括外部本地地址和外部全域性地址)。

下面同樣以上面那個簡單的NAT轉換示例進行介紹。本示例要實現的目的是:當NAT路由器外部網路介面s1接收到來自外部網路使用者傳送的源IP地址為外部全域性地址171.16.68.1,目的地址為外部本地地址10.10.10.1的資料包在被路由器轉發到s0介面時,資料包中的源IP地址轉變為外部本地地址10.10.10.5(即由外部全域性地址轉換成外部本地地址),目的IP地址不變,即也只是源IP地址的轉換;而由內部網路使用者傳送的響應資料包中,卻只是目的IP地址(即由外部本地地址轉換為外部全域性地址)的轉換,源IP地址不變。
下面僅以靜態NAT轉換方式為例介紹外部地址NAT轉換的配置步驟,詳細的NAT配置方法將在本章後面具體介紹。

(1)使用ip nat outside source static全域性配置命令啟用基於外部源IP地址的靜態NAT IP地址轉換。也就是定義外部全域性地址和外部本地地址之間的對映關係。

Router(config)#ip nat outside source static 171.16.68.1 10.10.10.5     
    !--- 在外部全域性地址171.16.68.1與外部本地地址10.10.10.5之間建立靜態NAT轉換關係,使外部網路主機知道要以10.10.10.1這個地址到達內部網路主機

(2)使用以下兩條語句配置路由器的s0作為NAT的內部網路介面。

Router(config)#interface s0
Router(config-if)#ip nat inside

(3)使用以下兩條語句配置路由器的s1作為NAT的外部網路介面。

Router(config)#interface s1
Router(config-if)#ip nat outside

【注意】對於特定的NAT網路來說,路由器上的內、外部網路介面是固定的,不會隨著通訊方向的改變而改變。如在上節介紹的內部地址的NAT轉換示例中,我們同樣是把s0介面作為內部網路介面,s1介面作為外部網路介面。

(4)使用show ip nat translations特權模式命令驗證上述進行的路由器NAT配置。從中可以看出,此時NAT的外部本地地址為10.10.10.5,外部全域性地址為171.16.68.1。這與上面的配置是一致的,證明配置是成功的。

Router#show ip nat translations

Pro Inside global Inside local Outside local Outside global
10.10.10.5 171.16.68.1

同樣,如果此時執行一個從外部網路主機(171.16.68.1)到內部網路主機(10.10.10.1)的ping操作,然後再在路由器特權模式下執行“show ip nat translations”命令,則顯示如下結果。因為此時僅配置了外部本地地址和外部全域性地址,所以結果中顯示的內部本地地址和全域性地址都是一樣的,都是ping操作目的主機地址10.10.10.1。

Router#show ip nat translations

Pro Inside global Inside local Outside local Outside global
10.10.10.5 171.16.68.1
icmp 10.10.10.1:37 10.10.10.1:37 10.10.10.5:37 171.16.68.1:37

與上節介紹的僅配置內部地址相反,此處從外部網路發往內部網路的資料包的源IP地址(SA)將在經過路由器後進行轉換(由外部全域性地址171.16.68.1轉換成外部本地地址10.10.10.5),但目標地址(DA)不變;但從內部網路發往外部網路的響應資料包的源IP地址沒有改變,只是經過路由器後的資料目的IP地址發生了改變(由外部本地地址10.10.10.5轉換成外部全域性地址171.16.68.1)。因為此時還沒有為NAT路由器配置內部本地地址和內部全域性地址轉換。此時,資料包在內、外部網路中的源IP地址、目的IP地址的轉換方式如圖6-12所示。

經驗之談在僅進行外部地址NAT轉換時,無論資料包來自哪裡,資料包中地址變化的只是外部地址之間的轉換。同樣也需注意,地址變化所對應的是源IP地址,還是目的IP地址是要看資料包是來自內部網路,還是來自外部網路:如果來自內部網路,轉換是目的IP地址;如果來自外部網路,轉換的是源IP地址。這與前面的內部地址NAT轉換是對應相反的。


外部地址NAT轉換示例


內/外部地址NAT轉換原理

        下面介紹同時進行內、外部地址NAT轉換原理及基本配置步驟。它需要同時使用ip nat inside source命令定義“內部全域性地址”與“內部本地地址”之間的轉換,及使用ip nat outside source命令定義“外部全域性地址”和“外部本地地址”之間的轉換(既可以採用靜態NAT方式實現,也可以採取動態NAT方式實現)。這樣,無論資料包是從哪個方向傳送的,資料包中的源地址和目的地址都將同時發生變化。主要應用於重疊網路(Overloading Network)中的NAT應用中。具體配置方法將在本章6.6節介紹。
        同樣以那個簡單的NAT轉換示例的基本網路結構為例進行介紹。在下面的示例中,通過配置可以實現:當NAT路由器內部網路介面s0接收到來自內部網路,源IP地址為內部本地地址10.10.10.1,目的IP地址為外部本地地址10.10.10.5的資料包,在轉發到s1介面前,將這個資料包中的源IP地址將轉換成內部全域性地址171.16.68.5,目的IP地址將被轉換成外部全域性地址171.16.68.1。
        當NAT路由器外部介面s1接收到來自外部網路,源IP地址為外部全域性地址171.16.68.1,目的地址為內部全域性地址172.16.68.5的資料包時,將源IP地址轉換成外部本地地址10.10.10.5,將目的IP地址將被轉換成內部本地址10.10.10.1。
        下面僅以靜態NAT轉換方式(可以採用動態NAT轉換方式)為例介紹內、外部地址同時轉換的配置步驟,詳細的靜態,或者動態NAT轉換配置方法將在本章後面具體介紹。

Router(config)#ip nat inside source static 10.10.10.1 171.16.68.5    !--- 在內部本地地址10.10.10.1與內部全域性地址171.16.68.5之間建立靜態NAT對映關係,使內部網路主機知道要以171.16.68.5這個地址到達外部網路主機
Router(config)#ip nat outside source static 171.16.68.1 10.10.10.5    !--- 在外部全域性地址171.16.68.1與外部本地地址10.10.10.5之間建立靜態NAT對映關係,使外部網路主機知道要以10.10.10.5這個地址到達內部網路主機
Router(config)#interface s 0
Router(config-if)#ip nat inside
Router(config-if)#end
Router(config)#interface s 1
Router(config-if)#ip nat outside
Router(config-if)#end
Router(config)# end
Router#show ip nat translations

Pro Inside global Inside local Outside local Outside global
10.10.10.5 171.16.68.1
171.16.68.5 10.10.10.1

同樣,如果此時分別執行一個從內部主機到外部主機,以及從外部主機到內部主機的ping操作,然後再在路由器特權模式下執行“show ip nat translations”命令,則顯示如下結果。因為此時同時配置了內、外部本地地址和全域性地址,所以結果中顯示了兩條NAT配置項,分別顯示了與外部網路和內部網路中的本地地址和全域性地址轉換對應的ping操作icmp訊息:與外部本地地址和全域性地址對應的Ping操作ICMP訊息中顯示內部網路中的本地地址和全域性地址是一樣的,而與內部網路本地地睛和全域性地址對應的Ping操作ICMP訊息中顯示外部網路中的本地地址和全域性地址是一樣的,都是對應的Ping操作目的主機地址

Router#show ip nat translations

Pro Inside global Inside local Outside local Outside global
10.10.10.5 171.16.68.1
icmp 10.10.10.1:4 10.10.10.1:4 10.10.10.5:4 171.16.68.1:4
icmp 171.16.68.5:39 10.10.10.1:39 171.16.68.1:39 171.16.68.1:39
171.16.68.5 10.10.10.1

經過以上配置後,資料包傳送(無論是從哪個方面傳送的)時不僅源IP地址會發生變化,目標IP地址也會同時發生變化,如圖6-13所示。
在由內部網路向外部網路傳送的資料包中,源IP地址是由內部本地地址(10.10.10.1)轉換成內部全域性地址(172.16.68.5),目的IP地址由外部本地地址(10.10.0.5)轉換成外部全域性地址(171.16.68.1);在由外部網路向內部網路傳送的資料包中,源IP地址是由外部全域性地址(171.16.68.1)轉換成外部本地地址(10.10.0.5),目的IP地址由內部全域性地址(172.16.68.5)轉換成內部本地地址(10.10.10.1)。兩個方向的資料包中的源IP地址和目的IP地址的轉換分別如圖6-14和圖6-15所示。

圖6-13 同時配置了內、外部地址轉換後的NAT轉換示例

6-14 資料包從內部網路發到外部網路時的地址轉換方式 圖6-15 資料包從外部網路發到內部網路時的地址轉換方式

從圖6-14和圖6-15可以看出,圖6-14中的源IP地址轉換過程恰好是圖6-15中的目的地址轉換的反過程。同理,圖6-14中的目的IP地址轉換過程恰好是圖6-15中的源IP地址轉換的反過程。

        另外,經過細心分析我們可以發現,在由內部網路發往外部網路的資料包中所進行的地址轉換都是由本地地址轉換為全域性地址,也就是都是由內部網路一側的地址向外部網路一側的地址轉換;相反,在由外部網路發往內部網路的資料包中所進行的地址轉換都是由全域性地址轉換為本地地址,也就是都是由外部網路一側的地址向內部網路一側的地址轉換。


NAT配置中的常用命令: 

ip nat {inside|outside}:介面配置命令。以在至少一個內部和一個外部介面上啟用NAT。 
ip nat inside source static local-ip global-ip:全域性配置命令。在對內部區域性地址使用靜態地址轉換時,用該命令進行地址定義。 
access-list access-list-number {permit|deny} local-ip-address:使用該命令為內部網路定義一個標準的IP訪問控制列表。 
ip nat pool pool-name start-ip end-ip netmask netmask [type rotary]:使用該命令為內部網路定義一個NAT地址池。 
ip nat inside source list access-list-number pool pool-name [overload]:使用該命令定義訪問控制列表與NAT內部全域性地址池之間的對映。 
ip nat outside source list access-list-number pool pool-name [overload]:使用該命令定義訪問控制列表與NAT外部區域性地址池之間的對映。 
ip nat inside destination list access-list-number pool pool-name:使用該命令定義訪問控制列表與終端NAT地址池之間的對映。 
show ip nat translations:顯示當前存在的NAT轉換資訊。 
show ip nat statistics:檢視NAT的統計資訊。 
show ip nat translations verbose:顯示當前存在的NAT轉換的詳細資訊。 
debug ip nat:跟蹤NAT操作,顯示出每個被轉換的資料包。 
Clear ip nat translations *:刪除NAT對映表中的所有內容.


三、基本配置

1、 靜態轉換:
Router(config)#ip nat inside source static 內部本地地址 內部全域性地址
2、 動態轉換:
Router(config)#ip nat pool 地址池 起始地址 最後地址 netmask 子網掩碼
Router(config)#access-list 表號 permit 網路號 反掩碼
Router(config)#ip nat inside source list 表號 pool 地址池
3、 PAT:
Router(config)#access-list 表號 permit 網路號 反掩碼
Router(config)#ip nat inside source list 表號 interface 外部介面


四、簡單案例

如下圖所示,一箇中小型企業網路,使用一臺路由器和外部相連線,企業有 WWW 伺服器和 FTP 伺服器,用來提供給外部使用者訪問。企業內部員工也需要和Internet 連線。如果企業能夠申請到多個公網地址(六個公網地址: 202.1.1.1-202.1.1.6)。


配置:根據企業目前需求,我們可以做如下配置:(假設 ISP 端路由器使用 202.1.1.6)
Router(config)#int e0                                              (1)
Router(config-if)#ip add 10.1.1.254 255.255.255.0
Router(config-if)#ip nat inside
Router(config)#int e1
Router(config-if)#ip add 202.1.1.1 255.255.255.248
Router(config-if)#ip nat outside
Router(config)#ip nat inside source static 10.1.1.1 202.1.1.2       (2)
Router(config)#ip nat inside source static 10.1.1.2 202.1.1.3       (3)
Router(config)#access-list 1 permit 10.1.1.0 0.0.0.255              (4)
Router(config)#ip nat inside source list 1 interface e1 overload    (5)
Router(config)#ip route 0.0.0.0 0.0.0.0 202.1.1.6                   (6)

命令解釋:
1):配置路由器介面 IP 地址及標記 NAT 的內部埠和外部埠
2):當外部使用者訪問伺服器 202.1.1.2,路由器使用靜態 NAT 的方式轉到 10.1.1.1
3):當外部使用者訪問伺服器 202.1.1.3,路由器使用靜態 NAT 的方式轉到 10.1.1.2
4):配置標準訪問控制列表,匹配內部 10.1.1.0/24 網路的主機
5):配置 PAT,允許內部 10.1.1.0/24 使用者能夠進行 NAT 轉換
6):配置靜態路由,使經過 NAT 轉換後的資料包能夠傳送至 ISP

注意事項:當配置靜態 NAT 後, NAT 轉換表中就會形成轉換條目。動態 NAT和 PAT 在配置對映後,在轉換表中並沒有形成條目。
當內部符合訪問控制列表1 條件的資料包到達路由器後,觸發轉換條件,該資料包要求查詢轉換表,
如果轉換表中有轉換條目存在,使用該條目轉換,如果沒有轉換條目,則根據對映建立條目並轉換



NAT 技術二


一、 埠地址重定向:

如圖所示,該企業申請 ADSL 上網,只獲得了一個公有合法 IP 地址。為了企業的應用,可以使用埠地址重定向功能來完成。


配置命令和命令解釋

Router(config)#int e0                                                     (1)
Router(config-if)#ip add 10.1.1.254 255.255.255.0
Router(config-if)#ip nat inside
Router(config)#int e1
Router(config-if)#ip add 202.1.1.1 255.255.255.252
Router(config-if)#ip nat outside
Router(config)#ip nat inside source static tcp 10.1.1.1 80 202.1.1.1 80    (2)
Router(config)#ip nat inside source static tcp 10.1.1.2 21 202.1.1.1 21    (3)
Router(config)#ip nat inside source static tcp 10.1.1.2 20 202.1.1.1 20
Router(config)#access-list 1 permit 10.1.1.0 0.0.0.255                     (4)
Router(config)#ip nat inside source list 1 interface e1 overload           (5)
Router(config)#ip route 0.0.0.0 0.0.0.0 202.1.1.2                          (6)

命令解釋:
1):配置路由器介面 IP 地址及標記 NAT 的內部埠和外部埠
2):當外部使用者訪問伺服器 202.1.1.1:80,路由器使用靜態 NAT 的方式轉到 10.1.1.1:80
3):當外部使用者訪問伺服器 202.1.1.1:21,路由器使用靜態 NAT 的方式轉到 10.1.1.1:21(由於 FTP 問題較複雜,這兒僅以一種 FTP 的應用為例)
4):配置標準訪問控制列表,匹配內部 10.1.1.0/24 網路的主機
5):配置 PAT,允許內部 10.1.1.0/24 使用者能夠進行 NAT 轉換
6):配置靜態路由,使經過 NAT 轉換後的資料包能夠傳送至 ISP


二、 地址交叉(地址重疊):

如果兩個網路當前的網路地址出現相同的情況,且目前又需要兩個網路之間相互直接通訊。這種情況被稱之為地址重疊。如下圖所示:


這時候可能出現多種情況:兩個網路中都有雙方需要訪問的伺服器只有一方網路中有雙方需要訪問的伺服器(如上圖)

不同的網路情況,配置時略有不同。概括起來講,解決這個問題有兩種方案:

1、 靜態轉換
Router(config)#ip nat inside source static network 10.1.1.0 192.168.1.0 /24     (1)
Router(config)#ip nat outside source static network 10.1.1.0 192.168.2.0 /24    (2)
Router(config)#ip route 0.0.0.0 0.0.0.0 e1
Router(config)#int e0
Router(config-if)#ip add 10.1.1.254 255.255.255.0<