簡介
本文檔介紹使用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 Unreachable Message,消息傳送到內部裝置,但路由器A的預設路由為172.16.47.145,因此為什麼該路由被視為不可路由?
路由器A未配置ip無類,這表示如果資料包的目的地是主網路地址(本例中為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路由器也必須在其路由表中具有用於內部本地地址的有效路由。
相關資訊