目錄

簡介

必要條件

需求

採用元件

慣例

背景資訊

NAT概述

NAT組態和輸出

相關資訊

簡介

本文檔介紹使用NAT處理事務的順序取決於資料包在網路中內部或外部的傳輸方向。

必要條件

需求

思科建議您瞭解以下主題：

- 網路位址轉譯 (NAT) 的相關常見問題提供解答。有關NAT的詳細資訊，請參閱NAT如何工作。

採用元件

本檔案中的資訊是根據Cisco IOS®軟體版本12.2(27)。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

慣例

請參閱思科技術提示慣例以瞭解更多有關文件慣例的資訊。

背景資訊

本檔案將說明使用網路位址轉譯(NAT)處理事務的順序取決於封包是從內部網路傳到外部網路，還是從外部網路傳到內部網路。

NAT概述

在此表中，當NAT執行全域性到本地或本地到全域性轉換時，每個流中的轉換都是不同的。

內到外

從外部到內部

- 如果IPSec，則檢查輸入訪問清單

- 解密 — 適用於CET（思科加密技術）或IPSec

- 檢查輸入訪問清單

- 檢查輸入速率限制

- 輸入記帳

- 重定向至web cache

- 策略路由

- 路由

- NAT內部到外部（本地到全域性轉換）

- crypto（檢查對映和標籤以便加密）

- 檢查輸出訪問清單

- inspect(內容型存取控制(CBAC))

- TCP攔截

- 加密

- 佇列

- 如果IPSec，則檢查輸入訪問清單

- 解密 — 適用於CET或IPSec

- 檢查輸入訪問清單

- 檢查輸入速率限制

- 輸入記帳

- 重定向至web cache

- NAT外部到內部（全域性到本地轉換）

- 策略路由

- 路由

- crypto（檢查對映和標籤以便加密）

- 檢查輸出訪問清單

- 檢查CBAC

- TCP攔截

- 加密

- 佇列

NAT組態和輸出

此示例演示操作順序如何影響NAT。在這種情況下，僅顯示NAT和路由。

在上一個示例中，路由器A配置為將內部本地地址172.31.200.48轉換為172.16.47.150，如以下配置所示。

!

version 11.2

no service udp-small-servers

no service tcp-small-servers

!

hostname Router-A

!

enable password ww

!

ip nat inside source static 172.31.200.48 172.16.47.150

!--- This command creates a static NAT translation

!--- between 172.31.200.48 and 172.16.47.150

ip domain-name cisco.com

ip name-server 172.31.2.132

!

interface Ethernet0

no ip address

shutdown

!

interface Serial0

ip address 172.16.47.161 255.255.255.240

ip nat inside

!--- Configures Serial0 as the NAT inside interface

no ip mroute-cache

no ip route-cache

no fair-queue

!

interface Serial1

ip address 172.16.47.146 255.255.255.240

ip nat outside

!--- Configures Serial1 as the NAT outside interface

no ip mroute-cache

no ip route-cache

!

no ip classless

ip route 0.0.0.0 0.0.0.0 172.16.47.145

!--- Configures a default route to 172.16.47.145

ip route 172.31.200.0 255.255.255.0 172.16.47.162

!

!

line con 0

exec-timeout 0 0

line aux 0

line vty 0 4

password ww

login

!

end

轉換表表示存在預期的轉換。

Router-A#show ip nat translation

Pro Inside global      Inside local       Outside local      Outside global

--- 172.16.47.150      172.31.200.48      ---                ---

此輸出是從路由器A擷取的，且已啟用debug ip packet detail和debug ip nat，以及從裝置172.31.200.48發出ping命令，目的地為172.16.47.142。

註:Debug命令生成大量輸出。僅當IP網路上的流量較低時才使用它們，以免對系統中的其他活動造成不利影響。發出debug 指令之前，請先參閱有關Debug指令的重要資訊。

IP: s=172.31.200.48 (Serial0), d=172.16.47.142, len 100, unroutable

ICMP type=8, code=0

IP: s=172.16.47.161 (local), d=172.31.200.48 (Serial0), len 56, sending

ICMP type=3, code=1

IP: s=172.31.200.48 (Serial0), d=172.16.47.142, len 100, unroutable

ICMP type=8, code=0

IP: s=172.31.200.48 (Serial0), d=172.16.47.142, len 100, unroutable

ICMP type=8, code=0

IP: s=172.16.47.161 (local), d=172.31.200.48 (Serial0), len 56, sending

ICMP type=3, code=1

IP: s=172.31.200.48 (Serial0), d=172.16.47.142, len 100, unroutable

ICMP type=8, code=0

IP: s=172.31.200.48 (Serial0), d=172.16.47.142, len 100, unroutable

ICMP type=8, code=0

IP: s=172.16.47.161 (local), d=172.31.200.48 (Serial0), len 56, sending

ICMP type=3, code=1

由於先前輸出中沒有NAT調試消息，因此不使用當前靜態轉換，並且路由器的路由表中沒有目的地址(172.16.47.142)的路由。不可路由資料包的結果是ICMP無法到達消息，該消息將傳送到內部裝置。

但是，路由器A的預設路由是172.16.47.145，那麼為什麼該路由被視為不可路由？

路由器A未配置ip classless，這意味著如果資料包的目的地址是「主要」網路地址（本例中為172.16.0.0），而路由表中已存在子網，則路由器不依賴於預設路由。換句話說，如果您發出 no ip classless 命令，就會關閉路由器查詢位元匹配最長的路由的功能。若要變更此行為，您必須在Router-A上設定ip classless。使用Cisco IOS軟體版本11.3和更新版本的Cisco路由器上預設啟用ip classless 命令。

