简介
本文档介绍在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,并且不会超出生成组播数据包的主机的本地子网。要接收网络上其他设备的通告,终端还会将IGMP成员身份报告发送到239.255.255.250地址,该地址告诉网络,从任何其他组播源发送到此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的输出显示了交换机资源耗尽的症状。在正常操作过程中,有几条命令输出行是无法预期的:
- Pending-issue:此值应为零或接近零。如果这在该命令的多次迭代中保持一个较大的非零值,则表明资源已耗尽
- 待确认:此值应为零或接近零。如果这在该命令的多次迭代中保持一个较大的非零值,则表明资源已耗尽
- Childless-delete-objects:应为零或接近零。不应有10以上的值。
- Error-objects:该值应为零或接近零。不应有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耗尽的另一个可能的签名是“Used Values”(已使用的值)列,用于“L3组播条目”接近或位于“Max Values”(最大值)。
图 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流量。最快的解决方案是使用应用于所有配置了PIM并看到此流量的第3层接口的入口的IPv4访问控制列表(ACL)。使用show ip mroute 239.255.255.250命令进行验证,并查看每个组的“Incoming Interface”。这表示流量的源来自哪个L3接口,并注意可以有多个唯一的源接口。此配置示例允许SSDP在第2层工作,并允许L2邻接主机发现PNP服务,但会阻止跨第3层边界转发客户端通告,并阻止在任何组播路由器或交换机上创建L3组播状态。
配置扩展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
阻止SSDP的备用方法
存在其他方法来限制或完全阻止从SSDP流量创建状态。由于每个网络不同,并非所有网络都同等有效,而且每个环境都可能具有某些独有的优势或劣势。在撰写本文时,在SVI上阻止流量的路由ACL仍然是最推荐、最有效、配置最密集的,以实现降低此流量的状态和容量的目标,同时仍允许终端客户端使用此协议发现其本地vlan上的服务。
仔细了解每种方法的优点和缺点,以确定哪种方法更适合您的环境。
替代方法1:配置PIM RP过滤器以防止SSDP注册到RP
此方法适用于具有静态交汇点(RP)映射的环境,在该环境中,创建跨大量SVI或L3接口的ACL可能需要大量配置。
- 此方法的优点是允许单个配置一次应用于多个L3接口。
- 此方法的缺点是,作为第一跳路由器正常状态创建的一部分,流量仍然被传送到交换机的CPU。在具有大量直接或间接连接的用户或大量SSDP流量的环境中,这种传送的流量仍会与其他合法网络流量竞争CPU资源。如果SSDP流量过大,则会对合法组播流量造成服务影响。
要实施此方法,请使用以下步骤:
配置拒绝不必要的SSDP流量的ACL:
Switch(config)#ip access-list standard 10
Switch(config-std-nacl)#deny 239.255.255.250 <-- Deny SSDP from registering
Switch(config-std-nacl)#permit 224.0.0.0 15.255.255.255
<-- Permit any other group
配置作为RP静态映射一部分创建的ACL
Switch#configure terminal
Switch(config)#ip pim rp-address 192.168.1.1 10
Switch(config-if)#end
备用方法2:配置Vlan访问映射(VACL)以拒绝所有SSDP流量
此方法适用于L2或L3不需要SSDP的环境,或SSDP流量耗尽IGMP监听或交换机其他L2组播资源的环境。
- 此方法的优点是易于在单一配置中扩展到大量vlan。它也是丢弃来自网络的所有SSDP流量的最有效的方式。
- 此方法的缺点是合法使用SSDP发现L2邻接服务的客户端现在将无法正常工作。L2和L3接口上的所有SSDP流量将被丢弃,并且L2或L3不会形成任何状态。此配置在阻止从本地L3接口上接收的流量创建状态方面无效。
配置两个ACL。一个必须仅与SSDP流量匹配,另一个必须是用于标识所有正常网络流量的全捕获型流量。
Switch(config)#ip access-list extended match_ssdp
Switch(config-ext-nacl)#permit ip any host 239.255.255.250
Switch(config-ext-nacl)#exit
Switch(config)#ip access-list extended match_all
Switch(config-ext-nacl)#permit ip any any
使用两个序列号配置vlan访问映射。一个用于拒绝SSDP,一个用于允许所有其他流量。将此项应用到所需的vlan。
Switch#configure terminal
Switch(config)#vlan access-map block_ssdp 10
Switch(config-access-map)#match ip address match_ssdp
Switch(config-access-map)#action drop
Switch(config-access-map)#vlan access-map block_ssdp 20
Switch(config-access-map)#match ip address match_all
Switch(config-access-map)#action forward
Switch(config-access-map)#exit
Switch(config)#vlan filter block_ssdp vlan-list