了解单播 RPF(路由器)
对于承载 IPv4 或 IPv6 流量的接口,可以通过配置单播反向路径转发 (RPF) 来减少拒绝服务 (DoS) 攻击的影响。在启用了单播 RPF 的接口上,单播 RPF 有助于确定攻击来源并拒绝来自意外源地址的数据包。
您可以通过在网络边缘(面向客户的接口上)应用单播 RPF 检查功能来保护网络。在 ISP 环境中,这会影响网络,从而对规模化设置造成强加。如果您已经保护了网络边缘,则具有欺骗性 IP 源地址的数据包甚至不会出现在面向核心的接口中。在这种情况下,不需要单播 RPF 检查。启用单播 RPF 功能可能会影响控制平面性能,因此请在需要的地方使用它。因此,强烈建议不要在网络核心(内部)接口上启用此功能。
目前在 PTX 平台上,配置 BGP 流规范 (flowspec) 会创建一个隐式过滤器来设置 VRF 实例。在 PTX 平台上,过滤器查找先于源/目标 IP 查找。因此,源和目标 IP 查找发生在 VRF 实例的上下文中。
目前在 PTX 平台上,当在接口上配置了单播反向路径转换 (uRPF) 和基于过滤器的转发 (FBF) 时,默认行为是传入数据包的源 IP 地址查找由接口指向的路由实例中的 uRPF 完成,目标 IP 地址查找在 FBF 过滤器指定的路由实例中完成。您可以使用 set forwarding-options no-rpf-fbf-handling 来覆盖此默认行为,应用此配置时,传入数据包的源 IP 地址查找将由 FBF 过滤器指定的路由实例中的 uRPF 完成。
单播 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 松散模式。
严格模式 — 当数据包的源地址与可通过接口访问的任何路由(默认路由或获知路由)匹配时,数据包即被接受。请注意,路由可以有多个与之关联的目的地;因此,如果其中一个目标与数据包的传入接口匹配,则接受该数据包。
在具有 MPC 和 MX80 路由器的所有路由器上单播,如果配置的默认路由使用配置了单播 RPF 的接口,则 RPF 的行为如下:
松散模式 — 接受除从默认路由获知源的数据包外的所有数据包。从默认路由中获知源的所有数据包都会在数据包转发引擎上被丢弃。默认路由将被视为路由不存在。
严格模式 — 当数据包的源地址与可通过接口访问的任何路由(默认路由或获知路由)匹配时,数据包即被接受。请注意,路由可以有多个与之关联的目的地;因此,如果其中一个目标与数据包的传入接口匹配,则接受该数据包。
在所有路由器上,如果满足以下任一条件,则不接受数据包:
数据包的源地址与路由表中的前缀不匹配。
接口不会期望收到带有此源地址前缀的数据包。
没有默认路由的单播 RPF 行为
如果未配置默认路由,或者默认路由未使用配置了单播 RPF 的接口,则单播 RPF 的行为方式如 配置单播 RPF 严格模式 和 配置单播 RPF 松散模式中所述。总而言之,没有默认路由的单播 RPF 行为如下:
严格模式 — 当满足以下任一条件时,不接受数据包:
数据包的源地址与路由表中的前缀不匹配。
接口不会期望收到带有此源地址前缀的数据包。
松散模式 — 当数据包的源地址与路由表中的前缀不匹配时,不接受数据包。
具有路由不对称的单播 RPF
通常,建议不要在网络内部接口上启用单播 RPF,因为内部接口可能存在 路由不对称性。路由不对称意味着数据包的传出路径和返回路径不同。与客户或提供商边缘的路由器相比,网络核心的路由器更有可能具有非对称的反向路径。 图 1 显示了具有路由不对称的环境中的单播 RPF。
单播 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 故障过滤器不支持拒绝和路由实例操作。
- ACX7000 系列不支持选项 feasible-paths 。
配置单播 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 并在 interface 层次结构级别包含 [edit routing-instances routing-instance-name] 该语句,在 VPN 接口上配置单播 RPF。
只能在路由实例中指定的接口上配置单播 RPF。这意味着以下内容:
对于第 3 层 VPN,客户边缘路由器接口支持单播 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;
}
}
}
}
也可以看看
特定于平台的行为
使用 功能资源管理器 确认平台和版本对特定功能的支持。
使用下表查看平台的特定于平台的行为:
平台 |
差异 |
|---|---|
Junos OS 演化版上的 ACX 系列路由器 |
当源 IP 通过 ECMP 组解析时,RPF 会覆盖数据包入口接口的严格 uRPF 设置,从而在松散模式下工作。 |