了解单播 RPF(路由器)
对于承载 IPv4 或 IPv6 流量的接口,您可以通过配置单播反向路径转发 (RPF) 来减少拒绝服务 (DoS) 攻击的影响。单播 RPF 有助于确定攻击源,并拒绝启用了单播 RPF 的接口上来自意外源地址的数据包。
-
您可以通过在网络边缘(在面向客户的接口上)应用单播 RPF 检查功能来保护网络。在 ISP 环境中,这可能会影响网络,这可能会对扩展设置造成影响。如果您已经保护了网络边缘,那么带有欺骗性 IP 源地址的数据包甚至不会出现在面向核心的接口中。在这种情况下,不需要单播 RPF 检查。启用单播 RPF 功能可能会影响控制平面的性能,因此请在需要时使用它。因此,强烈建议不要在网络核心(内部)接口上启用此功能。
目前在 PTX 平台上,配置 BGP 流规范 (flowspec) 会创建一个隐式过滤器来设置 VRF 实例。在 PTX 平台上,过滤器查找先于源/目标 IP 查找。因此,源和目标 IP 查找会在 VRF 实例的上下文中进行。
单播 RPF 和默认路由
当无法从路由表中的路由中选择活动路由时,路由器会选择默认路由。默认路由等同于 IP 地址 0.0.0.0/0。如果配置默认路由,并在默认路由使用的接口上配置单播 RPF,则单播 RPF 的行为与其他方式不同。
要确定默认路由是否使用接口,请输入 show route
命令:
user@host> show route address
address
是已配置默认路由的下一跃点地址。默认路由使用命令输出中显示的 show route
接口。
以下部分介绍当默认路由使用接口和默认路由不使用接口时,单播 RPF 的行为方式:
具有默认路由的单播 RPF 行为
在除具有 MPC 的路由器和 MX80 路由器之外的所有路由器上,如果配置的默认路由使用配置了单播 RPF 的接口,则单播 RPF 的行为如下:
松散模式 — 自动接受所有数据包。因此,建议不要在默认路由使用的接口上配置单播 RPF 松散模式。
严格模式 — 当数据包的源地址与可通过接口访问的任何路由(默认路由或获知路由)匹配时,将接受数据包。请注意,路由可以有多个与之关联的目的地;因此,如果其中一个目标与数据包的传入接口匹配,则接受该数据包。
如果配置的默认路由使用配置了单播 RPF 的接口,则在所有带有 MPC 的路由器和 MX80 路由器上,单播 RPF 的行为如下:
松散模式 — 接受除从默认路由获知源的数据包外的所有数据包。从默认路由获知其来源的所有数据包都将在数据包转发引擎丢弃。默认路由被视为路由不存在。
严格模式 — 当数据包的源地址与可通过接口访问的任何路由(默认路由或获知路由)匹配时,将接受数据包。请注意,路由可以有多个与之关联的目的地;因此,如果其中一个目标与数据包的传入接口匹配,则接受该数据包。
在所有路由器上,当满足以下任一条件时,不接受数据包:
数据包的源地址与路由表中的前缀不匹配。
接口不希望接收到带有此源地址前缀的数据包。
不带默认路由的单播 RPF 行为
如果未配置默认路由,或者默认路由未使用配置了单播 RPF 的接口,则单播 RPF 的行为如 配置单播 RPF 严格模式 和 配置单播 RPF 松散模式中所述。总而言之,没有默认路由的单播 RPF 行为如下:
严格模式 — 当满足以下任一条件时,不接受数据包:
数据包的源地址与路由表中的前缀不匹配。
接口不希望接收到带有此源地址前缀的数据包。
松散模式 — 当数据包的源地址与路由表中的前缀不匹配时,不接受数据包。
具有路由不对称性的单播 RPF
通常,建议不要在网络内部的接口上启用单播 RPF,因为内部接口可能存在 路由不对称。路由不对称意味着数据包的传出和返回路径不同。与客户或提供商边缘的路由器相比,网络核心中的路由器更有可能具有非对称反向路径。 图 1 显示了具有路由不对称的环境中的单播 RPF。

