NAT英文全稱是“Network Address Translation”,中文意思是“網絡地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)标準,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把内部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。NAT 可以讓那些使用私有地址的内部網絡連接到Internet或其它IP網絡上。NAT路由器在将内部網絡的數據包發送到公用網絡時,在IP包的報頭把私有地址轉換成合法的IP地址。
RFC1918規定了三塊專有的地址,作為私有的内部組網使用:
這三塊私有地址本身是可路由的,隻是公網上的路由器不會轉發這三塊私有地址的流量;當一個公司内部配置了這些私有地址後,内部的計算機在和外網通信時,公司的邊界路由會通過NAT或者PAT技術,将内部的私有地址轉換成外網IP,外部看到的源地址是公司邊界路由轉換過的公網IP地址,這在某種意義上也增加了内部網絡的安全性。
Basic NAT是一種把一組IP地址映射成另一組IP地址的方法,映射的過程在IP中繼設備上完成,對用戶完全透明。NAPT則要複雜一些,它把許多(不能太多)IP地址連同TCP/UDP端口号映射到單獨一個IP地址和端口号上。無論是Basic NAT還是NAPT都提供一種把内部的私有地址轉換成在公網上可用的全球唯一IP地址的方法。
分類NAT有三種類型:
NAPT是使用最普遍的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。
對于網絡地址轉換技術來講,最重要的一點是,在配置 NAT 的路由器上形成了 NAT 轉換表,這個轉換表的形成是非常關鍵的。配置 NAT 後,能形成正确的轉換表,那麼我們的工作就算成功了。
NAT的三個方向:
NAT 在outside口生效,所有在inside口需要先路由,在outside口先nat。
将内部局部地址轉換為内部全局地址;數據方向inside->outside,在outside上執行轉換;
将内部全局地址轉換為内部局部地址;數據方向outside->inside,在outside上執行轉換
将外部全局地址轉換為外部局部地址;數據方向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:
- 指定NAT内部接口 在内網相應接口的接口配置模式下執行:ip nat inside
- 指定NAT外部接口 在外網相應接口的接口配置模式下執行:ip nat outside
- 在全局配置模式下,定義一個标準的access-list規則,聲明允許哪些内部本地地址可以進行動态地址轉換: access-list list-number permit 源地址 通配符 其中,list-number為1-99之間的一個任意整數。
- 在全局配置模式下,定義内部全局地址池: ip nat pool 地址池名 起始IP地址 終止IP地址 netmask 子網掩碼 其中,地址池名可以任意設定,但最好有一定的說明意義。
- 在全局配置模式下,定義符合先前定義的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為1-99之間的一個任意整數。
5. 在全局配置模式下,定義符合先前定義的access-list規則的IP數據包與先前定義的地址池中的IP地址進行複用地址轉換: ip nat inside source list list-number pool 内部全局地址池名 overload
二、工作原理了解原理之前先了解下NAT 術語。
在配置了 NAT 的路由器上,可以把整個網絡分成兩部分:内部網絡 和 外部網絡。
NAT 技術中有四個術語:
- 内部本地地址(Inside Local):内網中設備所使用的IP地址
- 内部全局地址(Inside Global):對于外部網絡來說,局域網内部主機所表現的 IP 地址。
- 外部本地地址(Outside Local):外部網絡主機的真實地址。
- 外部全局地址(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中的轉換方式:
- 從内網中設備上發出的IP包是以“inside local address”作為源地址,以“outside local address”作為目的地址。當數據包到達NAT設備的“inside”接口後,地址分别被翻譯成“inside global address”和“outside global address”并從“outside”接口送出。
- 外網設備上發出的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轉換是對應相反的。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!