目錄

簡介

必要條件

需求

採用元件

網路圖表

慣例

範例案例

相關資訊

簡介

本檔案將說明以下情況：使用動態網路位址轉譯(NAT)時，由於流量目的地為NAT池中的未使用ip位址，且在NAT路由器上存在將封包路由回外部的預設路由，因此封包會在NAT路由器與外部介面的相鄰路由器之間回圈。

必要條件

需求

本文件沒有特定需求。

採用元件

本文件所述內容不限於特定軟體和硬體版本。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您在即時網路中工作，請確保在使用任何命令之前瞭解其潛在影響。

網路圖表

以下拓撲用於建立示例場景。

慣例

如需文件慣例的詳細資訊，請參閱思科技術提示慣例。

範例案例

在上述拓撲中，路由器A配置了NAT，以便它將來自網路171.68.200.0/24的資料包轉換為NAT池「test-loop」定義的地址範圍。 路由器A的配置如下（所有其他路由器都配置了靜態路由以獲得連線）：

hostname Router-A

!

!

ip nat pool test-loop 172.16.47.161 172.16.47.165 prefix-length 28

ip nat inside source list 7 pool test-loop

!

interface Loopback0

ip address 1.1.1.1 255.0.0.0

!

interface Ethernet0

ip address 135.135.1.2 255.255.255.0

shutdown

!

interface Serial0

ip address 171.68.200.49 255.255.255.0

ip nat inside

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

no ip mroute-cache

no ip route-cache

!

ip classless

ip route 0.0.0.0 0.0.0.0 172.16.47.145

access-list 7 permit 171.68.200.0 0.0.0.255

!

!

line con 0

exec-timeout 0 0

line aux 0

line vty 0 4

login

!

end

使用NAT轉換調試和IP資料包調試命令，從內部裝置上的路由器生成ping。ping操作成功，生成了一個轉換表條目。在下面的輸出中，我們看到IP資料包調試和IP NAT調試已開啟，並且此時轉換表中沒有條目。

註：debug命令會產生大量輸出。僅當IP網路上的流量較低時才使用它們，以免對系統中的其他活動造成不利影響。

Router-A# show debug

Generic IP:

IP packet debugging is on (detailed)

IP NAT debugging is on

Router-A# show ip nat translations

Router-A#

內部路由器（內部裝置）發起的ICMP資料包的源地址為171.68.200.48，目的地址為171.68.191.1（外部裝置的地址）。 以下debug輸出顯示了源IP地址為171.68.200.48的IP資料包被轉換為172.16.47.161。該資料包來自Serial0介面，目的地為Serial1介面。

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [401]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

以下debug輸出顯示目的IP地址為172.16.47.161的返回IP資料包正在轉換回171.68.200.48。資料包來自Serial1介面，目的地為serial0介面。

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [401]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

debug輸出顯示了內部裝置和外部裝置之間成功的ping交換：

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [402]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [402]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [403]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [403]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [404]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [404]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [405]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [405]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=0, code=0

使用show ip nat translations命令，我們會在轉換表中看到內部裝置的條目。

Router-A# show ip nat translations

Pro Inside global      Inside local       Outside local      Outside global

--- 172.16.47.161      171.68.200.48      ---                ---

由於轉換表中存在內部裝置的轉換，因此我們可以從外部裝置ping通內部裝置的全域性地址，如下面路由器A生成的調試輸出所示。

注意：外部裝置發出的資料包的源地址為171.68.191.1，目的地址為172.16.47.161（轉換表中的內部全域性地址）。

Router-A#

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [108]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [108]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [109]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [109]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [110]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [110]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [111]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [111]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

NAT*: s=171.68.191.1, d=172.16.47.161->171.68.200.48 [112]

IP: s=171.68.191.1 (Serial1), d=171.68.200.48 (Serial0), g=171.68.200.48, len 100, forward

ICMP type=8, code=0

NAT: s=171.68.200.48->172.16.47.161, d=171.68.191.1 [112]

IP: s=172.16.47.161 (Serial0), d=171.68.191.1 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=0, code=0

以下調試輸出演示了當外部裝置嘗試與測試環路池中未使用IP地址的目標地址發起通訊時會發生的情況。clear ip nat translation命令用於清除轉換表，並向test-loop池中未使用的IP地址傳送ping。

外部裝置傳送一個目的地為內部全域性地址172.16.47.161的ICMP資料包。但是，輸出介面與此資料包的輸入介面相同。

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

IP: s=171.68.191.1 (Serial1), d=172.16.47.161 (Serial1), g=172.16.47.145, len 100, forward

ICMP type=8, code=0

在路由資料包之前，NAT會將資料包從外部轉換為內部。在這種情況下，轉譯表中沒有條目，因此路由器A只能路由封包。路由器A依靠其預設路由來路由資料包，並將資料包傳送回Serial1介面，這會導致最終可能導致串列線路關閉的環路。

為避免此類路由環路，切勿將資料包從外部裝置傳送到內部全域性地址。但是，由於難以強制執行，因此您可以在Router-A中為內部全域性地址新增靜態路由（下一跳為null0）。這樣，當外部裝置傳送目的地為內部全域性地址的資料包時，在轉換表中沒有條目，路由器A會將資料包路由到null0，從而避免環路。使用上面的示例，靜態路由如下所示：

ip route 172.16.47.160 255.255.255.252 null0.

相關資訊

- NAT支援頁面

- IP 路由通訊協定支援頁面

- IP 路由支援頁面

- 技術支援 - Cisco Systems