簡介
本文檔介紹如何配置ip nat outside source list
命令,並介紹在NAT過程中IP資料包所發生的情況。
必要條件
需求
本文件沒有特定需求。
採用元件
本文檔中的資訊基於運行Cisco IOS®軟體版本的Cisco路由器。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
您可使用此指令,轉譯從網路外傳送至網路內之 IP 封包的來源位址。此操作將反向傳輸的IP資料包的目標地址從網路內部轉換為網路外部。在網路重疊,也就是內部網路位址和外部網路位址重疊的情況下,此指令相當實用。網路圖就是一個例子。
慣例
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
設定
本節提供用於設定本文件中所述功能的資訊。
附註:若要尋找關於用於本文的指令的其他資訊,請使用指令尋找工具(僅限註冊客戶)。
網路圖表
此文件使用以下網路設定:
網路圖表
當從路由器R1的Loopback0介面(172.16.88.1)向路由器R2的Loopback0介面(172.31.1.1)發出ping時,會發生以下一系列事件:
- 資料包轉發:路由器R1將資料包轉發到NAT路由器,因為它配置了預設路由。在NAT路由器的外部介面上,資料包的源地址(SA)為172.16.88.1,目的地址(DA)為172.31.1.1。
- NAT轉換:因為SA由ip nat outside source list命令使用的access-list 1允許,所以該SA將被轉換為NAT池「NET」中的地址。在本例中,地址被轉換為172.31.16.10,這是NAT池中的第一個可用地址。
- 路由到目標:轉換後,NAT路由器在其路由表中查詢目標並路由資料包。路由器R2在其傳入介面上接收的SA為172.31.16.10且DA為172.31.1.1的資料包。路由器R2透過向172.31.16.10傳送網際網路控制消息協定(ICMP)回應應答做出響應。如果路由器R2沒有通往172.31.16.10的路由,它會丟棄該資料包。
- 應答處理:在本例中,路由器R2具有預設路由,因此它使用SA為172.31.1.1和DA為172.31.16.10將應答資料包傳送到NAT路由器。NAT路由器在其內部介面上接收資料包,並檢查通往172.31.16.10地址的路由。如果它沒有路由,它將以ICMP不可達應答做出響應。
- 轉換和路由返回:在本例中,由於ip nat outside source命令的add-route選項(該選項根據外部全局地址和外部本地地址之間的轉換增加主機路由),NAT-路由器具有到172.31.16.10的路由。NAT路由器將資料包轉換回原始源地址(172.16.88.1),並將資料包從其外部介面路由迴路由器R1。
組態
路由器R1 |
hostname R1
!
!--- Output suppressed.
!
interface Loopback0
ip address 172.16.88.1 255.255.255.0
!
!--- Output suppressed.
!
interface GigabitEthernet0/0
ip address 172.16.191.254 255.255.255.252
duplex auto
speed auto
!
!--- Output suppressed.
ip route 0.0.0.0 0.0.0.0 172.16.191.253
!--- Default route to forward packets to NAT-Router.
!--- Output suppressed. |
路由器NAT-路由器 |
hostname NAT-Router
!
!--- Output suppressed.
!
interface GigabitEthernet0/0
ip address 172.16.191.253 255.255.255.252
ip nat outside
ip virtual-reassembly in
duplex auto
speed auto
!
interface GigabitEthernet0/1
ip address 172.31.192.202 255.255.255.0
ip nat inside
ip virtual-reassembly in
duplex auto
speed auto
!
ip nat pool NET 172.31.16.10 172.31.16.254 netmask 255.255.255.0
!--- NAT pool defining Outside Local addresses to be used for translation.
!
ip nat outside source list 1 pool NET add-route
!
!--- Configures translation for Outside Global addresses !--- with the NAT pool.
!
ip route 172.16.88.0 255.255.255.0 172.16.191.254
ip route 172.31.1.0 255.255.255.0 172.31.192.201
!
!--- Static routes for reaching the loopback interfaces on R1 and R2.
!
access-list 1 permit 172.16.88.0 0.0.0.255
!
!--- Access-list defining Outside Global addresses to be translated.
!--- Output suppressed. |
路由器R2 |
hostname R2
!
!--- Output suppressed.
interface Loopback0
ip address 172.31.1.1 255.255.255.0
!
!
interface GigabitEthernet0/0
ip address 172.31.192.201 255.255.255.0
duplex auto
speed auto
!
!--- Output suppressed.
ip route 0.0.0.0 0.0.0.0 172.31.192.202
!--- Default route to forward packets to NAT-Router.
!--- Output suppressed. |
驗證
本節提供的資訊可用於確認您的組態是否正常運作。
輸出直譯器工具支援某些特定的show命令(僅供註冊客戶使用),它允許您檢視show
命令輸出的分析。
show ip nat translations命令可用於檢查轉換項,如此輸出所示:
NAT-Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- --- --- 172.31.16.10 172.16.88.1
icmp 172.31.1.1:0 172.31.1.1:0 172.31.16.10:0 172.16.88.1:0
NAT-Router#
輸出顯示,外部全局地址172.16.88.1(路由器R1 Loopback0介面上的地址)被轉換為外部本地地址172.31.16.10。
如下所示,您可以使用show ip route命令檢查路由表項:
NAT-Router#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is not set
172.16.0.0/16 is variably subnetted, 3 subnets, 3 masks
S 172.16.88.0/24 [1/0] via 172.16.191.254
C 172.16.191.252/30 is directly connected, GigabitEthernet0/0
L 172.16.191.253/32 is directly connected, GigabitEthernet0/0
172.31.0.0/16 is variably subnetted, 4 subnets, 2 masks
S 172.31.1.0/24 [1/0] via 172.31.192.201
S 172.31.16.10/32 [1/0] via 172.16.88.1
C 172.31.192.0/24 is directly connected, GigabitEthernet0/1
L 172.31.192.202/32 is directly connected, GigabitEthernet0/1
NAT-Router#
輸出顯示了外部本地地址172.31.16.10的一個/32路由,該路由是透過ip nat outside source命令的add-route選項建立的。此路由用於路由和轉換從網路內部傳輸到網路外部的資料包。
疑難排解
本節提供的資訊可用於對組態進行疑難排解。
此輸出是在從路由器R1的loopback0介面地址(172.16.88.1)到路由器R2的loopback0介面地址(172.31.1.1)進行ping的同時,在路由器NAT-Router上運行debug ip packet和debug ip nat命令的結果:
!--- The source address in the first packet arriving on the outside interface is first translated.
*Oct 4 20:26:48.839: NAT: s=172.16.88.1->172.31.16.10, d=172.31.1.1 [0]
!--- The ICMP echo request packet with the translated source address is routed and forwarded on the inside interface.
*Oct 4 20:26:48.839: IP: s=172.31.16.10 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, NAT Inside(8), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.839: IP: s=172.31.16.10 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, Common Flow Table(29), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.839: IP: s=172.31.16.10 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, Stateful Inspection(30), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.839: IP: s=172.31.16.10 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, output feature, NAT ALG proxy(63), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.839: IP: s=172.31.16.10 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), g=172.31.192.201, len 100, forward
*Oct 4 20:26:48.839: IP: s=172.31.16.10 (GigabitEthernet0/0), d=172.31.1.1 (GigabitEthernet0/1), len 100, sending full packet
!--- The ICMP echo reply packet arriving on the inside interface, is first routed based on the destination address.
Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.31.16.10, len 100, input feature, Common Flow Table(5), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.31.16.10, len 100, input feature, Stateful Inspection(8), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.31.16.10, len 100, input feature, Virtual Fragment Reassembly(39), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.31.16.10, len 100, input feature, Virtual Fragment Reassembly After IPSec Decryption(57), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.31.16.10, len 100, input feature, MCI Check(109), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
!--- The destination address in the packet is then translated.
*Oct 4 20:26:48.841: NAT: s=172.31.1.1, d=172.31.16.10->172.16.88.1 [0]
!--- The ICMP echo reply packet with the translated destination address is forwarded on the outside interface.
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.16.88.1 (GigabitEthernet0/0), len 100, output feature, Post-routing NAT Outside(26), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.16.88.1 (GigabitEthernet0/0), len 100, output feature, Common Flow Table(29), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.16.88.1 (GigabitEthernet0/0), len 100, output feature, Stateful Inspection(30), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.16.88.1 (GigabitEthernet0/0), len 100, output feature, NAT ALG proxy(63), rtype 1, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
*Oct 4 20:26:48.841: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.16.88.1 (GigabitEthernet0/0), g=172.16.191.254, len 100, forward
*Oct 4 20:26:48.843: IP: s=172.31.1.1 (GigabitEthernet0/1), d=172.16.88.1 (GigabitEthernet0/0), len 100, sending full packet
*Oct 4 20:26:48.845: NAT*: s=172.16.88.1->172.31.16.10, d=172.31.1.1 [1]
*Oct 4 20:26:48.846: NAT*: s=172.31.1.1, d=172.31.16.10->172.16.88.1 [1]
*Oct 4 20:26:48.848: NAT*: s=172.16.88.1->172.31.16.10, d=172.31.1.1 [2]
*Oct 4 20:26:48.849: NAT*: s=172.31.1.1, d=172.31.16.10->172.16.88.1 [2]
*Oct 4 20:26:48.851: NAT*: s=172.16.88.1->172.31.16.10, d=172.31.1.1 [3]
*Oct 4 20:26:48.852: NAT*: s=172.31.1.1, d=172.31.16.10->172.16.88.1 [3]
*Oct 4 20:26:48.854: NAT*: s=172.16.88.1->172.31.16.10, d=172.31.1.1 [4]
*Oct 4 20:26:48.855: NAT*: s=172.31.1.1, d=172.31.16.10->172.16.88.1 [4]
對外部介面上收到的每個資料包重複上述過程。
摘要
使用ip nat outside source list命令(動態NAT)而不是ip nat outside source static命令(靜態NAT)的主要區別在於,在路由器(針對NAT配置)驗證資料包的轉換標準之前,轉換表中沒有條目。在上一個示例中,帶有SA 172.16.88.1的資料包(進入NAT-Router的外部介面)滿足access-list 1,這是ip nat outside source list命令使用的標準。因此,資料包必須來自外部網路,內部網路的資料包才能與路由器R1 loopback0介面通訊。
在此範例中,有兩個重要事項需要注意:
1. 當資料包從外部傳輸到內部時,首先進行轉換,然後檢查路由表以查詢目標。當資料包從內部傳輸到外部時,首先檢查路由表以查詢目標,然後進行轉換。
2. 請務必注意,使用前面每一個命令時,IP資料包的哪一部分會被轉換。下表提供了指南:
指令 |
動作 |
ip nat outside source list |
- 轉換從外部傳輸到內部的IP資料包的源
- 轉換從內部傳輸到外部的IP資料包的目的地
|
ip nat inside source list |
- 轉換從內部傳輸到外部的IP資料包的源
- 轉換從外部傳輸到內部的IP資料包的目標
|
這些準則表明,轉換資料包的方式不止一種。根據您的特定需求,您可以確定如何定義NAT介面(內部或外部)以及路由表在轉換之前或之後包含哪些路由。請記住,資料包中轉換的部分取決於資料包的傳輸方向,以及您如何配置NAT。
相關資訊