720 likes | 894 Views
第 11 章. 網路位址轉換 (NAT). 本章重點. 11 - 1 何時使用 NAT ? 11 - 2 網路位址轉換的類型 11 - 3 NAT 的名稱 11 - 4 NAT 如何運作 11 - 5 測試與檢修 NAT 11 - 6 在我們的互連網路上設定 NAT 組態 11 - 7 使用 SDM 來設定 NAT 組態 11 - 8 摘要. 網路位址轉換 (NAT).
E N D
第 11 章 網路位址轉換 (NAT)
本章重點 • 11 - 1 何時使用 NAT? • 11 - 2 網路位址轉換的類型 • 11 - 3 NAT 的名稱 • 11 - 4 NAT 如何運作 • 11 - 5 測試與檢修 NAT • 11 - 6 在我們的互連網路上設定 NAT 組態 • 11 - 7 使用 SDM 來設定 NAT 組態 • 11 - 8 摘要
網路位址轉換 (NAT) • 本章簡介網路位址轉換 (Network Address Translation, NAT)、動態 NAT、與埠號位址轉換 (Port Address Translation, PAT, 亦稱為 NAT 超載, NAT overload)。 • 本章會在本書所使用的互連網路上展示 NAT, 然後使用 SDM 結尾, 讓讀者瞭解如何以簡單的方式來設定 NAT 組態。 • 因為我們在 NAT 組態設定時會用到存取清單, 所以在閱讀本章之前最好能先閱讀第 10 章。
11 - 1 何時使用 NAT? • NAT 最初的意圖與無級別的跨網域遶送 (Classless Inter-Domain Routing, CIDR) 類似, 都是希望藉由用較少數量的公眾 IP 位址來表示很多的私有 IP 位址, 以減少可用 IP 位址空間的消耗。 • 之後, 人們發現 NAT 在網路遷移與合併、伺服器負載分攤、以及建立「虛擬伺服器」時也非常有用。 • 所以, 本章將描述 NAT 的基本功能, 以及 NAT 的常見術語。
何時使用 NAT? • 有時候, NAT 的確能降低網路環境中所需的大量公眾 IP 數量。當兩家內部位址架構重複的企業要合併時, NAT 也真的非常方便。 • 當組織改變它的網際網路服務供應商, 且網路管理者不想要費力改變內部位址架構時, 也很適合使用 NAT。 • 下面列出最適合應用 NAT 的時機: • 必須連上網際網路, 但是主機又沒有唯一的全域 IP 位址的時候。 • 更換到新的 ISP 而必須重新為網路編號時。
何時使用 NAT? • 必須合併兩個具有重複位址的企業內網路時。 • NAT 通常使用在邊界路由器上。為了說明這點, 請參考圖 11.1。
何時使用 NAT? • 您現在可能在想:「NAT 真的很酷!這是絕妙的網路玩意兒, 我一定要用它。」不過請等一下, 關於 NAT 的使用, 確實也有些很嚴重的障礙。 • 別誤會:它有時候確實可以節省時間, 但您也必須知道它的黑暗面。 • 表 11.1 是關於使用 NAT 的優缺點。
11 - 2 網路位址轉換的類型 • 本節簡介 3 種 NAT: • 靜態 NAT這種 NAT 允許在區域與全域位址之間進行一對一的對應。 • 請記住這種靜態 NAT 需要網路上的每部主機都各自有一個真實的網際網路 IP 位址。 • 動態 NAT這個版本能夠將未註冊的 IP 位址對應到一堆已註冊 IP 位址中的一個註冊 IP 位址。 • 靜態 NAT 需要靜態地設定路由器, 以便將一個內部位址對應到一個外部位址, 動態 NAT 則不需要。
網路位址轉換的類型 • 但您必須有足夠的真實 IP 位址, 供每個想要與網際網路收送封包的機器使用。 • 超載 (overloading)這是最普遍的 NAT 組態。 • 超載是一種特殊形式的動態 NAT, 藉由使用不同埠號, 將多個未註冊的 IP 位址對應到單一個註冊的 IP 位址 (多對一)。 • 它的特殊之處在於它又稱為埠號位址轉換 (Port Address Translation, PAT)。
網路位址轉換的類型 • 藉由 PAT (NAT 超載), 只需要一個真實的全域 IP 位址, 就可讓幾千個使用者與網際網路連線 - 很聰明吧! • NAT 超載也是為什麼我們尚未耗盡網際網路的有效 IP 位址的原因。這可是說真的喔~
11 - 3 NAT 的名稱 • 用來描述 NAT 位址的名稱非常簡單。 • 經過 NAT 轉換後的位址稱為全域位址 (global address), 這通常是在網際網路上使用的公眾位址。 • 不過, 如果您沒有要連上網際網路, 則不需要公眾位址。 • 區域 (local) 位址是在 NAT 轉換之前所使用的位址, 所以內部區域位址 (inside local address) 也就是嘗試連上網際網路之傳送主機真正使用的私有位址。
NAT 的名稱 • 而外部區域位址 (outside local address) 則是目的主機的位址 - 通常會是公眾位址 (網站伺服器、電子郵件伺服器等)。 • 在轉換之後, 內部位址就稱為內部全域位址 (inside global address), 而目的主機的名稱也就成為外部全域位址 (outside global address)。 • 表 11 - 2 列出所有這些術語, 以清楚描述 NAT 所使用的不同名稱。
11 - 4 NAT 如何運作 • 現在是該檢視整個 NAT 如何運作的時機了。 • 一開始, 我們使用圖 11.2 來描述 NAT 的基本轉換 (見下頁圖)。 • 在圖 11.2 的範例中, 主機 10.1.1.1 送出封包給設定有 NAT 的邊界路由器。 • 路由器會認出這個 IP 位址是要送往外部網路的內部區域 IP 位址, 於是轉換這個位址, 然後在 NAT 表格中記錄這項轉換。
NAT 如何運作 • 這個封包會以轉換後的新來源位址送往外部界面, 之後外部主機會將封包傳回。 • 而 NAT 路由器則會使用 NAT 表格將內部全域 IP 位址轉換回內部區域 IP 位址。就是這麼簡單! • 讓我們看看另一個使用超載 (PAT)、更複雜的組態。 • 圖 11.3 展示 PAT 的運作方式。
NAT 如何運作 • 在超載組態下, 所有內部主機都會轉換成單一的 IP 位址, 因此才會被稱為「超載」。 • 看看圖 11.3 的 NAT 表格。除了內部區域 IP 位址與外部全域 IP 位址之外, 我們現在還多了埠號。 • 這些埠號會協助路由器找出回傳的交通該由哪個主機接收。 • 在本例中, 埠號是傳輸層用來辨識本地主機用的。
NAT 如何運作 • 如果我們使用 IP 位址來辨識來源主機, 就稱為靜態 NAT, 而我們的位址很快就會用完。 • PAT 讓我們利用傳輸層來辨識主機, 而我們只靠一個真實 IP 位址就可以使用最多 65000 台主機 (理論上)。
設定靜態的 NAT • 讓我們來看看簡單、基本靜態 NAT 的組態設定:
設定靜態的 NAT • 在這個路由器的輸出中, ip nat inside source命令會指定哪些 IP 位址要被轉換。 • 在本例中, ip nat inside source命令設定內部區域 IP 位址 10.1.1.1 與內部全域 IP 位址 170.46.2.2 之間的靜態轉換。 • 如果我們更細看這個組態, 可以看到在每個界面下都有一個 ip nat命令。 • ip nat inside命令會指定該界面為內部界面, 而 ip nat outside命令則會將該界面指定為外部界面。
設定靜態的 NAT • 當您回頭看 ip nat inside source命令時, 可以看到該命令參考到內部界面作為轉換的來源或起點。 • 這個命令也可以寫成 ip nat outside source-也就是參考外部界面做為轉換的來源或起點。
設定動態的 NAT • 動態 NAT 意味著我們有一堆位址用來提供真實 IP 位址給內部的一群使用者。 • 我們並不使用埠號, 所以必須要有真實的 IP 位址給每個嚐試連到區域網路之外的使用者。 • 下面是動態 NAT 組態的輸出範例:
設定動態的 NAT • ip nat inside source list 1 pool todd命令會告訴路由器將符合 access-list 1 的 IP 位址轉換到稱為 todd 的 IP NAT 儲備池 (pool)。 • 本例中的存取清單並非是要用來允許或拒絕交通, 以達成過濾交通的安全理由。
設定動態的 NAT • 而是要用來選擇或指定我們所謂的「關注的交通」(interesting traffic)。 • 當關注的交通與存取清單匹配時, 就會被拉到 NAT 程序中進行轉換。 • 這是存取清單的一般性用法, 它們並非永遠都扮演在界面阻擋交通的黑暗角色。 • ip nat pool todd 170.168.2.2 192.168.2.254命令會建立位址的儲備池, 用來分配給那些需要 NAT 的主機。
設定超載 (PAT) • 最後的範例是用來展示如何設定內部全域位址超載。 • 這是今日最常使用的典型 NAT。除非是要靜態地對應一台伺服器, 否則我們通常很少會使用靜態或動態 NAT。 • 下面是 PAT 組態的一個輸出範例:
設定超載 (PAT) • PAT 最棒的地方在於它的設定和前面設定 NAT 的唯一差異, 只在於我們的位址儲備池已經縮減為只有單一的 IP 位址, 以及我們的 ip nat inside source命令中加上了 overload 命令。
設定超載 (PAT) • 請注意在本例中, IP 儲備池內的那一個 IP 位址就是外部界面的 IP 位址。 • 如果您設定 NAT 超載的網路是在自己的家或小型辦公室, 而 ISP 只提供一個 IP 位址給您時, 這樣就很完美了。 • 不過, 如果您有額外的可用位址 (例如 170.168.2.2), 也可以一併使用。 • 當您是在非常大型的實作環境, 使用者數目多到必須要有不只一個超載的 IP 位址對外時, 這就相當有用了。
NAT 的簡易驗證 • 一旦設定了要使用的 NAT 類型 (通常是超載) 之後, 還得要驗證它的組態設定。 • 若要檢視基本的 IP 位址轉換資訊, 請使用下面的命令: • 當檢視 IP NAT 轉換時, 可能會看到有許多轉換都是從相同主機到相同的目的主機 - 存在許多連到網站的連線時的典型情況。
NAT 的簡易驗證 • 此外, 您可以使用 debug ip nat命令來驗證您的 NAT 組態。 • 它的輸出會在每一列偵錯訊息中顯示傳送端位址、轉換、以及目的位址。 • 要如何從轉換表格中清除 NAT 項目呢?請使用 clear ip nat translation命令。 • 若要清除 NAT 表格中的所有項目, 請在命令的結尾使用星號 (*)。
11 - 5 測試與檢修 NAT • Cisco 的 NAT 給了您一些重要的力量 - 而且不需要花太多力氣, 因為它的組態設定實在很簡單。 • 但是我們都知道世界上沒有十全十美的事, 所以在事情不太順利的時候, 下面這個清單告訴您一些最常見的可能原因: • 檢查動態儲備池 - 它們是否包含了正確的位址範圍? • 檢查動態儲備池是否有重疊。
測試與檢修 NAT • 檢查靜態對應及動態儲備池中所使用的位址是否有重疊。 • 確定您的存取清單確實指定了待轉換的位址。 • 確定沒有任何應該在裡面的位址被遺漏, 並且確定沒有不該在的卻被包含進去。 • 檢查您是否有適當地劃定內在與外在界面。 • 值得牢記在心的是:NAT 設定中最常見的問題之一跟 NAT 完全無關 - 通常都涉及遶送上的問題。
測試與檢修 NAT • 所以, 因為您正在改變封包中的來源或目的位址, 請務必確定您的路由器知道要怎麼處理轉換後的新位址! • 據說, NAT 表格能存放的對應數目應該難以計數, 但實際上, 總是會有像 CPU、記憶體、可用位址或埠號範圍之類的東西來加以限制, 使得能存放的項目數有所限制。 • 每個 NAT 對應會吃掉大約 160 位元組的記憶體。
測試與檢修 NAT • 有的時候 (但不是很常), 還必須因為效能或是政策限制, 而限制項目的數量。 • 在這類情況下, 可以使用 ip nat translation max-entries命令來協助。 • 另一個很好用的檢修命令是 show ip nat statistics。 • 它會提供 NAT 組態的摘要, 並且計算作用中 (active) 的轉換類型數目。
測試與檢修 NAT • 它還會計算現有對應的擊中數 (hit) 和失誤數 (miss) - 失誤的後果就是嚐試建立一個新的對應。 • 這個命令還會揭露逾時的轉換。 • 如果您想要檢查動態儲備池、它們的類型、可用的位址總數、已經配置了多少位址、配置失敗的次數、以及已經發生的轉換數目, 只要使用 pool (refcount) 命令即可。
測試與檢修 NAT • 您知道可以手動清除 NAT 表格中的動態 NAT 項目嗎?如果您想要丟棄某個討厭的項目, 但不想傻傻地等到它逾時, 這樣做就相當方便。 • 當您想清除整個 NAT 表格來重設位址儲備池時, 手動清除也很有用。 • 如果儲備池中有任何位址在 NAT 表格中存在對應時, Cisco 的 IOS 軟體就不會讓您變更或刪除位址儲備池。
測試與檢修 NAT • clear ip nat translations命令會清除表格項目, 您可以藉由全域與區域位址、並透過 TCP 與 UDP 轉換 (包含埠號) 來指定單一項目, 也可以直接輸入星號 (*) 清除整個表格。 • 因為這個命令並不會移除靜態項目, 所以要記住這樣做只會清除動態的項目。 • 還有一點, 如果有任何外部裝置的封包之目的位址剛好對應到任何內部裝置時, (這個目的位址也就是所謂的內部全域位址) 代表最初的對應必須保存在 NAT 表格中, 以便從該連線來的所有封包都能夠有一致的轉換。
測試與檢修 NAT • 當同一部機器經常傳送封包給同一台外部目的主機時, 在 NAT 表格中保留該對應項目也可以削減重複搜尋的次數。 • 每當新產生一個 NAT 項目到 NAT 表格時, 該項目的計時器就開始計時;計時器的持續時間稱為轉換逾時 (translation timeout)。 • 而每次有該項目的封包經由路由器轉換時, 該計時器就會重新計時。
測試與檢修 NAT • 如果計時器逾時, 該項目就會悄悄地從 NAT 表格中移除, 而這個動態指定的位址也會還回儲備池中。 • Cisco 預設的轉換逾時為 86, 400 秒 (24 小時), 但是您可以使用 ip nat translation timeout命令來變更。 • 在前進到組態設定的章節、並且真正使用前述命令之前, 我們先來看一些 NAT 範例, 並且看看您是否能想出必須使用的設定為何。
測試與檢修 NAT • 首先, 請觀察圖 11.4, 並且問自己兩件事:您要在這個設計的哪裡實作 NAT, 以及您想設定哪種類型的 NAT?
測試與檢修 NAT • 在圖 11.4 中, NAT 組態應該要放在企業路由器上, 並且使用有超載的動態 NAT (PAT)。 • 在下面的 NAT 設定中, 使用的是哪種 NAT 呢? • 其實命令中的pool 已漏了餡, 儲備池中不只一個位址呢, 這表示我們可能不是使用 PAT。 • 上述命令使用的正是動態 NAT。
測試與檢修 NAT • 在下一個 NAT 範例中, 我們會使用圖 11.5 來看看是否能想出所需的組態設定。 • 圖 11.5 的範例顯示一個需要設定 NAT 的邊界路由器, 並且可以使用 6 個公眾 IP 位址, 從 192.1.2.109 到 192.1.2.114。 • 不過, 在內部網路中, 您有 63 台主機使用私有位址 192.168.10.65 到 192.168.10.126。 • 您會如何設定邊界路由器的 NAT 組態呢?
測試與檢修 NAT • 這裡有兩個不同的答案都可以運作, 但是筆者選擇下面這個設定: • 命令 ip nat pool Todd 192.1.2.109 192.1.2.109 netmask 255.255.255.248將儲備池的名稱設為 Todd, 並且使用位址 192.1.2.109 為 NAT 建立位址的動態儲備池。
測試與檢修 NAT • 您也可以使用 prefix-length 29敘述來取代 netmask 命令 (筆者知道您正在想甚麼, 但別想了, 路由器界面沒辦法照這樣設定的啦~)。 • 第二種做法會得到完全相同的結果, 同樣只有 192.1.2.109 是您的內部全域位址。 • 但是您可以用下面這種方式輸入:ip nat pool Todd 192.1.2.109 192.1.2.114 netmask 255.255.255.248。 • 但這是一種浪費, 因為第 2 到第 6 個位址都只有在 TCP 埠號發生衝突時才會用到。
測試與檢修 NAT • 如果您不瞭解第 2 行access-list的設定, 請參考第 10 章。 • ip nat inside source list 1 pool Todd overload命令使用overload 命令將動態儲備池設定為使用埠號位址轉換 (PAT)。 • 請確定要在適當的界面上加入 ip nat inside與 ip nat outside敘述。
11 - 6 在我們的互連網路上設定 NAT 組態 • 現在我們要使用 64.1.1.4 / 30 網路來連接 Corp 路由器與 R3 路由器, 並且使用 64.1.1.8 / 30 網路連接 R3 路由器的區域網路界面卡 F0 / 0。 • 圖 11.6 是我們的互連網路, 表 11.3 則是本書一直在使用的內部區域位址。
在我們的互連網路上設定 NAT 組態 • 圖 11.6 是我們一直在用的同一個網路, 但這邊有些不同。 • Corp 路由器與 R3 路由器間的連線現在是使用全域 PAT 位址。 • 它們之間無法交談, 因為其它的 Corp 連線是用私有 IP 位址 (在真實世界中, ISP 會擋住這些設定, 對吧?我們來設法讓它運作吧!)。 • 請記住, 我們在使用 NAT 時, 會將它們稱為內部區域, 代表轉換以前, 而我們的 ISP 會擋住那些私有 IP 位址的範圍。