在 图 1 中,如果在接口 so-0/0/0
上启用单播 RPF,则不会拒绝发往路由器 A 的流量。如果在接口 so-1/0/1
上启用单播 RPF,则来自路由器 A 的流量将被拒绝。
如果您需要在非对称路由环境中启用单播 RPF,您可以使用故障过滤器来允许路由器接受已知通过特定路径到达的传入数据包。有关接受具有特定源地址和目标地址的数据包的故障过滤器的示例,请参阅 配置单播 RPF。
配置单播 RPF 严格模式
在严格模式下,单播 RPF 检查传入数据包的源地址是否与路由表中的前缀匹配,以及接口是否期望接收到具有此源地址前缀的数据包。
配置 活动路径 模式时,将仅创建活动路由的传出接口列表。进入这些接口的任何数据包都被视为有效并得到处理。
如果传入数据包未通过单播 RPF 检查,则接口不接受该数据包。当接口不接受数据包时,单播 RPF 会对数据包进行计数,并将其发送到可选的故障过滤器。如果未配置故障过滤器,则默认操作是以静默方式丢弃数据包。
可选故障过滤器允许您将过滤器应用于未通过单播 RPF 检查的数据包。您可以定义故障筛选器以执行任何筛选器操作,包括接受、拒绝、日志记录、采样或管制。
在接口上启用单播 RPF 时,接口上不接受自举协议 (BOOTP) 数据包和动态主机配置协议 (DHCP) 数据包。要允许接口接受 BOOTP 数据包和 DHCP 数据包,您必须应用故障过滤器,以接受源地址为 0.0.0.0
和目标地址为 的所有 255.255.255.255.
数据包 有关配置示例,请参阅 配置单播 RPF。
有关定义故障过滤器的详细信息,请参阅 路由策略、防火墙过滤器和流量监管器用户指南。
要配置单播 RPF,请包含以下 rpf-check
语句:
rpf-check <fail-filter filter-name>;
您可以在以下层级包含此语句:
-
[edit interfaces interface-name unit logical-unit-number family (inet | inet6)]
-
[edit logical-systems logical-system-name interfaces interface-name unit logical-unit-number family (inet | inet6)]
当使用流量过滤器实施时,使用单播 RPF 可能会产生多种后果:
-
RPF 故障过滤器在输入过滤器之后和输出过滤器之前进行评估。
-
如果为输入过滤器丢弃的数据包配置过滤器计数器,并且想要知道丢弃的数据包总数,则还必须为 RPF 检查丢弃的数据包配置过滤器计数器。
-
要计算未通过 RPF 检查并被 RPF 故障过滤器接受的数据包,必须配置过滤器计数器。
-
如果输入过滤器将数据包转发到 inet.0 或 inet6.0 路由表以外的任何位置,则不会执行单播 RPF 检查。
-
如果输入过滤器将数据包转发到配置了输入接口的路由实例以外的任何位置,则不会执行单播 RPF 检查。
在上述项目符号列表中,第一点、倒数第二点和最后一点不适用于 MX 平台,因为在 MX 平台上,uRPF 会在执行防火墙过滤器之前进行处理。在为静态和动态接口启用任何 FBF(基于过滤器的转发)操作之前,将处理 uRPF 检查以进行源地址检查。这适用于 IPv4 和 IPv6 系列。
在 ACX 和 MX 系列路由器上:
-
ACX1000、ACX2000、ACX4000 以及 ACX500、ACX5048 和 ACX5096 支持 uRPF 故障过滤器。ACX5448、ACX710、ACX7100-32C、ACX7100-48、ACX7509 以及 ACX7000 系列的所有路由器都不支持该过滤器。
- uRPF 失败过滤器无法匹配在入口端口检查(严格模式)时失败的数据包。
- uRPF 故障过滤器可以匹配源 IP 查找失败的数据包,但无法匹配输入接口检查失败的数据包(严格模式)。
- uRPF 故障过滤器仅适用于防火墙过滤器的接口特定实例。
- uRPF 失败过滤器不支持拒绝和路由实例操作。
配置单播 RPF 严格模式,并应用故障过滤器,使接口能够接受 BOOTP 数据包和 DHCP 数据包。过滤器接受源地址为 0.0.0.0
,目标地址为 255.255.255.255
的所有数据包。
要在严格模式下配置单播 RPF:
配置单播 RPF 松散模式
默认情况下,单播 RPF 使用严格模式。单播 RPF 松散模式类似于单播 RPF 严格模式,具有相同的配置限制。松散模式下的唯一检查是数据包在路由表中是否有带有相应前缀的源地址;松散模式不检查接口是否期望接收具有特定源地址前缀的数据包。如果未找到相应的前缀,则单播 RPF 松散模式不接受数据包。与严格模式一样,松散模式对故障数据包进行计数,并可选择性地将其转发到故障过滤器,该过滤器可以接受、拒绝、记录、采样或监管数据包。
配置 可行路径 模式时,将创建活动和非活动路由的传出接口列表。进入这些接口的任何数据包都被视为有效并得到处理。
要配置单播 RPF 松散模式,请包含:mode
配置具有丢弃数据包功能的单播 RPF 松散模式
单播 RPF 松散模式能够丢弃源地址指向丢弃接口的数据包。使用单播 RPF 松散模式以及远程触发空路由过滤,可以有效丢弃来自已知攻击源的数据包。边缘路由器中的 BGP 策略可确保具有不受信任源地址的数据包的下一跃点设置为丢弃路由。当数据包通过不受信任的源地址到达路由器时,单播 RPF 会执行源地址的路由查找。由于源地址路由指向丢弃的下一跃点,因此数据包将被丢弃,计数器将递增。IPv4 (inet) 和 IPv6 (inet6) 地址族都支持此功能。
要配置具有丢弃数据包功能的单播 RPF 松散模式,请在[edit forwarding-options]
层次结构级别包含语rpf-loose-mode-discard family (inet | inet6)
句:
rpf-loose-mode-discard { family { inet; } }
在此示例中,除了设备初始化之外,不需要任何特殊配置。
配置单播 RPF 松散模式,并应用故障筛选器,使接口能够接受 BOOTP 数据包和 DHCP 数据包。过滤器接受源地址为 0.0.0.0
,目标地址为 255.255.255.255
的所有数据包。
要配置具有丢弃数据包功能的单播 RPF 松散模式,请执行以下操作:
在 VPN 上配置单播 RPF
您可以通过在接口上启用单播 RPF 并在层次结构级别包含语句[edit routing-instances routing-instance-name]
,在 VPN 接口上配置interface
单播 RPF。
只能在路由实例中指定的接口上配置单播 RPF。这意味着以下几点:
-
对于第 3 层 VPN,CE 路由器接口支持单播 RPF。
-
面向核心的接口不支持单播 RPF。
-
对于虚拟路由器路由实例,您在路由实例中指定的所有接口都支持单播 RPF。
-
如果输入过滤器将数据包转发到配置了输入接口的路由实例以外的任何位置,则不会执行单播 RPF 检查。
在第 3 层 VPN 接口上配置单播 RPF:
[edit interfaces] so-0/0/0 { unit 0 { family inet { rpf-check; } } } [edit routing-instance] VPN-A { interface so-0/0/0.0; }
配置单播 RPF
配置单播 RPF 严格模式,并应用故障过滤器,使接口能够接受 BOOTP 数据包和 DHCP 数据包。过滤器接受源地址为 0.0.0.0
,目标地址为 255.255.255.255
的所有数据包。
[edit firewall] filter rpf-special-case-dhcp-bootp { term allow-dhcp-bootp { from { source-address { 0.0.0.0/32; } address { 255.255.255.255/32; } } then { count rpf-dhcp-bootp-traffic; accept; } } term default { then { log; reject; } } } [edit] interfaces { so-0/0/0 { unit 0 { family inet { rpf-check fail-filter rpf-special-case-dhcp-bootp; } } } }