此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍自适应安全设备(ASA)上的组播路由和常见问题。
缩写词 |
说明 |
FHR |
第一跳路由器 — 直接连接到组播流量源的一跳。 |
LHR |
最后一跳路由器 — 直接连接到组播流量接收器的跳。 |
RP |
交汇点 |
DR |
指定路由器 |
SPT |
最短路径树 |
RPT |
交汇点(RP)树、共享树 |
RPF |
反向路径转发 |
石油 |
传出接口列表 |
MRIB |
组播路由信息库 |
MFIB |
组播转发信息库 |
ASM |
任意源组播 |
BSR |
Bootstrap路由器 |
SSM |
源特定组播 |
FP |
快速路径 |
服务提供商 |
慢速路径 |
CP |
控制点 |
PPS |
每秒数据包速率 |
因为ASA通过真正的组播路由协议(PIM)与邻居通信,所以PIM稀疏模式是首选模式。在ASA 7.0版本发布之前,IGMP末节模式是唯一的组播配置选项,其操作方法只是将从客户端收到的IGMP报告转发到上游路由器。
通常,组播基础设施由以下组件组成:
发送方=>发起组播流的主机或网络设备。例如,发送视频和/或音频流的服务器以及运行路由协议(如EIGRP或OSPF)的网络设备。
Receiver =>接收组播流的主机或设备。此术语通常用于那些对流量有积极兴趣并使用IGMP加入或离开有问题的组播组的主机。
路由器/ASA =>负责处理组播流/流量并在需要时从源到客户端转发到网络其他网段的网络设备。
组播路由协议=>负责转发组播数据包的协议。最常见的是PIM(协议无关组播),但也有其它类似于MOSPF的组播。
Internet组管理协议(IGMP)=>客户端用于接收来自特定组的组播流的过程。
使用PIM稀疏模式时,所有组播流量最初流向交汇点(RP),然后转发到接收器。一段时间后,组播流直接从源传输到接收器(并绕过RP)。
此图片说明了一个常见部署,其中ASA在一个接口上拥有组播客户端,而在另一个接口上拥有PIM邻居:
1.启用组播路由(全局配置模式)。
ASA(config)# multicast-routing
2.定义PIM交汇点地址。
ASA(config)# pim rp-address 172.18.123.3
3.在适当的接口上允许组播数据包进入(仅在ASA的安全策略阻止入站组播数据包时才需要)。
access-list 105 extended permit ip any host 224.1.2.3 access-group 105 in interface outside
请注意,客户端IGMP注册(以红色显示)和服务器接收的流(以绿色显示)的颜色不同,因此采用这种方式来证明两个过程可以独立进行。
客户端注册步骤(红色步骤):
1.客户端发送组239.1.1.77的IGMP报告
2.路由器将PIM加入消息发送到为组239.1.1.77配置的静态RP(10.1.1.1)。
3. ASA向RP发送组239.1.1.77的PIM加入消息。
ASA在show mroute命令输出上显示PIM *,G条目:
ciscoasa# show mroute 239.1.1.77 Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, I - Received Source Specific Host Report, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT Timers: Uptime/Expires Interface state: Interface, State (*, 239.1.1.77), 00:03:43/00:02:41, RP 10.1.1.1, flags: S Incoming interface: outside RPF nbr: 10.38.111.240 Immediate Outgoing interface list: inside, Forward, 00:03:43/00:02:41
但是,由于源服务器尚未启动任何数据流,因此ASA上的“show mfib”输出不会显示任何收到的数据包:
ciscoasa# show mfib 239.1.1.77 Entry Flags: C - Directly Connected, S - Signal, IA - Inherit A flag, AR - Activity Required, K - Keepalive Forwarding Counts: Pkt Count/Pkts per second/Avg Pkt Size/Kbits per second Other counts: Total/RPF failed/Other drops Interface Flags: A - Accept, F - Forward, NS - Negate Signalling IC - Internal Copy, NP - Not platform switched SP - Signal Present Interface Counts: FS Pkt Count/PS Pkt Count (*,239.1.1.77) Flags: C K Forwarding: 0/0/0/0, Other: 0/0/0 outside Flags: A inside Flags: F NS Pkts: 0/0
在服务器开始向组播组发送任何流量之前,RP仅显示“*.G”条目,列表中没有传入接口,例如:
CRSv#show ip mroute 239.1.1.77 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.1.1.77), 00:00:02/00:03:27, RP 10.1.1.1, flags: S Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: GigabitEthernet2, Forward/Sparse-Dense, 00:00:02/00:03:27
一旦服务器开始向组播组传输数据流,RP就会创建一个“S,G”条目,并将面向发送方的接口放在传入接口列表中,并开始将流量下游发送到ASA:
CRSv#show ip mroute 239.1.1.77 ... (*, 239.1.1.77), 00:03:29/stopped, RP 10.1.1.1, flags: SF Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: GigabitEthernet2, Forward/Sparse-Dense, 00:03:29/00:02:58 (10.38.118.10, 239.1.1.77), 00:00:07/00:02:52, flags: FT Incoming interface: GigabitEthernet1, RPF nbr 0.0.0.0 Outgoing interface list: GigabitEthernet2, Forward/Sparse-Dense, 00:00:07/00:03:22
使用以下命令进行验证:
- show mroute命令显示“S,G”条目
- show mfib命令显示转发数据包计数器
- show conn命令显示与组播组ip相关的连接
ciscoasa# show mroute 239.1.1.77 Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, I - Received Source Specific Host Report, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT Timers: Uptime/Expires Interface state: Interface, State (*, 239.1.1.77), 00:06:22/00:02:50, RP 10.1.1.1, flags: S Incoming interface: outside RPF nbr: 10.38.111.240 Immediate Outgoing interface list: inside, Forward, 00:06:22/00:02:50 (10.38.118.10, 239.1.1.77), 00:03:00/00:03:28, flags: ST Incoming interface: outside RPF nbr: 10.38.111.240 Immediate Outgoing interface list: inside, Forward, 00:03:00/00:03:26 ciscoasa# show mfib 239.1.1.77 Entry Flags: C - Directly Connected, S - Signal, IA - Inherit A flag, AR - Activity Required, K - Keepalive Forwarding Counts: Pkt Count/Pkts per second/Avg Pkt Size/Kbits per second Other counts: Total/RPF failed/Other drops Interface Flags: A - Accept, F - Forward, NS - Negate Signalling IC - Internal Copy, NP - Not platform switched SP - Signal Present Interface Counts: FS Pkt Count/PS Pkt Count (*,239.1.1.77) Flags: C K Forwarding: 15/0/1271/0, Other: 0/0/0 outside Flags: A inside Flags: F NS Pkts: 0/15 (10.38.118.10,239.1.1.77) Flags: K Forwarding: 7159/34/1349/360, Other: 0/0/0 outside Flags: A inside Flags: F NS Pkts: 7159/5 ciscoasa# show conn all | i 239.1.1.77 UDP outside 10.38.118.10:58944 inside 239.1.1.77:5004, idle 0:00:00, bytes 10732896, flags - UDP outside 10.38.118.10:58945 inside 239.1.1.77:5005, idle 0:00:01, bytes 2752, flags - UDP outside 10.38.118.10:58944 NP Identity Ifc 239.1.1.77:5004, idle 0:00:00, bytes 0, flags - UDP outside 10.38.118.10:58945 NP Identity Ifc 239.1.1.77:5005, idle 0:00:01, bytes 0, flags -
注意:一旦客户端关闭组播客户端应用,主机将发送IGMP查询消息。
如果这是路由器知道的唯一主机,因为客户端想要接收数据流,则路由器会向RP发送IGMP修剪消息。
1.启用组播路由(全局配置模式)。
ASA(config)# multicast-routing
2.在防火墙接收igmp报告的接口上,配置igmp forward-interface命令。将数据包从接口转发到流源。在本示例中,组播接收器直接连接到内部接口,而组播源不在外部接口上。
! interface Ethernet0 nameif outside security-level 0 ip address 172.16.1.1 255.255.255.0 no pim ! interface Ethernet1 nameif inside security-level 100 ip address 10.0.0.1 255.255.255.0 no pim igmp forward interface outside !
3.在适当的接口上允许组播数据包进入(仅当ASA的安全策略拒绝入站组播流量时才需要)。
ASA(config)# access-list 105 extended permit ip any host 224.1.2.3 ASA(config)# access-group 105 in interface outside
通常,不同igmp接口子模式命令存在混淆,下图描述了何时使用每个命令:
双向PIM中没有共享树(SPT)。这意味着三件事:
1.第一跳路由器(连接到发送方)不向RP发送PIM注册数据包。
2. RP不发送PIM JOIN消息以加入源树。
3.接收方路径中的路由器向RP发送PIM加入消息以加入RPT。
这意味着ASA不会生成(S,G),因为设备不会加入SPT。所有组播流量都通过RP。只要(*,G)存在,ASA就会转发所有组播流量。如果没有(*,G),则表示ASA从未收到PIM加入数据包。如果是这种情况,ASA不得转发组播数据包。
1.启用组播路由(全局配置模式)。
ASA(config)# multicast-routing
2.定义PIM交汇点地址。
ASA(config)# pim rp-address 172.18.123.3 bidir
3.在适当的接口上允许组播数据包进入(仅在ASA的安全策略阻止入站组播数据包时才需要)。
access-list 105 extended permit ip any host 224.1.2.3 access-group 105 in interface outside
为了完全了解和诊断ASA上的组播转发问题,需要以下部分或全部信息:
show mroute show mfib show pim neighbor show route show tech-support
capture cap1 interface outside match ip any host 239.1.1.77 >>> This captures the multicast traffic itself capture cappim1 interface inside match pim any any >>> This captures PIM Join/Prune messages capture capigmp interface inside match igmp any any >>> This captures IGMP Report/Query messages
show mroute命令输出显示各种组和转发信息,与IOS show mroute 命令非常相似。show mfib命令显示各种组播组的转发状态。观察转发数据包计数器和其他(表示丢弃)尤其重要:
ciscoasa# show mfib Entry Flags: C - Directly Connected, S - Signal, IA - Inherit A flag, AR - Activity Required, K - Keepalive Forwarding Counts: Pkt Count/Pkts per second/Avg Pkt Size/Kbits per second Other counts: Total/RPF failed/Other drops Interface Flags: A - Accept, F - Forward, NS - Negate Signalling IC - Internal Copy, NP - Not platform switched SP - Signal Present Interface Counts: FS Pkt Count/PS Pkt Count (*,224.1.2.3) Flags: S K Forwarding: 0/0/0/0, Other: 0/0/0 inside Flags: F Pkts: 0/0 (192.168.1.100,224.1.2.3) Flags: K Forwarding: 6749/18/1300/182, Other: 690/0/690 outside Flags: A inside Flags: F Pkts: 6619/8 (*,232.0.0.0/8) Flags: K Forwarding: 0/0/0/0, Other: 0/0/0 ciscoasa#
clear mfib counters命令可用于清除计数器,这在测试期间非常有用:
ciscoasa# clear mfib counters
板载数据包捕获实用程序对于解决组播问题非常有用。在本示例中,捕获在DMZ接口发往239.17.17.17的所有入口数据包:
ciscoasa# capture dmzcap interface dmz ciscoasa# capture dmzcap match ip any host 239.17.17.17 ciscoasa# show cap dmzcap 324 packets captured 1: 17:13:30.976618 802.1Q vlan#301 P0 10.1.123.129.2000 > 239.17.17.17.16384: udp 172 2: 17:13:30.976679 802.1Q vlan#301 P0 10.1.123.129.2000 > 239.17.17.17.16384: udp 172 3: 17:13:30.996606 802.1Q vlan#301 P0 10.1.123.129.2000 > 239.17.17.17.16384: udp 172 4: 17:13:30.996652 802.1Q vlan#301 P0 10.1.123.129.2000 > 239.17.17.17.16384: udp 172 5: 17:13:31.016676 802.1Q vlan#301 P0 10.1.123.129.2000 > 239.17.17.17.16384: udp 172 6: 17:13:31.016722 802.1Q vlan#301 P0 10.1.123.129.2000 > 239.17.17.17.16384: udp 172 ....
show capture x detail 命令的输出显示了数据包的TTL,这非常有用。在此输出中,数据包的TTL为1(并且ASA传递此数据包,因为默认情况下它不会递减IP数据包的TTL),但下游路由器会丢弃数据包:
ASA# show cap capout detail 453 packets captured ... 1: 14:40:39.427147 c062.6baf.8dc3 0100.5e7f.02c3 0x8100 Length: 1362 802.1Q vlan#1007 P0 10.4.2.95.1806 > 239.255.2.195.5000: [udp sum ok] udp 1316 (DF) [ttl 1] (id 0)
数据包捕获对于捕获PIM和IGMP流量也非常有用。此捕获显示内部接口已收到来自10.0.0.2的IGMP数据包(IP协议2):
ciscoasa# capture capin interface inside ciscoasa# capture capin match igmp any any ciscoasa# show cap capin 1 packets captured 1: 10:47:53.540346 802.1Q vlan#15 P0 10.0.0.2 > 224.1.2.3: ip-proto-2, length 8 ciscoasa#
请注意,可以使用“show capture x detail”命令查看数据包的TTL。
在这里我们可以看到已捕获的ASP丢包捕获,其中显示已丢弃的组播数据包以及丢弃的原因(punt-rate-limit):
ASA# show cap capasp det 12: 14:37:26.538332 c062.6baf.8dc3 0100.5e7f.02c3 0x8100 Length: 1362 802.1Q vlan#1007 P0 10.76.4.95.1806 > 239.255.2.195.5000: [udp sum ok] udp 1316 (DF) [ttl 1] (id 0) Drop-reason: (punt-rate-limit) Punt rate limit exceeded 13: 14:37:26.538439 c062.6baf.8dc3 0100.5e7f.02c3 0x8100 Length: 1362 802.1Q vlan#1007 P0 10.76.4.95.1806 > 239.255.2.195.5000: [udp sum ok] udp 1316 (DF) [ttl 1] (id 0) Drop-reason: (punt-rate-limit) Punt rate limit exceeded
下图说明了ASA如何在PIM稀疏模式下与邻居设备交互。
了解网络拓扑
准确确定特定组播流的发送器和接收器的位置。此外,确定组播组IP地址以及交汇点的位置。
|
在这种情况下,可以在ASA的外部接口接收数据,然后将其转发到内部接口上的组播接收器。由于接收方与ASA的内部接口位于同一个IP子网中,因此当客户端请求接收数据流时,预计会在内部接口处收到IGMP报告。发送方的IP地址是192.168.1.50。
验证ASA是否从接收方收到IGMP报告
在本示例中,IGMP报告由接收方生成并由ASA处理。
数据包捕获和debug igmp的输出可用于验证ASA是否接收并成功处理IGMP消息。
验证ASA向交汇点发送PIM加入消息
ASA解释IGMP报告并生成PIM加入消息,然后将其从接口发送到RP。
此输出来自debug pim group 224.1.2.3并显示ASA成功发送PIM加入消息。组播流的发送方是192.168.1.50。
IPv4 PIM: (*,224.1.2.3) J/P processing IPv4 PIM: (*,224.1.2.3) Periodic J/P scheduled in 50 secs IPv4 PIM: (*,224.1.2.3) J/P adding Join on outside IPv4 PIM: (*,224.1.2.3) inside Processing timers IPv4 PIM: Sending J/P message for neighbor 10.2.3.2 on outside for 1 groups IPv4 PIM: [0] (192.168.1.50,224.1.2.3/32) MRIB update (a=0,f=0,t=1) IPv4 PIM: [0] (192.168.1.50,224.1.2.3/32) outside MRIB update (f=20,c=20) IPv4 PIM: [0] (192.168.1.50,224.1.2.3) Signal present on outside IPv4 PIM: (192.168.1.50,224.1.2.3) Create entry IPv4 PIM: [0] (192.168.1.50,224.1.2.3/32) outside MRIB modify NS IPv4 PIM: Adding monitor for 192.168.1.50
验证ASA接收并转发组播流
ASA开始在外部接口上接收组播流量(以绿色箭头表示),然后将其转发到内部接收器。
show mroute和show mfib命令以及数据包捕获可用于验证ASA接收和转发组播数据包。
连接表中会构建一个连接来表示组播流:
ciscoasa# show conn 59 in use, 29089 most used ... UDP outside:192.168.1.50/52075 inside:224.1.2.3/1234 flags - ...
本部分提供了一系列与实际ASA组播相关的问题
遇到此问题时,ASA无法从接口发送任何PIM消息。此图显示ASA无法向发送方发送PIM消息,但是当ASA需要向RP发送PIM消息时,也会出现相同的问题。
debug pim命令的输出显示ASA无法将PIM消息发送到上游下一跳路由器:
IPv4 PIM: Sending J/P to an invalid neighbor: outside 10.0.0.1
此问题并不特定于ASA,也会影响路由器。问题是由路由表配置和PIM邻居使用的HSRP配置的组合触发的。
路由表指向HSRP IP 10.0.0.1作为下一跳设备:
ciscoasa# show run route route outside 0.0.0.0 0.0.0.0 10.0.0.1 1
但是,PIM邻居关系在路由器的物理接口IP地址之间形成,而不是HSRP IP:
ciscoasa# show pim neighbor Neighbor Address Interface Uptime Expires DR pri Bidir 10.0.0.2 outside 01:18:27 00:01:25 1 10.0.0.3 outside 01:18:03 00:01:29 1 (DR)
有关详细信息,请参阅“为什么PIM稀疏模式不能与到HSRP地址的静态路由配合使用?”。
本文档摘录:
为什么路由器不发送加入/修剪消息? RFC 2362指“路由器定期向每个(S,G)、(*,G)和(*,*,RP)条目关联的每个不同RPF邻居发送加入/修剪消息。只有当RPF邻居是PIM邻居时,才会发送加入/修剪消息。"
为了缓解问题,请在ASA上为相关流量添加一个静态mroute条目。确保它指向两个路由器接口的IP地址(10.0.0.2或10.0.0.3)之一。在本例中,此命令允许ASA向地址为172.16.1.2的组播发送方发送PIM消息:
ciscoasa(config)# mroute 172.16.1.2 255.255.255.255 10.0.0.3
完成此操作后,组播路由表将覆盖ASA的单播路由表,ASA将PIM消息直接发送到10.0.0.3邻居。
对于此问题,ASA从直接连接的组播接收器接收IGMP报告,但它忽略了该报告。不生成调试输出,数据包被丢弃,数据流接收失败。
对于此问题,ASA会忽略数据包,因为它不是客户端所在的LAN网段上选举出的指定路由器。
此ASA CLI输出显示不同的设备是内部接口网络上的指定路由器(以“DR”表示):
ciscoasa#show pim neighbor Neighbor Address Interface Uptime Expires DR pri Bidir 192.168.1.2 outside 01:18:27 00:01:25 N/A> 10.0.0.2 inside 01:18:03 00:01:29 1 (DR)
默认情况下,将multicast-routing命令添加到配置中时,所有ASA接口上都启用PIM。如果ASA的内部接口(客户端所在的位置)上有其他PIM邻居(其他路由器或ASA),并且由于该网段的DR而选择了其中一个邻居,则其他非DR路由器会丢弃IGMP报告。解决方案是在接口上禁用PIM(在涉及的接口上使用no pim命令),或通过pim dr-priority接口命令将ASA设置为网段的DR。
默认情况下,ASA允许在接口上跟踪500个当前活动联接(报告)。这是可配置的最大值。如果接口外的客户端请求大量组播流,最多可以遇到500个活动加入,并且ASA可以忽略来自组播接收器的其他传入IGMP报告。
要确认这是否是导致组播故障的原因,请发出命令“show igmp interface interfacename”并查找该接口的“IGMP limit”信息。
ASA# show igmp interface inside Hosting-DMZ is up, line protocol is up Internet address is 10.11.27.13/24 IGMP is enabled on interface Current IGMP version is 2 IGMP query interval is 125 seconds IGMP querier timeout is 255 seconds IGMP max query response time is 10 seconds Last member query response interval is 1 seconds Inbound IGMP access group is: IGMP limit is 500, currently active joins: 500 Cumulative IGMP activity: 7018 joins, 6219 leaves IGMP querying router is 10.11.27.13 (this system)
DEBUG - IGMP: Group x.x.x.x limit denied on outside
此地址范围用于源特定组播(SSM),ASA当前不支持该组播。
debug igmp命令的输出显示以下错误:
IGMP: Exclude report on inside ignored for SSM group 232.179.89.253
在这种情况下,ASA在接口上接收组播流量,但不会将其转发到接收方。ASA会丢弃数据包,因为它们未通过反向路径转发(RPF)安全检查。RPF在所有接口上为组播流量启用,且无法禁用(对于单播数据包,默认情况下检查未启用,并使用ip verify reverse-path interface命令启用)。
由于RPF检查,当在接口上收到组播流量时,ASA会检查是否有路由返回该接口上的组播流量源(它检查单播和组播路由表)。如果它没有通往发送方的路由,则会丢弃数据包。这些丢包在show asp drop的输出中可视为计数器:
ciscoasa(config)# show asp drop Frame drop: Invalid UDP Length 2 No valid adjacency 36 No route to host 4469 Reverse-path verify failed 121012
一个选项是为流量发送方添加路由。在本示例中,mroute命令用于满足对源自外部接口上收到的172.16.1.2的组播流量的RPF检查:
ciscoasa(config)# mroute 172.16.1.2 255.255.255.255 outside
最初,PIM稀疏模式组播数据包从组播发送方流到RP,然后通过共享组播树从RP流到接收方。但是,一旦聚合比特率达到特定阈值,最接近组播接收方的路由器会尝试沿源特定树接收流量。此路由器为组生成新的PIM加入并将其发送到组播流的发送方(而不是像以前一样发送到RP)。
组播流量的发送方可以驻留在与RP不同的ASA接口上。当ASA收到要切换到源特定树的PIM加入时,ASA必须具有到发送方IP地址的路由。如果未找到此路由,则会丢弃PIM加入数据包,并在debug pim的输出中看到此消息
NO RPF Neighbor to send J/P
此问题的解决方案是为流的发送方添加一个静态mroute条目,指出发送方所在的ASA接口。
在这种情况下,由于数据包的TTL太低,组播流量会失败。这会导致ASA或网络中的其他设备丢弃它们。
通常,组播数据包的IP TTL值由发送它们的应用程序设置得非常低。有时,默认情况下这样做是为了帮助确保组播流量不会在网络中传输得太远。例如,默认情况下, 局域网 客户端应用(常用的组播发射器和测试工具)将IP数据包中的TTL默认设置为1。
如果关于组播拓扑的所有这些条件都成立,则ASA可能会遇到高CPU使用率,而组播流可能会遇到丢包情况:
如果遇到上述所有症状,则 由于设计限制,ASA被迫处理切换组播流量。这会导致高数据速率组播流遇到丢包情况。当丢弃这些数据包时,show asp drop计数器会增加,该计数器是punt-rate-limit。
要确定ASA是否存在此问题,请完成以下步骤:
第1步:检查ASA是否为RP:
show run pim show pim tunnel
第2步:检查ASA是否为最后一跳路由器:
show igmp group <mcast_group_IP>
第3步:检查ASA是否是第一跳路由器:
show mroute <mcast_group_IP>
可以采取以下步骤来缓解此问题:
— 修改拓扑,使ASA不是RP。或者,使发送方或接收方未直接连接到ASA
— 使用IGMP末节模式代替PIM进行组播转发。
当组播流的第一个数据包到达ASA时,ASA必须构建该特定组播连接和关联的mroute条目来转发数据包。当条目正在创建过程中,一些组播数据包可能会被丢弃,直到路由和连接已建立(通常这只需不到一秒钟)。组播流设置完成后,数据包不再受速率限制。
因此丢弃的数据包的ASP丢弃原因为“(punt-rate-limit)Punt rate limit exceeded”。这是“show capture asp”的输出(其中asp是在ASA上配置的ASP丢弃捕获,用于捕获丢弃的数据包),您可以看到由于以下原因丢弃的多播数据包:
ASA # show capture asp 2 packets captured 1: 16:14:49.419091 10.23.2.2.810 > 239.255.123.123.890: udp 32 Drop-reason: (punt-rate-limit) Punt rate limit exceeded 2: 16:14:49.919172 10.23.2.2.810 > 239.255.123.123.890: udp 32 Drop-reason: (punt-rate-limit) Punt rate limit exceeded 2 packets shown
只有在IGMP末节模式下运行的ASA才会遇到此问题。参与PIM组播路由的ASA不会受到影响。
问题通过Cisco Bug ID CSCeg确定48235 一个接口上的IGMP离开会中断其他接口上的组播流量。
这是漏洞的版本说明,它解释了问题:
Symptom: When a PIX or ASA firewall is configured for IGMP stub mode multicast reception and traffic from a multicast group is forwarded to more than one interface, if a host behind a the interface sends an IGMP Leave message for the group, it could temporarily interrupt the reception for that group on other interfaces of the firewall. The problem is triggered when the firewall forwards the IGMP leave for the group towards the upstream device; that device then sends a IGMP query to determine if any other receivers exist out that interface towards the firewall, but the firewall does not report that it still has valid receivers. Conditions: The PIX or ASA must be configured for IGMP stub mode multicast. IGMP stub mode is a legacy multicast forwarding technique, whereby IGMP packets from receivers are forwarded through the firewall towards the source of the stream. It is recommended to use PIM multicast routing instead of stub igmp forwarding. Workarounds: 1) Use PIM multicast routing instead of IGMP stub mode. 2) Decrease multicast IGMP query timers so that the receivers are queried more frequently, so their IGMP reports are forwarded towards the sender more frequently, thus restarting the stream quicker.
对于此特定问题,ASA会丢弃组播数据包(根据配置的安全策略)。但是,网络管理员很难确定丢包的原因。在这种情况下,由于为接口配置的出站访问列表,ASA会丢弃数据包。解决方法是允许出站访问列表中的组播流。
发生这种情况时,组播数据包将使用ASP丢弃计数器“FP no mcast output intrf(no-mcast-intrf)”丢弃。
流量极有可能受到控制点的速率限制,这是由于punt-rate-limit所致。查看asp丢弃输出和捕获以确认:
ASA# show asp drop Frame drop: Punt rate limit exceeded (punt-rate-limit) 1492520
ASA# show cap capasp det 12: 14:37:26.538332 c062.6baf.8dc3 0100.5e7f.02c3 0x8100 Length: 1362 802.1Q vlan#1007 P0 10.76.4.95.1806 > 239.255.2.195.5000: [udp sum ok] udp 1316 (DF) [ttl 1] (id 0) Drop-reason: (punt-rate-limit) Punt rate limit exceeded
mfib条目显示所有流量都进行了进程交换:
ASA(config)# show mfib 239.255.2.1195 Entry Flags: C - Directly Connected, S - Signal, IA - Inherit A flag, AR - Activity Required, K - Keepalive Forwarding Counts: Pkt Count/Pkts per second/Avg Pkt Size/Kbits per second Other counts: Total/RPF failed/Other drops Interface Flags: A - Accept, F - Forward, NS - Negate Signalling IC - Internal Copy, NP - Not platform switched SP - Signal Present Interface Counts: FS Pkt Count/PS Pkt Count (*,239.255.2.195) Flags: C K Forwarding: 4278/50/1341/521, Other: 0/0/0 Outside-1007 Flags: A RDEQ-to-Corporate Flags: F NS Pkts: 0/4278 <---- HERE
组播路由表显示(*,G),但没有(S,G)。
ASA(config)# show mroute 239.255.2.1195 Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, I - Received Source Specific Host Report, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT Timers: Uptime/Expires Interface state: Interface, State (*, 239.255.2.195), 00:44:03/00:02:44, RP 10.1.135.10, flags: S Incoming interface: Outside-1007 RPF nbr: 10.100.254.18 Immediate Outgoing interface list: RDEQ-to-Corporate, Forward, 00:44:03/00:02:44
此处的问题是,到达ASA的数据包组播数据包的TTL为1。ASA将这些数据包转发到下游设备(因为它不会减少TTL),但路由器下游会丢弃这些数据包。因此,下游路由器不会向ASA向发送方发送PIM(S,G)加入(源特定加入)。ASA在收到此PIM加入之前不会生成(S,G)条目。由于未构建(S,G),因此所有组播流量都会进行进程交换,从而导致速率限制。
此问题的解决方法是确保数据包的TTL不是1,这允许下游设备向发送方发送源特定联接;这会导致ASA在表中安装源特定路由,然后所有数据包都进行快速交换(而不是处理交换),流量必须流经ASA,而不会出现问题。
如果两个网络设备将相同的组播数据包转发到同一子网,则理想情况下,其中一个网络设备必须停止转发数据包(因为复制数据流是浪费的)。如果运行PIM的路由器检测到它们接收了相同的数据包,则它们会在该LAN上生成ASSERT消息,以选择哪个网络设备停止转发该流。
有关此消息的更多信息,请参阅与ASSERT过程相关的RFC 4601部分。
调试显示,ASA收到组239.1.1.227的IGMP报告,但是由于它从相邻路由器收到的断言消息,它忽略了该报告:
IPv4 PIM: (*,239.1.1.227) Periodic J/P scheduled in 50 secs IPv4 PIM: (*,239.1.1.227) J/P adding Join on outside IPv4 PIM: (10.99.41.205,239.1.1.227)RPT J/P adding Prune on outside IPv4 PIM: (10.99.41.253,239.1.1.227)RPT J/P adding Prune on outside IGMP: Received v2 Report on inside from 10.20.213.204 for 239.1.1.227 IGMP: Updating EXCLUDE group timer for 239.1.1.227 IPv4 PIM: (10.99.41.253,239.1.1.227) Received [15/110] Assert from 10.20.13.2 on inside IPv4 PIM: (10.99.41.253,239.1.1.227) Assert processing message wins IPv4 PIM: (10.99.41.253,239.1.1.227) inside Update assert timer (winner 10.20.13.2)
在生产网络中观察到此问题,其中两个站点在第2层意外桥接,因此组播接收器所在的LAN有两个设备向它们转发组播流量。由于另一个网络问题,ASA和另一个设备无法通过PIM Hello检测到对方,因此它们都承担了LAN的指定路由器角色。这导致组播流量工作一段时间,然后在设备发送ASSERT消息时失败。为了解决该问题,在第2层桥接设备的不正确连接被禁用,然后问题得到解决。
在1997年观察到这629575899点。ASA是为巨型帧配置的,而4900没有。当客户端请求超过73个组播流时,某些组播流将不起作用。73个SG将创建大小为1494的PIM加入消息,该消息仍在MTU内。74SG将创建大于1500的PIM加入消息,这导致4900M丢弃入站数据包。
此问题的解决方法是:
1.确保在4900M上全局启用巨帧
2.使用MTU 9216配置物理接口和SVI
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
03-Jan-2013 |
初始版本 |