본 제품에 대한 문서 세트는 편견 없는 언어를 사용하기 위해 노력합니다. 본 설명서 세트의 목적상, 편견 없는 언어는 나이, 장애, 성별, 인종 정체성, 민족 정체성, 성적 지향성, 사회 경제적 지위 및 교차성에 기초한 차별을 의미하지 않는 언어로 정의됩니다. 제품 소프트웨어의 사용자 인터페이스에서 하드코딩된 언어, RFP 설명서에 기초한 언어 또는 참조된 서드파티 제품에서 사용하는 언어로 인해 설명서에 예외가 있을 수 있습니다. 시스코에서 어떤 방식으로 포용적인 언어를 사용하고 있는지 자세히 알아보세요.
Cisco는 전 세계 사용자에게 다양한 언어로 지원 콘텐츠를 제공하기 위해 기계 번역 기술과 수작업 번역을 병행하여 이 문서를 번역했습니다. 아무리 품질이 높은 기계 번역이라도 전문 번역가의 번역 결과물만큼 정확하지는 않습니다. Cisco Systems, Inc.는 이 같은 번역에 대해 어떠한 책임도 지지 않으며 항상 원본 영문 문서(링크 제공됨)를 참조할 것을 권장합니다.
이 문서에서는 Catalyst 9000 Series 스위치에서 SSDP(Simple Service Discovery Protocol) 패킷을 삭제 또는 제한하는 모범 사례를 설명합니다.
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우 모든 명령의 잠재적인 영향을 미리 숙지하시기 바랍니다.
일반적으로 랩톱, 휴대폰 등의 최종 사용자 디바이스는 SSDP 프로토콜을 사용하는 UPnP(Universal Plug-and-Play) 기능을 자동으로 광고합니다. 클라이언트는 멀티캐스트 광고 패킷을 IP 주소 239.255.255.250으로 전송합니다. 이러한 알림은 대개 TTL(Time to Live)이 1로 전송되며 멀티캐스트 패킷을 생성한 호스트의 로컬 서브넷을 벗어나지 않습니다. 네트워크에서 다른 디바이스의 광고를 수신하기 위해 엔드포인트는 239.255.255.250 주소로 IGMP 멤버십 보고서를 전송하며, 이는 다른 멀티캐스트 소스에서 이 IP 주소로 전송된 멀티캐스트 트래픽도 이 클라이언트로 전달되어야 함을 네트워크에 알려줍니다.
수백 또는 수천 개의 엔드포인트가 모두 이 그룹의 소스 및 관심 수신자 역할을 하는 엔터프라이즈 환경에서는 이 클라이언트 작업을 선택하지 않으면 네트워크 디바이스가 쉽게 혼란에 빠질 수 있으며 네트워크 리소스가 모두 소진되면 중단이 발생할 수 있습니다.
이러한 소진은 주로 다음 두 가지 방법 중 하나로 발생합니다.
이 문서에서는 자세히 설명하지 않지만, SSDP의 개방적인 특성 때문에 공격자가 대규모 응답을 하나 또는 대상 호스트 그룹으로 보내기 위해 이 서비스가 활성화된 클라이언트 그룹에 작성된 패킷을 보낼 수 있다는 점에 유의해야 합니다. 또한 생성되는 많은 양의 발신 인터페이스 상태는 스위치가 ASIC(Application Specific Integrated Circuit) 내의 각 발신 인터페이스에 대해 각 프레임의 복사본을 하나씩 만들어야 하기 때문에 적은 양의 멀티캐스트 트래픽에서 스위치 성능 용량이 크게 압박될 수 있음을 의미합니다. 발신 인터페이스는 20개 이상의 인터페이스에서 용량 문제 및 패킷 손실의 위험이 더 높습니다.
Catalyst 9000 Series 스위치는 리소스가 소진되었을 때 "fman_fp_image" 또는 "FMFP"가 언급된 syslog를 인쇄합니다. 스위치에 리소스 소진이 발생하여 더 자세히 조사해야 할 경우 이러한 오류의 일부 또는 전체를 인쇄할 수 있습니다.
이러한 오류는 리소스 소진 중에 나타나는 일반적인 오류이지만 포괄적인 목록은 아닙니다.
그림 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>
모든 Catalyst 9000 Series 스위치는 특수 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" 명령을 사용하여 하드웨어 리소스가 모두 소모되었는지 확인할 수 있습니다.
참고: 이 명령은 멀티캐스트 트래픽에 의해 트리거된 리소스 소진에 국한되지 않습니다. 다른 문제로 인해 이러한 값이 0이 아닐 수 있습니다.
그림 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" 또는 "pending-acknowledgement" 카운터가 많은 상태에서 일관되게 유지되면 하드웨어가 잘못 프로그래밍될 위험이 증가합니다. 잘못 프로그래밍된 하드웨어는 유니캐스트 및 멀티캐스트 트래픽의 일반적인 중단 원인입니다.
명령 "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"
거의 소진되는 리소스 1개.
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
리소스 소진을 중지하려면 첫 번째 L3 홉 및 멀티캐스트 상태를 생성하기 전에 SSDP 트래픽을 중지해야 합니다. 가장 빠른 솔루션은 이 트래픽을 확인하는 PIM으로 구성된 모든 L3 인터페이스에 인그레스(ingress)에 적용된 IPv4 ACL(Access Control List)을 사용하는 것입니다. "show ip mroute 239.255.255.250" 명령으로 확인하고 각 그룹의 "Incoming Interface"를 확인합니다. 이는 트래픽 소스가 어떤 L3 인터페이스에서 소싱되는지 나타내며 둘 이상의 고유한 소스 인터페이스가 있을 수 있음을 인식해야 합니다. 이 컨피그레이션 예에서는 SSDP가 레이어 2에서 작동하고 L2 인접 호스트가 PNP 서비스를 검색할 수 있도록 허용하지만, 클라이언트 광고가 L3 경계를 통해 전달되지 않도록 하고 멀티캐스트 라우터 또는 스위치에서 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 트래픽에서 상태 생성을 제한하거나 완전히 방지하는 다른 방법이 있습니다. 각 네트워크가 다르기 때문에 모든 네트워크가 동일한 효과를 발휘하는 것은 아니며, 각 환경에 고유한 특정 장단점을 수반할 수 있습니다. 이 글을 쓸 때, SVI에서 트래픽을 차단하는 라우팅된 ACL은 이 트래픽의 상태와 볼륨을 줄이는 목표를 달성하기 위해 가장 권장되고 효과적이며 가장 적은 컨피그레이션 집약성을 유지하는 동시에, 최종 클라이언트가 로컬 VLAN에서 서비스를 검색하는 데 이 프로토콜을 사용할 수 있도록 허용합니다.
각 방법의 장점과 단점을 면밀히 파악하여 해당 환경에 더 잘 맞을 수 있는지 판단합니다.
이 방법은 고정 RP(Rendezvous Point) 매핑이 있는 환경에서 많은 수의 SVI 또는 L3 인터페이스에 걸쳐 ACL을 생성하면 컨피그레이션을 많이 수행할 수 있는 경우에 유용합니다.
이 방법을 구현하려면 다음 단계를 수행하십시오.
바람직하지 않은 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
이 방법은 L2 또는 L3에서 SSDP가 필요하지 않은 환경이나 SSDP 트래픽 볼륨이 IGMP 스누핑 또는 스위치의 다른 L2 멀티캐스트 리소스를 소모하는 환경에서 유용합니다.
두 개의 ACL을 구성합니다. 하나는 SSDP 트래픽에만 일치해야 하며, 하나는 모든 일반 네트워크 트래픽을 식별하는 데 사용되는 catch-all이어야 합니다.
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 액세스 맵을 2개의 시퀀스 번호로 구성합니다. 하나는 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
개정 | 게시 날짜 | 의견 |
---|---|---|
1.0 |
01-Jul-2022 |
최초 릴리스 |