簡介
本文說明如何對Cisco Adaptive Security Appliance(ASA)平台上的網路位址轉譯(NAT)組態進行疑難排解。
必要條件
需求
本文件沒有特定需求。
採用元件
本文檔中的資訊基於ASA 8.3版及更高版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
排除ASA上的NAT配置故障
附註:有關NAT配置的一些基本示例(包括顯示基本NAT配置的影片),請參閱本文檔底部的相關資訊部分。
排除NAT配置故障時,必須瞭解ASA上的NAT配置如何用於構建NAT策略表。
ASA管理員遇到的大多數NAT問題都源於這些配置錯誤:
- NAT配置規則順序有誤。例如,手動NAT規則放置在NAT表的頂部,這樣會導致位於NAT表更下方的更具體規則永遠不會被命中。
- NAT配置中使用的網路對象太廣,導致流量無意中與這些NAT規則匹配,並且缺少更特定的NAT規則。
packet tracer實用程式可用於診斷ASA上大多數與NAT相關的問題。請參閱下一節,瞭解有關如何使用NAT配置來構建NAT策略表以及如何排除和解決特定NAT問題的詳細資訊。
此外,還可以使用show nat detail命令來瞭解新連線所攻擊的NAT規則。
如何使用ASA配置構建NAT策略表
ASA處理的所有資料包都將根據NAT表進行評估。此評估從頂部(第1部分)開始,向下運行,直到匹配NAT規則。
通常,一旦匹配NAT規則,該NAT規則將應用於連線,並且不再針對資料包檢查更多NAT策略,但是下面將解釋一些警告。
NAT策略表
ASA上的NAT策略是基於NAT配置構建的。
ASA NAT表的三個部分是:
第1部分 |
手動NAT策略 這些指令會依照它們在組態中的顯示順序來處理。 |
第2部分 |
自動NAT策略 根據對象中的NAT型別(靜態或動態)和字首(子網掩碼)長度處理這些資訊。 |
第3款 |
自動後手動NAT策略 這些指令會依照它們在組態中的顯示順序來處理。 |
此圖顯示了不同的NAT部分及其排列方式:
NAT規則匹配
第1部分
- 首先根據NAT表的第1部分(以第一個規則開始)評估流。
- 如果資料包的源IP和目標IP與手動NAT規則的引數匹配,則應用轉換並停止該過程,並且不評估任何部分中的其他NAT規則。
- 如果未匹配NAT規則,則根據NAT表的第2部分評估流量。
第2部分
- 根據第2部分NAT規則按照前面指定的順序評估流,首先評估靜態NAT規則,然後評估動態NAT規則。
- 如果轉換規則與流的源IP或目標IP匹配,則可以應用轉換,並繼續評估其餘規則,以檢視它們是否與流中的其他IP匹配。例如,一個自動NAT規則可以轉換源IP,另一個自動NAT規則可以轉換目標。
- 如果流與自動NAT規則匹配,則當到達第2部分的結尾時,NAT查詢停止,並且不會計算第3部分中的規則。
- 如果第2部分中的NAT規則與流不匹配,則查詢將進入第3部分
第3款
- 第3部分中的過程與第1部分中的過程基本相同。如果資料包的源IP和目標IP與手動NAT規則的引數匹配,則應用轉換,然後停止該過程,不再評估任何部分中的其他NAT規則。
此示例說明如何在NAT表中顯示包含兩個規則(一個手動NAT語句和一個自動NAT配置)的ASA NAT配置:
如何排除NAT故障
使用Packet Tracer實用程式
要排除NAT配置問題,請使用packet tracer實用程式驗證資料包是否符合NAT策略。Packet tracer允許您指定進入ASA的示例資料包,並且ASA指示對資料包應用何種配置以及是否允許該配置。
在下一個示例中,給出了進入內部介面且目的地為Internet上的主機的示例TCP資料包。Packet tracer實用程式顯示資料包與動態NAT規則匹配,並被轉換為外部IP地址172.16.123.4:
ASA# packet-tracer input inside tcp 10.10.10.123 12345 192.168.200.123 80
...(output omitted)...
Phase: 2
Type: NAT
Subtype:
Result: ALLOW
Config:
object network 10.10.10.0-net
nat (inside,outside) dynamic interface
Additional Information:
Dynamic translate 10.10.10.123/12345 to 172.16.123.4/12345
...(output omitted)...
Result:
input-interface: inside
input-status: up
input-line-status: up
output-interface: outside
output-status: up
output-line-status: up
Action: allow
ASA#
選擇NAT規則,然後按一下Packet Trace,以從Cisco自適應安全裝置管理器(ASDM)啟用Packet Tracer。 這將使用NAT規則中指定的IP地址作為Packet Tracer工具的輸入:
檢視Show Nat命令的輸出
show nat detail命令的輸出可用於檢視NAT策略表。具體來說,可以使用translate_hits和untranslate_hits計數器來確定在ASA上使用哪些NAT條目。
如果您看到新的NAT規則沒有translate_hits或untranslate_hits,則意味著流量不會到達ASA,或者可能在NAT表中具有更高優先順序的另一規則與流量匹配。
以下是來自不同ASA配置的NAT配置和NAT策略表:
在上一個示例中,此ASA上配置了六個NAT規則。show nat輸出顯示了如何使用這些規則構建NAT策略表,以及每個規則的translate_hits和untranslate_hits數。
這些命中計數器每個連線僅增加一次。通過ASA建立連線後,與當前連線匹配的後續資料包不會增加NAT線路(與訪問清單命中計數在ASA上的工作方式非常相似)。
Translate_hits:向前方向與NAT規則匹配的新連線數。
「轉發方向」表示連線是通過ASA在NAT規則中指定的介面方向上構建的。
如果NAT規則指定將內部伺服器轉換為外部介面,則NAT規則中介面的順序為"nat(inside,outside)。..";如果伺服器發起到外部主機新連線,translate_hit計數器會遞增。
Untranslate_hits:在相反方向與NAT規則匹配的新連線數。
如果NAT規則指定將內部伺服器轉換為外部介面,則NAT規則中介面的順序為"nat(inside,outside)。.";如果ASA外部的客戶端發起到內部伺服器的新連線,則untranslate_hit 計數器會遞增。
同樣,如果您看到新的NAT規則沒有translate_hits或untranslate_hits,則意味著流量不會到達ASA,或者可能在NAT表中優先順序較高的其他規則與流量匹配。
NAT問題故障排除方法
使用Packet Tracer確認示例資料包是否與ASA上的正確NAT配置規則匹配。使用show nat detail命令以瞭解所命中的NAT策略規則。如果連線匹配的NAT配置與預期的不同,請排除以下故障:
- 是否有其他NAT規則優先於您希望流量命中的NAT規則?
- 是否存在對象定義太寬的NAT規則(子網掩碼太短,如255.0.0.0),從而導致此流量與錯誤的規則匹配?
- 手動NAT策略是否順序混亂,從而導致資料包匹配錯誤的規則?
- 您的NAT規則是否配置不正確,從而導致規則與您的流量不匹配?
請參見下一節以獲得樣例問題和解決方案。
NAT配置的常見問題
下面是在ASA上配置NAT時遇到的一些常見問題。
問題:由於NAT反向路徑故障(RPF)錯誤導致流量失敗:為正向和反向流匹配的非對稱NAT規則
NAT RPF檢查確保ASA在正向轉換的連線(例如TCP同步(SYN))在反向轉換時由相同的NAT規則(例如TCP SYN/確認(ACK))轉換。
通常,此問題是由發往NAT語句中的本地(未轉換)地址的入站連線引起的。在基本級別,NAT RPF驗證從伺服器到客戶端的反向連線是否與同一個NAT規則匹配;否則,NAT RPF檢查將失敗。
範例:209.165.200.225
192.168.200.225上的外部主機將資料包直接傳送到本地(未轉換)IP地址10.2.3.2時,ASA丟棄該資料包並記錄以下系統日誌:
%ASA-5-305013: Asymmetric NAT rules matched for forward and reverse flows;
Connection for icmp src outside:192.168.200.225 dst inside:10.2.3.2 (type 8, code 0)
denied due to NAT reverse path failure
解決方案:
首先,確保主機將資料傳送到正確的全域性NAT地址。如果主機將資料包傳送到正確的地址,請檢查連線所命中的NAT規則。
檢驗NAT規則是否定義正確,以及NAT規則中引用的對象是否正確。還要驗證NAT規則的順序是否合適。
使用Packet Tracer實用程式指定被拒絕資料包的詳細資訊。Packet tracer必須顯示由於RPF檢查失敗而丟棄的資料包。
接下來,檢視Packet Tracer的輸出,以檢視在NAT階段和NAT-RPF階段中命中哪些NAT規則。
如果資料包在NAT RPF檢查階段匹配NAT規則(表示反向流將命中NAT轉換),但不匹配NAT階段中的規則(表示正向流不會命中NAT規則),則丟棄該資料包。
此輸出與上圖所示的情況相符,其中外部主機錯誤地將流量傳送到伺服器的本地IP地址,而不是全域性(已轉換)IP地址:
ASA# packet-tracer input outside tcp 192.168.200.225 1234 10.2.3.2 80
.....
Phase: 8
Type: NAT
Subtype: rpf-check
Result: DROP
Config:
object network inside-server
nat (inside,outside) static 172.18.22.1
Additional Information:
...
ASA(config)#
當資料包的目的地是正確的對映IP地址172.18.22.1時,資料包在轉發方向的UN-NAT階段與正確的NAT規則匹配,在NAT RPF檢查階段與相同的規則匹配:
ASA(config)# packet-tracer input outside tcp 192.168.200.225 1234 172.18.22.1 80
...
Phase: 2
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
object network inside-server
nat (inside,outside) static 172.18.22.1
Additional Information:
NAT divert to egress interface inside
Untranslate 172.18.22.1/80 to 10.2.3.2/80
...
Phase: 8
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
object network inside-server
nat (inside,outside) static 172.18.22.1
Additional Information:
...
ASA(config)#
問題:手動NAT規則順序混亂,導致不正確的資料包匹配
手動NAT規則根據它們在配置中的外觀進行處理。如果在配置中先列出一個非常廣泛的NAT規則,則它可覆蓋NAT表中更靠下的另一條更具體的規則。使用Packet Tracer驗證您的流量到達哪個NAT規則;可能需要將手動NAT條目重新排列到不同的順序。
解決方案:
使用ASDM重新排序NAT規則。
解決方案:
如果刪除規則並在特定行號重新插入,則可以使用CLI重新排序NAT規則。要在特定行插入新規則,請在指定介面後輸入行號。
範例:
ASA(config)# nat (inside,outside) 1 source static 10.10.10.0-net
10.10.10.0-net destination static 192.168.1.0-net 192.168.1.0-net
問題
NAT規則過於寬泛,無意中匹配某些流量。有時會建立使用過寬對象的NAT規則。如果這些規則放置在NAT表頂部附近(例如,位於第1部分的頂部),則它們匹配的資料流可能會多於預期數量,從而導致位於表更低位置的NAT規則永遠不會被命中。
解決方案
使用Packet Tracer確定您的流量是否與對象定義過於寬泛的規則匹配。如果是這種情況,您必須縮小這些對象的範圍,或者將規則進一步移動到NAT表的下方,或者移動到NAT表的after-auto部分(第3部分)。
問題
NAT規則將流量轉移到不正確的介面。NAT規則在確定資料包從ASA哪個介面時,可以優先於路由表。如果入站資料包與NAT語句中的轉換IP地址匹配,則使用NAT規則來確定出口介面。
NAT轉移檢查(可以覆蓋路由表的內容)檢查是否存在任何NAT規則,指定到達介面的入站資料包的目標地址轉換。
如果沒有明確指定如何轉換資料包目標IP地址的規則,則會查閱全域性路由表來確定出口介面。
如果有規則明確指定如何轉換資料包目標IP地址,則NAT規則會將資料包拉至轉換中的另一個介面,從而有效地繞過全域性路由表。
此問題最常出現在入站流量中,入站流量到達外部介面,並且通常是由將流量轉移到非預期介面的NAT規則無序引起的。
範例:
解決方案:
可通過以下任一操作解決此問題:
- 對NAT表重新排序,以便首先列出更具體的條目。
- 對NAT語句使用非重疊的全域性IP地址範圍。
請注意,如果NAT規則是身份規則(這意味著規則不會更改IP地址),則可以使用route-lookup關鍵字(此關鍵字不適用於上一個示例,因為NAT規則不是身份規則)。
route-lookup關鍵字使ASA在與NAT規則匹配時執行額外的檢查。它會檢查ASA的路由表是否將資料包轉發到此NAT配置將資料包轉發到的同一出口介面。
如果路由表輸出介面與NAT轉移介面不匹配,則NAT規則不匹配(跳過規則),資料包繼續沿NAT表向下傳輸,由後來的NAT規則處理。
route-lookup選項僅在NAT規則是身份NAT規則時才可用,這意味著該規則不會更改IP地址。如果將route-lookup新增到NAT行的末尾,或者在ASDM的NAT規則配置中選中Lookup route table to locate egress interface覈取方塊,則可以根據NAT規則啟用route-lookup選項:
問題:NAT規則使ASA為對映介面上的流量生成代理地址解析協定(ARP)
ASA代理ARP用於全域性介面上NAT語句中的全域性IP地址範圍。如果將no-proxy-arp關鍵字新增到NAT語句,則可以基於每個NAT規則禁用此代理ARP功能。
如果無意中建立了全域性地址子網使其比預期的要大得多,也會出現此問題。
解決方案
如果可能,將no-proxy-arp關鍵字新增到NAT行。
範例:
ASA(config)# object network inside-server
ASA(config-network-object)# nat (inside,outside) static 172.18.22.1 no-proxy-arp
ASA(config-network-object)# end
ASA#
ASA# show run nat
object network inside-server
nat (inside,outside) static 172.18.22.1 no-proxy-arp
ASA#
這也可以通過ASDM來實現。在NAT規則中,選中Disable Proxy ARP on egress interface覈取方塊。
.
相關資訊