Router-A#configure terminal

Enter configuration commands, one per line.  End with CTRL/Z.

Router-A(config)#ip classless

Router-A(config)#end

Router-A#show ip nat translation

%SYS-5-CONFIG_I: Configured from console by console nat tr

Pro Inside global      Inside local       Outside local      Outside global

--- 172.16.47.150      172.31.200.48      ---                ---

重複與之前相同的ping測試時，您會看到資料包被轉換，ping操作成功。

Ping Response on device 172.31.200.48

D:\>ping 172.16.47.142

Pinging 172.16.47.142 with 32 bytes of data:

Reply from 172.16.47.142: bytes=32 time=10ms TTL=255

Reply from 172.16.47.142: bytes=32 time<10ms TTL=255

Reply from 172.16.47.142: bytes=32 time<10ms TTL=255

Reply from 172.16.47.142: bytes=32 time<10ms TTL=255

Ping statistics for 172.16.47.142:

Packets: Sent = 4, Received = 4, Lost = 0 (0%)

Approximate round trip times in milli-seconds:

Minimum = 0ms, Maximum =  10ms, Average =  2ms

Debug messages on Router A indicating that the packets generated by device

172.31.200.48 are getting translated by NAT.

Router-A#

*Mar 28 03:34:28: IP: tableid=0, s=172.31.200.48 (Serial0), d=172.16.47.142

(Serial1), routed via RIB

*Mar 28 03:34:28: NAT: s=172.31.200.48->172.16.47.150, d=172.16.47.142 [160]

*Mar 28 03:34:28: IP: s=172.16.47.150 (Serial0), d=172.16.47.142 (Serial1),

g=172.16.47.145, len 100, forward

*Mar 28 03:34:28: ICMP type=8, code=0

*Mar 28 03:34:28: NAT*: s=172.16.47.142, d=172.16.47.150->172.31.200.48 [160]

*Mar 28 03:34:28: IP: tableid=0, s=172.16.47.142 (Serial1), d=172.31.200.48

(Serial0), routed via RIB

*Mar 28 03:34:28: IP: s=172.16.47.142 (Serial1), d=172.31.200.48 (Serial0),

g=172.16.47.162, len 100, forward

*Mar 28 03:34:28: ICMP type=0, code=0

*Mar 28 03:34:28: NAT*: s=172.31.200.48->172.16.47.150, d=172.16.47.142 [161]

*Mar 28 03:34:28: NAT*: s=172.16.47.142, d=172.16.47.150->172.31.200.48 [161]

*Mar 28 03:34:28: IP: tableid=0, s=172.16.47.142 (Serial1), d=172.31.200.48

(Serial0), routed via RIB

*Mar 28 03:34:28: IP: s=172.16.47.142 (Serial1), d=172.31.200.48 (Serial0),

g=172.16.47.162, len 100, forward

*Mar 28 03:34:28: ICMP type=0, code=0

*Mar 28 03:34:28: NAT*: s=172.31.200.48->172.16.47.150, d=172.16.47.142 [162]

*Mar 28 03:34:28: NAT*: s=172.16.47.142, d=172.16.47.150->172.31.200.48 [162]

*Mar 28 03:34:28: IP: tableid=0, s=172.16.47.142 (Serial1), d=172.31.200.48

(Serial0), routed via RIB

*Mar 28 03:34:28: IP: s=172.16.47.142 (Serial1), d=172.31.200.48 (Serial0),

g=172.16.47.162, len 100, forward

*Mar 28 03:34:28: ICMP type=0, code=0

*Mar 28 03:34:28: NAT*: s=172.31.200.48->172.16.47.150, d=172.16.47.142 [163]

*Mar 28 03:34:28: NAT*: s=172.16.47.142, d=172.16.47.150->172.31.200.48 [163]

*Mar 28 03:34:28: IP: tableid=0, s=172.16.47.142 (Serial1), d=172.31.200.48

(Serial0), routed via RIB

*Mar 28 03:34:28: IP: s=172.16.47.142 (Serial1), d=172.31.200.48 (Serial0),

g=172.16.47.162, len 100, forward

*Mar 28 03:34:28: ICMP type=0, code=0

*Mar 28 03:34:28: NAT*: s=172.31.200.48->172.16.47.150, d=172.16.47.142 [164]

*Mar 28 03:34:28: NAT*: s=172.16.47.142, d=172.16.47.150->172.31.200.48 [164]

*Mar 28 03:34:28: IP: tableid=0, s=172.16.47.142 (Serial1), d=172.31.200.48

(Serial0), routed via RIB

*Mar 28 03:34:28: IP: s=172.16.47.142 (Serial1), d=172.31.200.48 (Serial0),

g=172.16.47.162, len 100, forward

*Mar 28 03:34:28: ICMP type=0, code=0

Router-A#undebug all

All possible debugging has been turned off

上一個示例顯示，當資料包從內到外遍歷時，NAT路由器在繼續轉換資料包之前會檢查其路由表，查詢通往外部地址的路由。因此，NAT路由器必須具有外部網路的有效路由。到達目的網路的路由必須通過路由器配置中定義為NAT outside的介面知道。

必須注意的是，返回的資料包在路由之前先進行轉換。因此，NAT路由器也必須在其路由表中具有用於內部本地地址的有效路由。

相關資訊

- 配置網路地址轉換

- 驗證 NAT 運作情形和基本 NAT 疑難排解

- NAT：本地和全域性定義

- 組播NAT如何在Cisco路由器上工作？

- NAT支援頁面

- 思科技術支援與下載