1. 程式人生 > >網路基本功(十九):細說NAT原理與配置

網路基本功(十九):細說NAT原理與配置

網路基本功(十九):細說NAT原理與配置

介紹

NAT技術讓少數公有IP地址被使用私有地址的大量主機所共享。這一機制允許遠多於IP地址空間所支援的主機共享網路。同時,由於NAT遮蔽了內部網路,也為區域網內的機器提供了安全保障。

NAT的基本實施過程包括使用一個預留給本地IP網路的私有地址成立組織的內部網路,同時分配給組織一個或多個公網IP地址,並在本地網路與公網之間安裝一個或多個具有NAT功能的路由器。NAT路由器實現的功能包括將資料報中私網地址轉換成公網地址,反向亦然。當有報文通過時,網路地址轉換其不僅檢查報文資訊,還將報文頭中的IP地址和埠資訊進行修改,以使處於NAT之後的機器共享少數公網IP地址。

更多資訊

何時使用NAT?

因為NAT能夠減少在網路環境中所需的公共IP地址需求,因此當兩家公司重複內部地址合併時,這一技術是很有幫助的。當組織改變其Internet服務供應商(ISP),但網路管理員不想改變內部地址方案時,NAT也是一個很好用的工具。

以下是應用NAT的場景:

  • 使用者需要訪問Internet但主機沒有全球唯一的IP地址
  • 使用者更改ISP需要對網路重新編號
  • 使用者需要合併地址重複的內網

通常NAT應用於邊界路由器。例如,下圖中NAT應用於企業連線到Internet的路由器上:

image002.png

NAT的優勢與不足:

優勢

不足

節約合法註冊地址

轉換導致交換路徑延時

解決地址重疊問題

導致端到端IP地址無法追溯

提高訪問Internet靈活性

某些應用程式無法使用

網路變動無需地址重新編號

網路地址轉換型別:

靜態NAT:此類NAT在本地和全域性地址之間做一到一的永久對映。須注意靜態NAT要求使用者對每一臺主機都有一個真實的Internet IP地址。

動態NAT:允許使用者將一個未登記的IP地址對映到一個登記的IP地址池中的一個。採用動態分配的方法將外部合法地址對映到內部網路,無需像靜態NAT那樣,通過對路由器進行靜態配置來將內部地址對映到外部地址,但是必須有足夠的真正的IP地址來進行收發包。

埠NAT(PAT):最為流行的NAT配置型別。通過多個源埠,將多個未登記的IP地址對映到一個合法IP地址(多到一)。使用PAT能夠使上千個使用者僅使用一個全域性IP地址連線到Internet。

NAT術語:

NAT術語還是比較直觀的。NAT地址轉換之後成為全域性地址。通常是Internet上使用的公網地址。如果不訪問Internet的話就不需要用到。

本地地址:NAT地址轉換之前用到的地址。內部本地地址實際上是嘗試訪問Internet的傳送主機的私有地址。外部本地地址通常是連線到使用者ISP的路由器介面,也是報文開始傳輸的公有地址。

轉換之後,內部本地地址之後被稱為內部全域性地址,而外部全域性地址成為目標主機的地址。如下表所示:

名稱

含義

內部本地

轉換前的源主機內部地址

外部本地

Internet上識別到源主機的地址。通常是連線到ISP的路由器介面——真實的Internet地址。

內部全域性

轉換後連線到Internet的源主機地址。也是真實的Internet地址

外部全域性

外部目標主機地址,同樣是真實的Internet地址

image003.png

NAT實現細節:

下圖中,主機10.1.1.1將報文傳送到有NAT功能的邊界路由器。路由器將源IP地址識別為內部本地IP地址,在報文中轉換源IP地址,並在NAT表中記錄此次轉換。

配有新轉換源地址的報文傳送到外部介面。外部主機將報文傳送給目的主機並且NAT路由器通過NAT表將內部全域性IP地址轉換回內部本地IP地址。

