ECMP 基于流的转发
本主题简要概述了在 Junos OS SRX 系列防火墙和 vSRX 虚拟防火墙实例上转发和反向端流量的等价多路径 (ECMP)。全面了解 Junos OS SRX 系列防火墙和 vSRX 虚拟防火墙实例上的 ECMP 实施情况。
了解基于 ECMP 流的转发
等价多路径 (ECMP) 是一种网络路由策略,它允许同一会话或流的流量(即具有相同源和目标的流量)跨成本相等的多条路径传输。它是一种机制,允许您通过充分利用指向同一目标的链路上原本未使用的带宽来平衡流量负载并增加带宽。
转发数据包时,路由技术必须决定使用哪个下一跃点路径。在进行确定时,设备会考虑标识流的数据包标头字段。使用 ECMP 时,将根据路由指标计算和哈希算法识别成本相等的下一跃点路径。也就是说,成本相等的路由具有相同的首选项和指标值,并且网络成本相同。ECMP 进程识别一组路由器,每个路由器都是朝向目标的合法等价下一跃点。标识的路由称为 ECMP 集。由于 ECMP 仅寻址下一跃点目标,因此可用于大多数路由协议。
当路由表包含同一目标的多个下一跃点地址且成本相等时,将形成等价多路径 (ECMP) 集。(等价路由具有相同的首选项和指标值。如果为活动路由设置了 ECMP,Junos OS 将使用哈希算法在 ECMP 集中选择一个下一跃点地址 以安装在转 表中。
您可以配置 Junos OS,以便在转发表中安装 ECMP 集中的多个下一跃点条目。在瞻博网络设备上,可以执行按流负载均衡,以将流量分布到路由设备之间的多条路径上。在瞻博网络安全设备上,系统会检查源和目标 IP 地址及协议,以确定各个流量。同一流的数据包在同一接口上转发;对 ECMP 集进行添加或更改时,接口不会更改。这对于源 NAT 等功能非常重要,其中转换仅在为 IDP、ALG 和基于路由的 VPN 隧道建立会话的第一条路径期间执行。如果数据包到达 ECMP 集中的给定接口,安全设备可确保反向流量通过同一接口转发。
安全设备上基于 ECMP 流的转发适用于 IPv4 和 IPv6 单播流量。从 Junos OS 版本 15.1X49-D60 开始,所有 SRX 系列防火墙和 vSRX 虚拟防火墙实例都支持 IPv6 单播流量的 ECMP 流转发。不支持组播流。
在瞻博网络安全设备上,ECMP 集中可安装在转发表中的最大下一跃点地址数为 16。如果 ECMP 集中的下一跃点地址超过 16 个,则仅使用前 16 个地址。
在 机箱群集 部署中, 本地 接口是与数据包到达的接口位于同一节点上的接口, 远程 接口是位于另一个机箱群集节点上的接口。如果 ECMP 路由在机箱群集中同时具有本地和远程接口,则本地接口优先用于下一跃点。
如果下一跃点地址不再是 ECMP 集的一部分,或者由于路由更改而将其从路由表中删除,则使用下一跃点的流将被重新路由,并且会话不受影响。如果配置更改会带走下一跃点地址,或者管理员关闭下一跃点接口而不删除它,也会重新路由流。如果由于删除接口或有意清除会话而从路由表中删除下一跃点地址,则会终止会话而不重新路由。
我们建议 ECMP 集中的接口位于同一安全区域中。如果重新路由流,并且重新路由的流使用与原始路由不同的安全区域中的接口,则会终止会话。
要在瞻博网络安全设备上配置 ECMP 基于流的转发,请首先通过在 [edit policy-options
] 层次结构级别load-balance per-flow
包含一个或多个policy-statement
配置语句来定义负载平衡路由策略。然后将路由策略应用于从路由表导出到转发表的路由。为此,请在 [] 层次结构级别包含 forwarding-table
和export
edit routing-options
配置语句。
Junos OS SRX 系列防火墙和 vSRX 虚拟防火墙实例的 ECMP 实施
您可以为 SRX 系列防火墙和 vSRX 虚拟防火墙实例配置 ECMP,以实施按流负载平衡,从而在路由设备之间的多个路径之间分配流量。成本相等的路由具有相同的首选项和指标值。这些设备检查源 IP 地址、目标 IP 地址和协议,以确定各个流量。具有安全策略允许的相同源 IP 地址、目标 IP 地址和协议号的流量将转发到同一下一跃点。这些设备上的 Junos OS 在其哈希逻辑中使用流信息。
对于 Junos OS SRX 系列防火墙和 vSRX 虚拟防火墙实例,当路由表包含同一目标的多个下一跃点地址且成本相等时,将形成 ECMP 集。ECMP 允许在转发表中安装 ECMP 集中的多个下一跃点条目。同一流的数据包在同一接口上转发;对 ECMP 集进行添加或更改时,接口不会更改。
如果为活动路由设置了 ECMP,Junos OS 将使用哈希算法在 ECMP 集中选择一个下一跃点地址 以安装在转 表中。
SRX 系列防火墙和 vSRX 虚拟防火墙实例上基于 ECMP 流的转发适用于 IPv4 和 IPv6 单播流量。从 Junos OS 15.1X49-D60 版和 Junos OS 17.3R1 版开始,所有 SRX 系列防火墙和 vSRX 虚拟防火墙实例都支持 ECMP 基于流的 IPv6 单播流量转发。不支持组播流。
用于反向流量的 ECMP
从 Junos OS 17.3 版开始,如果为反向流量启用 ECMP 支持,SRX 系列防火墙将使用散列算法来确定用于流中反向流量的接口。此过程类似于非对称路由,其中数据包在一个路径中从一个源遍历到目标,并在返回到源时采用不同的路径。
如果不启用此功能,SRX 系列防火墙会在 ECMP 中选择设置为传入接口的路由以进行反向流量,这是默认行为。
您可以使用 [edit security flow
] 层次结构中的配置语句来allow-reverse-ecmp
配置 ECMP 基于流的转发,以便在 ECMP 集中为反向流量传输选择路由时使用哈希算法。也就是说,如果启用此功能,SRX 系列防火墙将使用散列算法在 ECMP 集中为反向流量选择路由,而不是选择到传入接口的路由。
由于基于 ECMP 流的策略是基于区域的,因此 ECMP 反向查找支持可确保用于反向流量的出口接口与用于到达流量的入口接口位于同一区域中。
ECMP 集中的接口必须位于同一安全区域中。如果出口接口区域与入口接口区域不同,则可以创建会话,但数据包将被丢弃。
如果您决定启用反向 ECMP,请注意以下情况并采取措施避免这种情况: 使用 ECMP 基于流的转发时,SRX 系列防火墙可能会导致上游设备只能看到会话的单向流量。对于维护会话状态的上游设备(例如,TCP 代理和 SYN 代理),问题可能会随之而来。此问题类似于异步路由行为。
示例:配置 ECMP 基于流的转发
此示例说明如何配置 ECMP 基于流的转发。
要求
配置此功能之前,不需要除设备初始化之外的特殊配置。
概述
此示例在 SRX 系列防火墙上配置三个静态 ECMP 路由。每个静态路由使用不同的下一跃点路由器到达目标服务器。面向路由器的接口将分配给不信任安全区域。此示例创建一个名为的 load-balancing-policy
负载平衡路由策略,并将该策略应用于从路由表导出到转发表的所有路由。
配置
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,然后将命令复制并粘贴到层次结构级别的 CLI [edit]
中。
## Interfaces ## set interfaces ge-0/0/2 unit 0 family inet address 192.168.4.1/24 set interfaces ge-0/0/4 unit 0 family inet address 192.168.1.1/24 set interfaces ge-0/0/6 unit 0 family inet address 192.168.2.1/24 set interfaces ge-0/0/7 unit 0 family inet address 192.168.3.1/24 ## Static routes ## set routing-options static route 172.16.1.0/24 next-hop 192.168.1.2 set routing-options static route 172.16.1.0/24 next-hop 192.168.2.2 set routing-options static route 172.16.1.0/24 next-hop 192.168.3.2 ## Security zones, address book entry, and policy ## set security zones security-zone trust interfaces ge-0/0/2 set security zones security-zone untrust interfaces ge-0/0/4 set security zones security-zone untrust interfaces ge-0/0/6 set security zones security-zone untrust interfaces ge-0/0/7 set security address-book global address FTP-servers 172.16.1.0/24 set security policies from-zone trust to-zone untrust policy permit-ftp match source-address any set security policies from-zone trust to-zone untrust policy permit-ftp match destination-address FTP-servers set security policies from-zone trust to-zone untrust policy permit-ftp match application junos-ftp set security policies from-zone trust to-zone untrust policy permit-ftp then permit ## ECMP routing policy ## set policy-options policy-statement load-balancing-policy then load-balance per-flow set routing-options forwarding-table export load-balancing-policy
程序
分步过程
以下示例要求您在配置层次结构中导航各个级别。
要配置 ECMP 基于流的转发,请执行以下操作:
配置接口。
[edit interaces] user@host# set ge-0/0/2 unit 0 family inet address 192.168.4.1/24 user@host# set ge-0/0/4 unit 0 family inet address 192.168.1.1/24 user@host# set ge-0/0/6 unit 0 family inet address 192.168.2.1/24 user@host# set ge-0/0/7 unit 0 family inet address 192.168.3.1/24
配置静态路由。
[edit routing-options] user@host# set static route 172.16.1.0/24 next-hop 192.168.1.2 user@host# set static route 172.16.1.0/24 next-hop 192.168.2.2 user@host# set static route 172.16.1.0/24 next-hop 192.168.3.2
trust
创建和安全untrust
区域,并包括相关接口。[edit security] user@host# set zones security-zone trust interfaces ge-0/0/2 user@host# set zones security-zone untrust interfaces ge-0/0/4 user@host# set zones security-zone untrust interfaces ge-0/0/6 user@host# set zones security-zone untrust interfaces ge-0/0/7
为服务器子网配置通讯簿条目。
此条目用于安全策略。
[edit security address-book] user@host# set global address FTP-servers 172.16.1.0/24
配置安全策略。
[edit security policies from-zone trust to-zone untrust] user@host# set policy permit-ftp match source-address any user@host# set policy permit-ftp match destination-address FTP-servers user@host# set policy permit-ftp match application junos-ftp user@host# set policy permit-ftp then permit
创建负载平衡路由策略。
[edit policy-options] user@host# set policy-statement load-balancing-policy then load-balance per-flow
将路由策略应用于从路由表导出到转发表的所有路由。
[edit routing-options] user@host# set forwarding-table export load-balancing-policy
结果
在配置模式下,通过发出 show interfaces
、 show security
、 show policy-options
和 show routing-options
命令来确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明以更正配置。
[edit] user@host# show interfaces ge-0/0/2 { unit 0 { family inet { address 192.168.4.1/24; } } } ge-0/0/4 { unit 0 { family inet { address 192.168.1.1/24; } } } ge-0/0/6 { unit 0 { family inet { address 192.168.2.1/24; } } } ge-0/0/7 { unit 0 { family inet { address 192.168.3.1/24; } } } user@host# show security address-book { global { address FTP-servers 172.16.1.0/24; } } policies { from-zone trust to-zone untrust { policy permit-ftp { match { source-address any; destination-address FTP-servers; application junos-ftp; } then { permit; } } } } zones { security-zone trust { interfaces { ge-0/0/2.0; } } security-zone untrust { interfaces { ge-0/0/4.0; ge-0/0/6.0; ge-0/0/7.0; } } } user@host# show policy-options policy-statement load-balancing-policy { then { load-balance per-flow; } }
[edit] user@host# show routing-options static { route 172.16.1.0/24 next-hop [ 192.168.1.2 192.168.2.2 192.168.3.2 ]; } forwarding-table { export load-balancing-policy; }
如果完成设备配置,请从配置模式输入 commit
。
验证
验证转发表
目的
验证所有 ECMP 路由的路由信息是否显示在转发表中。
行动
在操作模式下,输入 show route forwarding-table destination 172.16.1.0 命令。
user@host> show route forwarding-table destination 172.16.1.0 Routing table: default.inet Internet: Destination Type RtRef Next hop Type Index NhRef Netif 172.16.1.0/24 user 0 ulst 262142 2 192.168.1.2 ucst 560 2 ge-0/0/4.0 192.168.2.2 ucst 561 2 ge-0/0/6.0 192.168.3.2 ucst 562 2 ge-0/0/7.0 ...
意义
输出显示下一跃点类型 ulst
,这意味着路由具有多个符合条件的下一跃点。发往 172.16.1.0 网络的数据包可以使用列表中的任何下一跃点。
更改历史记录表
功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。