简介
本文档介绍旨在丢弃或限制Catalyst 9000系列交换机上的简单服务发现协议(SSDP)数据包的最佳实践配置。
先决条件
要求
Cisco 建议您了解以下主题:
- 协议无关组播(PIM)操作
- SSDP如何针对您的环境使用
使用的组件
本文档中的信息基于以下软件和硬件版本:
- Cisco Catalyst 9200
- Cisco Catalyst 9300
- Cisco Catalyst 9400
- Cisco Catalyst 9500
- Cisco Catalyst 9600
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
了解企业环境中的SSDP风险
通常,笔记本电脑和移动电话等最终用户设备会自动通告其使用SSDP协议的通用即插即用(UPnP)功能。客户端向IP地址239.255.255.250发送组播通告数据包。这些通告通常以生存时间(TTL)1发送,并且不超出生成组播数据包的主机的本地子网。要接收网络上其他设备的通告,终端还会向239.255.255.250地址发送IGMP成员身份报告,该报告告诉网络,从任何其他组播源发送到此IP地址的组播流量也必须转发到此客户端。
在包含数百或数千个终端的企业环境中,这些终端都同时充当此组的源和感兴趣的接收方,如果不加以限制,此客户端活动很容易使网络设备不堪重负,并且在网络资源耗尽后可能导致网络中断。
这种疲劳主要通过两种方式之一发生:
- 触发辅助协议故障的硬件资源耗尽
- SSDP的接口和平台带宽耗尽,用作分布式拒绝服务(DDoS)攻击。
虽然本文未详细讨论,但必须注意,由于SSDP的开放性,攻击者可能会向启用了此服务的一组客户端发送精心编制的数据包,以触发向一个或多个目标主机发送大响应。创建的大量传出接口状态也意味着少量组播流量会显着降低交换机性能容量,因为交换机需要为特定应用集成电路(ASIC)内的每个传出接口制作一个帧副本。 传出接口列出,20个或更多接口存在更大的容量问题和数据包丢失风险。
硬件资源耗尽的症状
当资源耗尽时,Catalyst 9000系列交换机会打印提及“fman_fp_image”或“FMFP”的系统日志。当交换机出现资源耗尽且需要进一步调查时,可以打印这些错误中的某些或全部。
这些是资源耗尽期间出现的一些较常见错误,但不是全面的列表。
图 1:显示的最常见错误示例,这些错误是交换机资源耗尽的证据
%FMFP-3-OBJ_DWNLD_TO_DP_STUCK: R0/0: fman_fp_image: AOM download to Data Plane is stuck for more than 1800 seconds for <object details>
%FMFP-3-OBJ_DWNLD_TO_DP_RESUME: R0/0: fman_fp_image: AOM download of objects to Data Plane is back to normal
%FMFP_QOS-6-QOS_STATS_STALLED: R0/0: fman_fp_image: statistics stalled
%FMFP-3-OBJ_DWNLD_TO_DP_FAILED: R0/0: fman_fp_image: adj <hex>, Flags None download to DP failed
%FMFP-3-OBJ_DWNLD_TO_DP_FAILED: R0/0: fman_fp_image: adj <hex>, Flags Midchain download to DP failed
%FED_L3M_ERRMSG-3-RSRC_ERR: Switch <num> R0/0: fed: Failed to allocate hardware resource for group <address> - rc:<number or error>
%FED_L3_ERRMSG-3-RSRC_ERR: Chassis <num> R0/0: fed: Failed to allocate hardware resource for adj entry due to hardware resource exhaustion - rc:<number or error>
验证SSDP导致的硬件资源耗尽
所有Catalyst 9000系列交换机都使用特殊ASIC以高吞吐量执行大多数数据包路由。这些ASIC利用容量有限的不同表和内部资源。由于SSDP客户端同时充当公共组播组的源和接收方,因此硬件必须使用这些有限的资源在硬件中编程路径,以便数据包跟随,即使这些数据包从不会由于其他原因(TTL 1)来到或丢弃。 硬件资源耗尽后,不能安装任何组的新更新或添加,无论其与SSDP的关系如何。大量未安装的SSDP更新(状态波动)也可以在软件中排队,这也可能导致非组播流量的硬件更新中断或失败,从而影响用户流量并导致网络中断。
本文档仅在网络配置了PIM且具有已知SSDP组地址的第3层组播状态时相关。要检验此条件,请运行命令 "show ip mroute 239.255.255.250"
(如有必要,添加vrf语句)。 组239.255.255.250特定于SSDP协议。
如果命令输出包含大量传出接口和/或此特定组具有大量唯一源,则表明系统和网络容易因SSDP而中断。传出接口和唯一源的数量越多,这可能对服务产生影响的机率就越高。
图 2: 输出示例 "show ip mroute 239.255.255.250"
命令,其中SSDP在网络上处于活动状态。
Switch#show ip mroute 239.255.255.250
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag,
T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
U - URD, I - Received Source Specific Host Report,
Z - Multicast Tunnel, z - MDT-data group sender,
Y - Joined MDT-data group, y - Sending to MDT-data group,
G - Received BGP C-Mroute, g - Sent BGP C-Mroute,
N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed,
Q - Received BGP S-A Route, q - Sent BGP S-A Route,
V - RD & Vector, v - Vector, p - PIM Joins on route,
x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode
(*, 239.255.255.250), 00:08:35/stopped, RP 10.0.0.1, flags: SJC
Incoming interface: GigabitEthernet0/0/1.40, RPF nbr 10.0.0.1
Outgoing interface list:
GigabitEthernet0/0/1.101, Forward/Sparse, 00:08:35/00:02:40
GigabitEthernet0/0/1.102, Forward/Sparse, 00:08:35/00:02:38
GigabitEthernet0/0/1.100, Forward/Sparse, 00:08:35/00:02:39
(10.1.1.2, 239.255.255.250), 00:01:40/00:01:19, flags: T
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
GigabitEthernet0/0/1.40, Forward/Sparse, 00:01:40/00:01:40, A
GigabitEthernet0/0/1.100, Forward/Sparse, 00:01:40/00:02:39
GigabitEthernet0/0/1.102, Forward/Sparse, 00:01:40/00:02:38
GigabitEthernet0/0/1.101, Forward/Sparse, 00:01:40/00:02:40
(10.1.1.3, 239.255.255.250), 00:02:03/00:00:56, flags: JT
Incoming interface: GigabitEthernet0/0/1.40, RPF nbr 10.1.1.1
Outgoing interface list:
GigabitEthernet0/0/1.100, Forward/Sparse, 00:02:03/00:02:39
GigabitEthernet0/0/1.102, Forward/Sparse, 00:02:03/00:02:38
GigabitEthernet0/0/1.101, Forward/Sparse, 00:02:03/00:02:40
(10.1.1.4, 239.255.255.250), 00:08:35/00:02:32, flags: T
Incoming interface: GigabitEthernet0/0/1.40, RPF nbr 10.1.1.1
Outgoing interface list:
GigabitEthernet0/0/1.100, Forward/Sparse, 00:08:35/00:02:39
GigabitEthernet0/0/1.102, Forward/Sparse, 00:08:35/00:02:38
GigabitEthernet0/0/1.101, Forward/Sparse, 00:08:35/00:02:40, A
除非SSDP用于特定目的,否则此输出应为空,或者传出接口数量少,和/或唯一源数量少,以防止资源耗尽和可能的服务影响。
如果看到大量组播组,可使用命令show platform software object-manager fp active statistics或show platform software object-manager fp switch active statistics来判断硬件资源是否已耗尽。
注意:此命令不特定于组播流量触发的资源耗尽,其他问题可能导致这些值为非零。
图 3: 输出 "show platform software object-manager fp active statistics"
问题状态
Switch#show platform software object-manager fp active statistics
Forwarding Manager Asynchronous Object Manager Statistics
Object update: Pending-issue: 109058, Pending-acknowledgement: 76928 <-- Pending-issue is very high, this
Batch begin: Pending-issue: 0, Pending-acknowledgement: 0 is not expected.
Batch end: Pending-issue: 0, Pending-acknowledgement: 0
Command: Pending-acknowledgement: 0
Total-objects: 304085
Stale-objects: 0
Resolve-objects: 0
Childless-delete-objects: 530
Error-objects: 1098
Paused-types: 127
图3的输出显示了资源耗尽的交换机的症状。有几条命令输出行在正常操作期间不预期出现:
- 待处理问题:预计该值为零或接近零。如果在命令的多次迭代中此值仍为大的非零值,则表示资源耗尽
- 待确认:预计该值为零或接近零。如果在命令的多次迭代中此值仍为大的非零值,则表示资源耗尽
- 无子对象:预计该值为零或接近零。值不应超过10。
- 错误对象:预计该值为零或接近零。值不应超过10。
在存在大量“待处理问题”或“待处理确认”计数器的状态下,始终会增加硬件被错误编程的风险。错误编程的硬件是单播和组播流量的常见故障来源。
命令 "show platform hardware fed switch active fwd-asic resource utilization" or in some models "show platform hardware fed active fwd-asic resource utilization"
可用于查看ASIC上使用的一些有限资源并确定内部资源是否已耗尽:
图 4: 输出示例"show platform hardware fed active fwd-asic resource utilization"
资源几近耗尽。
Switch#show platform hardware fed active fwd-asic resource utilization
Resource Info for ASIC Instance: 0
Resource Name Allocated Free
------------------------------------------
RSC_DI 3822 38076
RSC_FAST_DI 0 192
RSC_RIET_0 1 1024
RSC_RIET_1 0 512
RSC_RIET_2 0 512
RSC_RIET_3 0 512
RSC_RIET_4 0 512
RSC_RIET_5 0 512
RSC_RIET_6 0 256
RSC_RIET_7 0 255
RSC_VLAN_LE 116 3976
RSC_L3IF_LE 116 3907
RIM_RSC_DGT 1 255
RSC_VPN_PREFIX_ID 1 32768
RSC_LABEL_STACK_ID 1 65536
RSC_RI 7358 82730
RSC_LI_RI 0 129
RSC_PORT_LE_RI 0 2048
RSC_PORT_LE 0 1827
RSC_RI_REP 10635 120437
RSC_SI 11842 119072
RSC_SI_IND 1 255
RSC_SI_STATS 3550 45602
RSC_RCP1_FID 1 1023
RSC_RCP2_FID 1 1023
RSC_RCP3_FID 1 1023
RSC_RCP4_FID 1 1023
RSC_LV1_ECR 1 63
RSC_LV2_ECR 3 253
RSC_ENH_ECR 1 0
RSC_RPF_MATCH 12 1012
RSC_PLC 1 2047
RSC_PLC_PF 1 255
RSC_MTU_INDEX 6 250
RSC_EGR_REDIRECT_INDEX 2 2046
RSC_RIL_INDEX 131065 7 <-- Free entries extremely low, this is not expected.
RSC_SIF 1 1023
RSC_GROUP_LE 1 1023
RSC_RI_REP_LOCAL 1 0
RSC_EXT_SI 512 65024
在图4中,“RSC_RIL_INDEX”的值显示有131065个条目正在使用,只有7个可用。此资源被大量唯一SSDP组消耗。虽然并非特定于SSDP,但具有较少可用条目和大量已分配条目的资源表明交换机接近容量问题,因此必须进行调查。
命令 "show platform hardware fed switch active fwd-asic resource tcam utilization" or on some models "show platform hardware fed active fwd-asic resource tcam utilization"
可用于查看按资源划分的每个ASIC利用率细分。SSDP耗尽的另一个可能签名是“L3组播条目”的“已用值”列,该列接近或位于“最大值”。
图 5: 输出示例"show platform hardware fed active fwd-asic resource tcam utilization"
正常运行
Switch#show platform hardware fed active fwd-asic resource tcam utilization
CAM Utilization for ASIC [0]
Table Max Values Used Values
--------------------------------------------------------------------------------
Unicast MAC addresses 32768/768 6160/21
L3 Multicast entries 32768/768 3544/8 <-- Normal Utilization, not near Max Values
L2 Multicast entries 2304 181 <-- Normal Utilization, not near Max Values
Directly or indirectly connected routes 212992/1536 11903/39
Input Ipv4 QoS Access Control Entries 5632 17
Input Non Ipv4 QoS Access Control Entries 2560 36
Output Ipv4 QoS Access Control Entries 6144 13
Output Non Ipv4 QoS Access Control Entries 2048 27
Input Ipv4 Security Access Control Entries 7168 12
Input Non Ipv4 Security Access Control Entries 5120 76
Output Ipv4 Security Access Control Entries 7168 11
Output Non Ipv4 Security Access Control Entries 8192 27
Ingress Netflow ACEs 1024 8
Policy Based Routing ACEs 3072 20
Egress Netflow ACEs 1024 8
Flow SPAN ACEs 512 5
Flow Egress SPAN ACEs 512 8
Control Plane Entries 1024 235
Tunnels 2816 26
Lisp Instance Mapping Entries 512 3
Input Security Associations 512 4
SGT_DGT 32768/768 0/1
CLIENT_LE 8192/512 0/0
INPUT_GROUP_LE 1024 0
OUTPUT_GROUP_LE 1024 0
Macsec SPD 256 2
防止SSDP导致资源耗尽
要停止资源耗尽,必须在创建第一个L3跳和组播状态之前停止SSDP流量。最快的解决方案是使用IPv4访问控制列表(ACL),该列表应用于所有配置了PIM的L3接口的入口,该接口可以看到此流量。使用show ip mroute 239.255.255.250命令验证,并查看每个组的“传入接口”。这表示流量源来自哪个L3接口,并且知道可以有多个唯一源接口。此配置示例允许SSDP在第2层工作,并允许第2层相邻主机发现PNP服务,但阻止客户端通告跨第3层边界转发,并防止在任何组播路由器或交换机上创建第3层组播状态。
配置扩展ACL:
ip access-list extended BLOCK_SSDP
remark Block SSDP
deny ip any host 239.255.255.250 <-- Deny SSDP
permit ip any any
<-- Permit any other group
在每个L3接口下配置,在入口方向应用ACL:
Switch#configure terminal
Switch(config)#interface vlan100
Switch(config-if)#ip access-group BLOCK_SSDP in
Switch(config-if)#end