image004.png

PAT方式中,所有內部主機都轉換為一個IP地址。如下圖所示,除了內部本地IP地址和內部全域性IP地址以外,還多了一個埠號。埠號幫助路由器識別哪一臺主機應當收到返回資料。路由器使用來自各主機的源埠好來區別他們各自發出的資料。注意當報文離開路由器時有一個目標埠號80,而HTTP伺服器將報文發回時目的埠號為1026。從而允許NAT轉換路由器區別NAT表中的主機然後將目的IP地址轉換回內部本地地址。

本例中,埠號在傳輸層使用者識別本地主機。如果必須要使用真實全域性IP地址來識別源主機,那就只能通過靜態NAT,並且會用光所有地址。PAT允許我們在傳輸層識別主機,從而理論上一個真實IP地址可被65,000臺主機共享。

image005.png

靜態NAT配置:

ip nat inside source static 10.1.1.1 170.46.2.2

!

interface Ethernet0

ip address 10.1.1.10 255.255.255.0

ip nat inside

!

interface Serial0

ip address 170.46.2.1 255.255.255.0

ip nat outside

!

在第一個路由器輸出中, ip nat inside source 命令指定需要轉換的IP地址。本例中,此命令配置了內部本地IP地址10.1.1.1到外部全域性IP地址170.46.2.2的靜態配置。

在各介面下都有一條ip nat命令。ip nat inside命令將該介面識別為內部介面,ip nat outside命令將該介面識別為外部介面。回頭看 ip nat inside source 命令,該命令將內部介面作為轉換的源或起點。也可以這樣使用:ip nat outside source。該選項表明指定的外部介面會成為轉換的源或起點。

動態NAT配置:

動態NAT表示將一個地址池當作真實IP地址提供給內部一組使用者。由於不使用埠號,對於同時嘗試訪問外部網路的使用者必須提供真實的IP地址。

以下是動態NAT配置的示例輸出:

ip nat pool todd 170.168.2.3 170.168.2.254

    netmask 255.255.255.0

ip nat inside source list 1 pool todd

!

interface Ethernet0

ip address 10.1.1.10 255.255.255.0

ip nat inside

!

interface Serial0

ip address 170.168.2.1 255.255.255.0

ip nat outside

!

access-list 1 permit 10.1.1.0 0.0.0.255

!

ip nat inside source list 1 pool todd 命令告知路由器將匹配access-list 1的IP地址轉換到名為todd的IP NAT池中的一個地址。這裡ACL並不是出於安全因素通過允許或拒絕資料來過濾報文。本例中,它是用來選擇或指定我們感興趣的資料流。當資料流與接入列表相匹配,就被拉入NAT程序轉換。

命令 ip nat pool todd 170.168.2.3 192.168.2.254 netmask 255.255.255.0用來建立地址池,之後被分配給請求全域性地址的主機。做Cisco NAT故障排查時,一定要檢查池中確保有足夠地址提供轉換給內部主機。最後,確保池名匹配,注意區分大小寫。

埠NAT配置:

以下是埠NAT配置的示例輸出:

ip nat pool globalnet 170.168.2.1 170.168.2.1 netmask 255.255.255.0

ip nat inside source list 1 pool globalnet overload

!

interface Ethernet0/0

ip address 10.1.1.10 255.255.255.0

ip nat inside

!

interface Serial0/0

ip address 170.168.2.1 255.255.255.0

ip nat outside

!

access-list 1 permit 10.1.1.0 0.0.0.255

埠NAT與動態NAT配置的不同之處在於:

地址池變為只有一個IP地址

在ip nat inside source命令最後加入overload關鍵字。

本例中一個關鍵元素是使用了池中的一個IP地址作為外部介面IP地址。如果有其他可用地址如170.168.2.2可作為額外地址,這樣做在內部大量使用者同時為活躍狀態,需要不止一個過載IP地址時很有幫助。