本產品的文件集力求使用無偏見用語。針對本文件集的目的,無偏見係定義為未根據年齡、身心障礙、性別、種族身分、民族身分、性別傾向、社會經濟地位及交織性表示歧視的用語。由於本產品軟體使用者介面中硬式編碼的語言、根據 RFP 文件使用的語言,或引用第三方產品的語言,因此本文件中可能會出現例外狀況。深入瞭解思科如何使用包容性用語。
思科已使用電腦和人工技術翻譯本文件,讓全世界的使用者能夠以自己的語言理解支援內容。請注意,即使是最佳機器翻譯,也不如專業譯者翻譯的內容準確。Cisco Systems, Inc. 對這些翻譯的準確度概不負責,並建議一律查看原始英文文件(提供連結)。
本文檔介紹如何對Catalyst 9000交換機上作為DHCP中繼代理的慢速或間歇性DHCP地址分配失敗進行故障排除。
思科建議您瞭解以下主題:
本文中的資訊係根據以下軟體和硬體版本:
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
本文件也適用於以下硬體和軟體版本:
本文說明如何對作為DHCP中繼代理的Catalyst 9000系列交換機上緩慢的動態主機配置協定(DHCP)地址分配或間歇性DHCP地址分配失敗進行故障排除。
控制層面策略(CoPP)功能透過保護CPU免受不必要的流量和拒絕服務(DoS)攻擊,提高了裝置的安全性。它還可以保護控制流量和管理流量免受因其他高流量、低優先順序流量引起的流量丟包的影響。
您的裝置通常分為三個操作平面,每個平面都有其自己的目標:
您可以使用CoPP保護大多數CPU流量,並確保路由穩定性、可達性和資料包傳送。最重要的是,您可以使用CoPP保護CPU免受DoS攻擊。
CoPP使用模組化QoS命令列介面(MQC)和CPU隊列來實現這些目標。根據某些標準將不同型別的控制平面流量分組在一起,並分配給CPU隊列。您可以透過在硬體中配置專用監察器來管理這些CPU隊列。例如,您可以修改特定CPU隊列(流量型別)的監察器速率,或者可以停用特定型別流量的監察器。
雖然監察器是在硬體中配置的,但CoPP不會影響CPU效能或資料平面的效能。但是,由於它限制了通向CPU的資料包數量,CPU負載受到控制。這表示等待來自硬體的封包的服務可以看到輸入封包速率受到更嚴格的控制(此速率可由使用者設定)。
在路由介面或SVI上配置ip helper-address 命令時,Catalyst 9000交換機將配置為DHCP中繼代理。配置幫助程式地址的介面通常是下遊客戶端的預設網關。要使交換機為其客戶端提供成功的DHCP中繼服務,它必須能夠處理入站DHCP發現消息。這要求交換機接收DHCP發現,並將此資料包傳送到其CPU進行處理。接收並處理DHCP發現後,中繼代理將從接收DHCP發現的介面建立新單播資料包,並將其發往ip helper-address配置中定義的IP地址。建立資料包後,硬體將轉發該資料包,並將其傳送到DHCP伺服器,然後處理該資料包,最後再將其傳送回中繼代理,以便客戶端的DHCP進程可以繼續。
常見的問題是中繼代理的DHCP事務資料包由於受到特定ICMP方案(如ICMP重定向或ICMP目標不可達消息)的影響,而無意中受到傳送到CPU的資料流的影響。此行為可能表現為客戶端無法及時從DHCP獲取IP地址,甚至無法完成DHCP分配失敗。在某些情況下,只能在每天的特定時間觀察行為,例如網路負載完全最大化時的高峰工作時間。
如背景部分所述,Catalyst 9000系列交換機隨附在裝置上配置和啟用的預設CoPP策略。此CoPP策略用作服務品質(QoS)策略,該策略位於前面板埠上接收的流量路徑中,並且發往裝置CPU。它根據流量型別和策略中配置的預定義閾值對流量進行速率限制。預設情況下分類和速率受到限制的一些流量示例包括路由控制資料包(通常用DSCP CS6標籤)、拓撲控制資料包(STP BPDU)和低延遲資料包(BFD)。這些資料包必須優先處理,因為能夠可靠地處理它們會導致穩定的網路環境。
使用show platform hardware fed switch active qos queue stats internal cpu policer命令檢視CoPP監察器統計資訊。
ICMP重新導向佇列(佇列6)和BROADCAST佇列(佇列12)共用相同的PlcIdx 0 (管制器索引)。這意味著需要由裝置CPU處理的所有廣播流量(例如DHCP發現)與同樣發往ICMP重定向隊列中裝置CPU的流量共用。這可能會導致前面提到的問題,因為ICMP重定向隊列流量會耗盡需要由BROADCAST隊列提供服務的流量,從而導致合法廣播資料包被丟棄,從而導致DHCP事務失敗。
9300-Switch#show platform hardware fed switch active qos queue stats internal cpu policer
CPU Queue Statistics
============================================================================================
(default) (set) Queue Queue
QId PlcIdx Queue Name Enabled Rate Rate Drop(Bytes) Drop(Frames)
--------------------------------------------------------------------------------------------
0 11 DOT1X Auth Yes 1000 1000 0 0
1 1 L2 Control Yes 2000 2000 0 0
2 14 Forus traffic Yes 4000 4000 0 0
3 0 ICMP GEN Yes 600 600 0 0
4 2 Routing Control Yes 5400 5400 0 0
5 14 Forus Address resolution Yes 4000 4000 0 0
6 0 ICMP Redirect Yes 600 600 0 0 <-- Policer Index 0
7 16 Inter FED Traffic Yes 2000 2000 0 0
8 4 L2 LVX Cont Pack Yes 1000 1000 0 0
9 19 EWLC Control Yes 13000 13000 0 0
10 16 EWLC Data Yes 2000 2000 0 0
11 13 L2 LVX Data Pack Yes 1000 1000 0 0
12 0 BROADCAST Yes 600 600 0 0 <-- Policer Index 0
13 10 Openflow Yes 200 200 0 0
14 13 Sw forwarding Yes 1000 1000 0 0
15 8 Topology Control Yes 13000 16000 0 0
16 12 Proto Snooping Yes 2000 2000 0 0
17 6 DHCP Snooping Yes 500 500 0 0
18 13 Transit Traffic Yes 1000 1000 0 0
19 10 RPF Failed Yes 250 250 0 0
20 15 MCAST END STATION Yes 2000 2000 0 0
<snip>
超過CoPP策略中預設600資料包每秒速率的流量在到達CPU之前會被丟棄。
9300-Switch#show platform hardware fed switch active qos queue stats internal cpu policer
CPU Queue Statistics
============================================================================================
(default) (set) Queue Queue
QId PlcIdx Queue Name Enabled Rate Rate Drop(Bytes) Drop(Frames)
--------------------------------------------------------------------------------------------
0 11 DOT1X Auth Yes 1000 1000 0 0
1 1 L2 Control Yes 2000 2000 0 0
2 14 Forus traffic Yes 4000 4000 0 0
3 0 ICMP GEN Yes 600 600 0 0
4 2 Routing Control Yes 5400 5400 0 0
5 14 Forus Address resolution Yes 4000 4000 0 0
6 0 ICMP Redirect Yes 600 600 3063106173577 3925209161 <-- Dropped packets in queue
7 16 Inter FED Traffic Yes 2000 2000 0 0
8 4 L2 LVX Cont Pack Yes 1000 1000 0 0
9 19 EWLC Control Yes 13000 13000 0 0
10 16 EWLC Data Yes 2000 2000 0 0
11 13 L2 LVX Data Pack Yes 1000 1000 0 0
12 0 BROADCAST Yes 600 600 1082560387 3133323 <-- Dropped packets in queue
13 10 Openflow Yes 200 200 0 0
14 13 Sw forwarding Yes 1000 1000 0 0
15 8 Topology Control Yes 13000 16000 0 0
16 12 Proto Snooping Yes 2000 2000 0 0
17 6 DHCP Snooping Yes 500 500 0 0
18 13 Transit Traffic Yes 1000 1000 0 0
19 10 RPF Failed Yes 250 250 0 0
20 15 MCAST END STATION Yes 2000 2000 0 0
<snip>
在第一種場景中考慮此拓撲:
事件的順序如下:
1. 10.10.10.100的使用者發起到裝置10.100.100.100的telnet連線,即遠端網路。
2. 目的IP位於不同的子網中,因此資料包會傳送到使用者的預設網關10.10.10.15。
3. 當Catalyst 9300收到要路由的這個封包時,它會將該封包傳送至其CPU以產生ICMP重新導向。
產生ICMP重新導向是因為,從9300交換器的角度來看,如果筆記型電腦直接將此封包傳送到位於10.10.10.1的路由器,效率會更高,因為無論怎樣,它都是Catalyst 9300的下一躍點,且位於使用者所在的相同VLAN中。
問題在於,整個流程會在CPU上處理,因為它符合ICMP重新導向條件。如果其他裝置傳送的流量符合ICMP重定向方案,則更多的流量開始被傳送到此隊列中的CPU,這可能會影響BROADCAST隊列,因為它們共用同一個CoPP監察器。
調試ICMP以檢視ICMP重定向系統日誌。
9300-Switch#debug ip icmp <-- enables ICMP debugs
ICMP packet debugging is on
9300-Switch#show logging | inc ICMP
*Sep 29 12:41:33.217: ICMP: echo reply sent, src 10.10.10.15, dst 10.10.10.100, topology BASE, dscp 0 topoid 0
*Sep 29 12:41:33.218: ICMP: echo reply sent, src 10.10.10.15, dst 10.10.10.100, topology BASE, dscp 0 topoid 0
*Sep 29 12:41:33.219: ICMP: echo reply sent, src 10.10.10.15, dst 10.10.10.100, topology BASE, dscp 0 topoid 0
*Sep 29 12:41:33.219: ICMP: echo reply sent, src 10.10.10.15, dst 10.10.10.100, topology BASE, dscp 0 topoid 0
*Sep 29 12:43:08.127: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1
*Sep 29 12:50:09.517: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1
*Sep 29 12:50:10.017: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1 <-- ICMP Redirect to use 10.10.10.1 as Gateway
*Sep 29 12:50:14.293: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1
*Sep 29 12:50:19.053: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1
*Sep 29 12:50:23.797: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1
*Sep 29 12:50:28.537: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1
*Sep 29 12:50:33.284: ICMP: redirect sent to 10.10.10.100 for dest 10.100.100.100, use gw 10.10.10.1
注意:由於篇幅較大,建議在啟用ICMP調試之前停用控制檯日誌記錄和終端監控。
Catalyst 9300 CPU上的嵌入式資料包捕獲顯示CPU上Telnet連線的初始TCP SYN以及生成的ICMP重定向。
ICMP重定向資料包源自發往客戶端的Catalyst 9300 VLAN 10介面,它包含ICMP重定向資料包傳送目的地的原始資料包報頭。
在此案例中,可以防止傳送到CPU的封包,這也會停止產生ICMP重新導向封包。
現代作業系統不使用ICMP重定向消息,因此生成、傳送和處理這些資料包所需的資源並不是網路裝置上CPU資源的有效使用。
或者,讓使用者使用預設閘道10.10.10.1,但此類組態可能是因為某種原因而存在,且不在本檔案範圍內。
使用no ip redirects CLI停用ICMP重定向。
9300-Switch#conf t
Enter configuration commands, one per line. End with CNTL/Z.
9300-Switch(config)#interface vlan 10
9300-Switch(config-if)#no ip redirects <-- disable IP redirects
9300-Switch(config-if)#end
驗證是否在介面上停用了ICMP重定向。
9300-Switch#show ip interface vlan 10
Vlan10 is up, line protocol is up
Internet address is 10.10.10.15/24
Broadcast address is 255.255.255.255
Address determined by setup command
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Multicast reserved groups joined: 224.0.0.102
Outgoing Common access list is not set
Outgoing access list is not set
Inbound Common access list is not set
Inbound access list is BLOCK-TELNET
Proxy ARP is disabled
Local Proxy ARP is disabled
Security level is default
Split horizon is enabled
ICMP redirects are never sent <-- redirects disabled
ICMP unreachables are never sent
ICMP mask replies are never sent
IP fast switching is enabled
IP Flow switching is disabled
IP CEF switching is enabled
IP CEF switching turbo vector
<snip>
有關ICMP重定向及其傳送時間的詳細資訊,請訪問此連結:https://www.cisco.com/c/en/us/support/docs/ip/routing-information-protocol-rip/13714-43.html
請考慮以下拓撲:10.10.10.100的使用者發起到10.100.100.100的Telnet連線。這一次,在VLAN 10 SVI上配置了阻止telnet連線的訪問清單。
9300-Switch#show running-config interface vlan 10
Building Configuration..
Current Configuration : 491 bytes
!
interface Vlan10
ip address 10.10.10.15 255.255.255.0
no ip proxy-arp
ip access-group BLOCK-TELNET in <-- inbound ACL
end
9300-Switch#
9300-Switch#show ip access-list BLOCK-TELNET
Extended IP access list BLOCK-TELNET
10 deny tcp any any eq telnet <-- block telnet
20 permit ip any any
9300-Switch#
事件的順序如下:
1. 10.10.10.100的使用者發起到裝置10.100.100.100的telnet連線。
2. 目的IP位於不同的子網中,因此資料包會傳送到使用者的預設網關。
3. 當Catalyst 9300收到此資料包時,會根據入站ACL對其進行評估並阻止。
4. 由於資料包被阻止,並且介面上啟用了IP不可達,因此資料包將被傳送到CPU,以便裝置可以生成ICMP目標不可達資料包。
調試ICMP以檢視ICMP目標不可達系統日誌。
9300-Switch#debug ip icmp <-- enables ICMP debugs
ICMP packet debugging is on
9300-Switch#show logging | include ICMP
<snip>
*Sep 29 14:01:29.041: ICMP: dst (10.100.100.100) administratively prohibited unreachable sent to 10.10.10.100 <-- packet blocked and ICMP message sent to client
注意:由於篇幅較大,建議在啟用ICMP調試之前停用控制檯日誌記錄和終端監控。
Catalyst 9300 CPU上的嵌入式資料包捕獲顯示CPU上Telnet連線的初始TCP SYN以及傳送的ICMP目標不可達。
ICMP目的地無法到達資料包源自Catalyst 9300 VLAN 10介面,該介面發往客戶端,並包含ICMP資料包傳送目的地的原始資料包報頭。
在此案例中,停用傳送ACL封鎖的封包的行為,以便產生ICMP目的地無法連線訊息。
Catalyst 9000系列交換器上的路由介面預設啟用IP無法連線功能。
9300-Switch#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-Switch(config)#interface vlan 10
9300-Switch(config-if)#no ip unreachables <-- disable IP unreachables
驗證是否已為介面停用這些功能。
9300-Switch#show ip interface vlan 10
Vlan10 is up, line protocol is up
Internet address is 10.10.10.15/24
Broadcast address is 255.255.255.255
Address determined by setup command
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Multicast reserved groups joined: 224.0.0.102
Outgoing Common access list is not set
Outgoing access list is not set
Inbound Common access list is not set
Inbound access list is BLOCK-TELNET
Proxy ARP is disabled
Local Proxy ARP is disabled
Security level is default
Split horizon is enabled
ICMP redirects are never sent
ICMP unreachables are never sent <-- IP unreachables disabled
ICMP mask replies are never sent
IP fast switching is enabled
IP Flow switching is disabled
IP CEF switching is enabled
IP CEF switching turbo vector
<snip>
考慮用於前兩個方案的上一個拓撲。此時,10.10.10.100的使用者嘗試訪問網路中自此退出使用的資源。因此,Catalyst 9300上不再存在用於託管此網路的SVI和VLAN。但是,路由器仍有一個靜態路由,指向Catalyst 9300 VLAN 10介面作為此網路的下一跳。
由於Catalyst 9300不再配置此網路,因此它不會顯示為直連,並且9300會將它沒有特定路由的任何資料包路由到其靜態預設路由(指向10.10.10.1處的路由器)。
當使用者嘗試連線到192.168.10.0/24位址空間中的資源時,此行為會在網路中引入路由回圈。此封包在9300和路由器之間循環,直到TTL到期為止。
1. 使用者嘗試連線到192.168.10/24網路中的資源
2.Catalyst 9300接收資料包,並將其路由到下一跳為10.10.10.1的預設路由,並將TTL遞減1。
3. 路由器收到此資料包,並檢查路由表,查詢下一跳為10.10.10.15的網路是否有路由。它會將TTL遞減1,並將資料包路由回9300。
4. Catalyst 9300接收資料包,並再次將其路由回10.10.10.1並將TTL遞減1。
此程式會重複執行,直到IP TTL達到零為止。
當Catalyst收到IP TTL = 1的資料包時,它會將資料包傳送到CPU並生成ICMP TTL-Exceeded消息。
ICMP資料包型別為11,代碼為0(TTL在傳輸中過期)。無法通過CLI命令停用此資料包型別
在此案例中,DHCP流量問題開始發揮作用,因為被環路的資料包會受到ICMP重定向的影響,因為它們遺漏了在其上接收的同一介面。
使用者傳送的資料包也會受到ICMP重定向的影響。在這種情況下,DHCP流量很容易從BROADCAST隊列中耗盡。在規模上,由於重定向隊列中傳送的資料包數量較多,此情況會更糟。
此處,CoPP丟棄透過向192.168.10.0/24網路發出的1000 ping進行演示,每次ping操作之間超時為0秒。9300上的CoPP統計資訊將被清除,並且在傳送ping之前以零位元組丟棄。
9300-Switch#clear platform hardware fed switch active qos statistics internal cpu policer <-- clear CoPP stats
9300-Switch#show platform hardware fed switch active qos queue stats internal cpu policer | i Redirect|Drop <-- verify 0 drops
QId PlcIdx Queue Name Enabled Rate Rate Drop(Bytes) Drop(Frames)
6 0 ICMP Redirect Yes 600 600 0 0 <-- bytes dropped 0
<snip>
使用者將流量傳送到遠端網路。
User#ping 192.168.10.10 timeout 0 rep 1000 <-- User sends 1000 pings
Type escape sequence to abort.
Sending 1000, 100-byte ICMP Echos to 192.168.10.10, timeout is 0 seconds:
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
......................................................................
....................
Success rate is 0 percent (0/1000)
ICMP調試顯示由於路由環路導致的重定向和TTL超出系統日誌。
9300-Switch#debug ip icmp
ICMP packet deubgging is on
*Sep 29 16:33:22.676: ICMP: redirect sent to 10.10.10.100 for dest 192.168.10.10, use gw 10.10.10.1 <-- redirect sent
*Sep 29 16:33:22.678: ICMP: time exceeded (time to live) sent to 10.10.10.100 (dest was 192.168.10.10), topology BASE, dscp 0 topoid 0 <-- TTL exceeded observed
*Sep 29 16:33:22.678: ICMP: time exceeded (time to live) sent to 10.10.10.100 (dest was 192.168.10.10), topology BASE, dscp 0 topoid 0
*Sep 29 16:33:22.678: ICMP: time exceeded (time to live) sent to 10.10.10.100 (dest was 192.168.10.10), topology BASE, dscp 0 topoid 0
<snip>
注意:由於篇幅較大,建議在啟用ICMP調試之前停用控制檯日誌記錄和終端監控。
由於傳送到CPU進行重定向的流量過多,可看到CoPP丟棄。請注意,這僅適用於單個客戶端。
9300-Switch#show platform hardware fed switch active qos queue stats internal cpu policer
CPU Queue Statistics
============================================================================================
(default) (set) Queue Queue
QId PlcIdx Queue Name Enabled Rate Rate Drop(Bytes) Drop(Frames)
--------------------------------------------------------------------------------------------
0 11 DOT1X Auth Yes 1000 1000 0 0
1 1 L2 Control Yes 2000 2000 0 0
2 14 Forus traffic Yes 4000 4000 0 0
3 0 ICMP GEN Yes 600 600 0 0
4 2 Routing Control Yes 5400 5400 0 0
5 14 Forus Address resolution Yes 4000 4000 0 0
6 0 ICMP Redirect Yes 600 600 15407990 126295 <-- drops in redirect queue
7 16 Inter FED Traffic Yes 2000 2000 0 0
8 4 L2 LVX Cont Pack Yes 1000 1000 0 0
<snip>
本場景中的解決方案是停用ICMP重定向,與場景1中的相同。路由環路也是個問題,但強度會增加,因為資料包也會被傳送以進行重定向。
當TTL為1時,也會傳送ICMP TTL-Exceeded封包,但這些封包使用不同的CoPP管制器索引,且不會與BROADCAST共用佇列,因此DHCP流量不會受到影響。
只需使用no ip redirects CLI停用ICMP重定向。
9300-Switch#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
9300-Switch(config)#interface vlan 10
9300-Switch(config-if)#no ip redirects <-- disable IP redirects
9300-Switch(config-if)#end
修訂 | 發佈日期 | 意見 |
---|---|---|
2.0 |
20-Oct-2023 |
重新認證 |
1.0 |
30-Sep-2021 |
初始版本 |