L3 Hardware Offloading

L3 硬件卸载通过将 CPU 密集型任务卸载到交换机芯片来实现线速路由。本页详细介绍如何为整个交换机、单个端口以及 IPv6 支持和 FastTrack 卸载等全局设置配置 L3HW,并警告可能对现有连接造成的影响。

L3 硬件卸载

第 3 层硬件卸载(L3HW,也称为 IP 交换或硬件路由)允许将一些路由器功能卸载到交换机芯片上。这使得数据包路由时可以达到线速,而仅靠 CPU 根本无法实现。

交换机配置

要为交换机启用第 3 层硬件卸载,请设置 l3-hw-offloading=yes:

/interface/ethernet/switch/set 0 l3-hw-offloading=yes

交换机端口配置

可以为每个物理交换机端口配置第 3 层硬件卸载。例如:

/interface/ethernet/switch/port/set sfp-sfpplus1 l3-hw-offloading=yes

请注意,交换机和端口的 l3hw 设置是不同的:

  • 为交换机设置 l3-hw-offloading``=no 会完全禁用卸载 - 所有数据包将由 CPU 路由。
  • 但是,为交换机端口设置 l3-hw-offloading``=no 仅禁用从此特定端口进出的硬件路由。此外,该端口仍可参与 Fasttrack 连接卸载。

要启用完整的硬件路由,请在所有交换机端口上启用 l3hw:

/interface/ethernet/switch/set 0 l3-hw-offloading=yes
/interface/ethernet/switch/port/set [find] l3-hw-offloading=yes

要让所有数据包先经过 CPU,仅卸载 Fasttrack 连接,请在所有端口上禁用 l3hw,但在交换机芯片本身保持启用:

/interface/ethernet/switch/set 0 l3-hw-offloading=yes
/interface/ethernet/switch/port/set [find] l3-hw-offloading=no

信息

当入站和出站端口都设置了 l3-hw-offloading=yes 时,数据包由硬件路由。

如果入站和出站端口都设置了 l3-hw-offloading=no,数据包将通过 CPU/防火墙,同时仅卸载 Fasttrack 连接。

可以通过仅在出站端口上设置 l3-hw-offloading=no 来让数据包通过 CPU/防火墙。但是,仅入站端口设置 l3-hw-offloading=no 可能导致不可预测的行为,例如,数据包可能仍由硬件路由并完全绕过 CPU/防火墙。 下一个示例在所有端口上启用硬件路由,但上游端口(sfp-sfpplus16)除外。进出 sfp-sfpplus16 的数据包将进入 CPU,因此会受到防火墙/NAT 处理。

/interface/ethernet/switch/set 0 l3-hw-offloading=yes
/interface/ethernet/switch/port/set [find] l3-hw-offloading=yes
/interface/ethernet/switch/port/set sfp-sfpplus16 l3-hw-offloading=no

警告

现有连接可能不受 l3-hw-offloading 设置更改的影响。

L3HW 设置

设置菜单 /interface/ethernet/switch/l3hw-settings 可用于根据设置需求调整 L3HW 行为。

接口列表

无法直接使用接口列表来控制 l3-hw-offloading,因为接口列表可能包含虚拟接口(如 VLAN),而 l3-hw-offloading 设置必须仅应用于物理交换机端口。例如,如果同一交换机端口(干道端口)上运行两个 VLAN 接口(vlan20 和 vlan30),则无法在 vlan20 上启用硬件路由而在 vlan30 上保持禁用。

但是,接口列表可以用作端口选择器。以下示例演示如何在 LAN 端口(属于 "LAN" 接口列表的端口)上启用硬件路由,并在 WAN 端口上禁用它:

:foreach i in=[/interface/list/member/find where list=LAN] do={
    /interface/ethernet/switch/port/set [/interface/list/member/get $i interface] l3-hw-offloading=yes
}

:foreach i in=[/interface/list/member/find where list=WAN] do={
    /interface/ethernet/switch/port/set [/interface/list/member/get $i interface] l3-hw-offloading=no
}

请注意,由于接口列表不直接用于硬件路由控制,修改接口列表也不会自动反映到 l3hw 变化中。例如,将交换机端口添加到 "LAN" 接口列表不会自动在其上启用 l3-hw-offloading。用户必须重新运行上述脚本以应用更改。

MTU

硬件最多支持 8 个 MTU 配置文件,意味着用户可以为接口设置最多 8 个不同的 MTU 值:默认的 1500 加 7 个自定义值。

提示

建议在更改接口上的 MTU/L2MTU 值时禁用 l3-hw-offloading。 MTU 更改示例

/interface/ethernet/switch/set 0 l3-hw-offloading=no
/interface/set sfp-sfpplus1 mtu=9000 l2mtu=9022
/interface/set sfp-sfpplus2 mtu=9000 l2mtu=9022
/interface/set sfp-sfpplus3 mtu=10000 l2mtu=10022
/interface/ethernet/switch/set 0 l3-hw-offloading=yes

第 2 层依赖

第 3 层硬件处理位于第 2 层硬件处理之上。因此,L3HW 卸载要求底层接口上启用 L2HW 卸载。后者默认启用,但有一些例外。例如,具有 Marvell Prestera 交换机的 MikroTik 设备仅支持一个硬件网桥。如果存在多个网桥,其他网桥由 CPU 处理,不受 L3HW 影响。

另一个例子是 ACL 规则。如果规则将流量重定向到 CPU 进行软件处理,则不会触发硬件路由(L3HW):

用于在特定端口上禁用硬件处理的 ACL 规则

/interface/ethernet/switch/rule/add switch=switch1 ports=ether1 redirect-to-cpu=yes

提示

建议在第 2 层配置期间关闭 L3HW 卸载。 为确保第 3 层在软件和硬件两侧与第 2 层同步,我们建议在配置第 2 层功能时禁用 L3HW。此建议适用于以下配置:

  • 添加/移除/启用/禁用网桥。
  • 向/从网桥添加/移除交换机端口。
  • 绑定交换机端口 / 移除绑定。
  • 更改 VLAN 设置。
  • 更改交换机端口上的 MTU/L2MTU。
  • 更改以太网(MAC)地址。

简而言之,在 /interface/bridge/ 和 /interface/vlan/ 下进行更改时禁用 l3-hw-offloading:

第 2 层配置模板

/interface/ethernet/switch/set 0 l3-hw-offloading=no

/interface/bridge
# put bridge configuration changes here

/interface/vlan
# define/change VLAN interfaces
/interface/ethernet/switch/set 0 l3-hw-offloading=yes

MAC telnet

在 98DX8xxx、98DX4xxx 或 98DX325x 交换机芯片上启用 L3HW 卸载时,MAC telnet 存在限制。来自 MAC Telnet 的数据包被丢弃且无法到达 CPU,因此访问设备将失败。

如果希望将 MAC telnet 与 L3HW 结合使用,可以创建特定的 ACL 规则来强制这些数据包进入 CPU。

例如,如果需要通过 sfp-sfpplus1 和 sfp-sfpplus2 进行 MAC telnet 访问,您需要添加此 ACL 规则。可以通过 ports 设置选择更多接口。

/interface/ethernet/switch/rule
add dst-port=20561 ports=sfp-sfpplus1,sfp-sfpplus2 protocol=udp redirect-to-cpu=yes switch=switch1

VLAN 间路由

由于 L3HW 依赖于 L2HW,而 L2HW 是进行 VLAN 处理的一方,VLAN 间硬件路由在底层需要硬件网桥。即使某个特定 VLAN 只有一个已标记端口成员,该端口也必须是网桥成员。不要将 VLAN 接口直接分配给交换机端口!否则 L3HW 卸载会失败,流量将由 CPU 处理:

/interface/vlan/add interface=ether2 name=vlan20 vlan-id=20

请将 VLAN 接口分配给网桥。这样,VLAN 配置会被卸载到硬件,并且在启用 L3HW 的情况下,流量将接受 VLAN 间硬件路由。

VLAN 配置示例

/interface/ethernet/switch/set 0 l3-hw-offloading=no
/interface/bridge/port/add bridge=bridge interface=ether2
/interface/bridge/vlan/add bridge=bridge tagged=bridge,ether2 vlan-ids=20
/interface/vlan/add interface=bridge name=vlan20 vlan-id=20
/ip/address/add address=192.0.2.1/24 interface=vlan20
/interface/bridge/set bridge vlan-filtering=yes
/interface/ethernet/switch/set 0 l3-hw-offloading=yes

信息

对于 VLAN 间路由,网桥接口必须是每个可路由 /interface/bridge/vlan/ 条目的已标记成员。

按 VLAN 卸载

从 RouterOS 7.21 开始,可以使用 /interface/vlan 菜单中的 l3-hw-offloading=yes|no 设置为单个 VLAN 接口配置 L3HW 卸载。这提供了更精细的控制,可以选择哪些 VLAN(及其相关路由)卸载到交换机芯片,哪些由 CPU 处理。不再需要为了让特定 VLAN 禁用 L3HW 路由而在交换机端口上禁用 L3HW。

VLAN 接口仅在满足所有以下条件时才会被卸载(获得 H 标志):

  • VLAN 接口具有 l3-hw-offloading=yes。
  • VLAN 接口创建在硬件卸载的、启用 vlan-filtering 的网桥上。
  • 作为该 VLAN 成员的所有交换机端口都具有 l3-hw-offloading=yes。

对于 VLAN 间路由,入站和出站 VLAN 都必须是硬件卸载的,否则数据包将被发送到 CPU。

信息

如果某个交换机端口承载具有不同 L3HW 设置的多个 VLAN,请保持该端口的 l3-hw-enabled=yes。

L3HW MAC 地址范围限制(仅限 DX2000/DX3000 系列)

Marvell Prestera DX2000 和 DX3000 交换机芯片有一个硬件限制,即每个接口只能配置 MAC 地址的最后一个(最低有效)字节。其他五个(最高有效)字节是全局配置的,因此对于所有接口(交换机端口、网桥、VLAN)必须相同。换句话说,MAC 地址必须采用 "XX:XX:XX:XX:XX:??" 格式,其中:

  • "XX:XX:XX:XX:XX" 部分对所有接口是通用的。
  • "??" 是可变部分。

此要求仅适用于第 3 层(路由)。 第 2 层(桥接)不使用交换机的以太网地址。此外,它不适用于网桥端口,因为它们使用网桥的 MAC 地址。

五个字节通用的要求适用于:

  • 启用了硬件路由(l3-hw-offloading=yes)的独立交换机端口(非网桥成员)。
  • 网桥本身。
  • VLAN 接口(默认使用网桥 MAC 地址的那些接口)。

路由配置


抑制硬件卸载

默认情况下,所有路由都是硬件候选路由。要进一步微调要卸载哪些流量,每个路由都有一个禁用/启用 suppress-hw-offload 的选项。

例如,如果我们知道大部分流量流向服务器所在的网络,我们可以仅对那个特定目标启用卸载:

/ip/route/set [find where static && dst-address!="192.168.3.0/24"] suppress-hw-offload=yes

现在只有到 192.168.3.0/24 的路由具有 H 标志,表示它将是唯一有资格被选择用于硬件卸载的路由:

[admin@MikroTik] > /ip/route/print where static
Flags: A - ACTIVE; s - STATIC, y - COPY; H - HW-OFFLOADED
Columns: DST-ADDRESS, GATEWAY, DISTANCE
#     DST-ADDRESS       GATEWAY         D
0 As  0.0.0.0/0         172.16.2.1      1
1 As  10.0.0.0/8        10.155.121.254  1
2 AsH 192.168.3.0/24    172.16.2.1      1

危险

H 标志并不表示该路由实际上已被硬件卸载;它仅表示该路由可以被选择进行硬件卸载。

路由过滤器

对于 OSPF 和 BGP 等动态路由协议,可以使用路由过滤器来抑制硬件卸载。例如,要抑制所有 OSPF 实例路由的硬件卸载,请使用 "suppress-hw-offload yes" 属性:

/routing/ospf/instance
set [find name=instance1] in-filter-chain=ospf-input
/routing/filter/rule
add chain="ospf-input" rule="set suppress-hw-offload yes; accept"

卸载 Fasttrack 连接

防火墙过滤规则具有用于 Fasttrack 的 hw-offload 选项,允许微调连接卸载。由于用于 Fasttrack 连接的硬件内存非常有限,我们可以选择卸载什么类型的连接,从而受益于接近线速的流量。下一个示例仅卸载 TCP 连接,而 UDP 数据包通过 CPU 路由且不占用硬件内存:

/ip/firewall/filter
add action=fasttrack-connection chain=forward connection-state=established,related hw-offload=yes protocol=tcp
add action=fasttrack-connection chain=forward connection-state=established,related hw-offload=no
add action=accept chain=forward connection-state=established,related

无状态硬件防火墙

虽然连接跟踪和有状态防火墙只能由 CPU 执行,但硬件可以通过交换机规则(ACL)执行无状态防火墙。下一个示例(在硬件级别)阻止从 ether1 访问 MySQL 服务器,并将来自 ether2 和 ether3 的数据包重定向到 CPU/防火墙:

/interface/ethernet/switch/rule
add switch=switch1 dst-address=10.0.1.2/32 dst-port=3306 ports=ether1 new-dst-ports=""
add switch=switch1 dst-address=10.0.1.2/32 dst-port=3306 ports=ether2,ether3 redirect-to-cpu=yes

交换机规则(ACL)与 Fasttrack 硬件卸载

一些防火墙规则可以通过交换机规则(ACL)和 CPU 防火墙过滤 + Fasttrack 硬件卸载两种方式实现。两种选项都能提供接近线速的性能。那么问题是用哪一个?

首先,并非所有设备都支持 Fasttrack 硬件卸载,没有硬件卸载时,防火墙过滤仅使用软件路由,这比其硬件对应物慢得多。其次,即使 Fasttrack 硬件卸载是一个选项,经验法则是:

提示

如果可能,始终使用交换机规则(ACL)。 交换机规则与 Fasttrack 连接共享硬件内存。但是,硬件资源是为每个 Fasttrack 连接分配的,而单个 ACL 规则可以匹配多个连接。例如,如果您有一个连接到 sfp-sfpplus1 VLAN 10 的访客 WiFi 网络,并且您不希望它访问您的内部网络,只需创建一条 ACL 规则:

/interface/ethernet/switch/rule
add switch=switch1 ports=sfp-sfpplus1 vlan-id=10 dst-address=10.0.0.0/8 new-dst-ports=""

匹配的数据包将在硬件级别被丢弃。这比让所有访客数据包都进入 CPU 进行防火墙过滤要好得多。

当然,ACL 规则无法匹配所有内容。例如,ACL 规则无法过滤连接状态:接受已建立的,丢弃其他的。这就是 Fasttrack 硬件卸载发挥作用的地方 - 默认将数据包重定向到 CPU 进行防火墙过滤,然后卸载已建立的 Fasttrack 连接。但是,为整个交换机或端口禁用 l3-hw-offloading 并不是唯一的选择。

信息

定义带有 redirect-to-cpu=yes 的 ACL 规则,而不是在交换机端口上设置 l3-hw-offloading=no,以缩小进入 CPU 的流量范围。

硬件卸载的 VRF

硬件卸载的 VRF 在 98DX8xxx、98DX4xxx、98DX325x、98CX8410 和 98DX7xxx 交换机芯片上受支持。在 98DX3xxx 和 98DX2xxx 系列上不受支持。

如果路由位于 VRF 中且出站接口支持 L3HW,交换机芯片将路由该数据包。您可以将任何支持 L3HW 的接口(以太网、绑定、网桥、VLAN)与 VRF 关联。始终将主接口与 VRF 关联,而不是标记为 S(从属)标志的接口,例如网桥或绑定端口。Fasttrack、NAT 和 VXLAN 卸载仅限于 main 路由表。

VRF 在 /ip/vrf 下配置。有关更多详细信息,请参见 VRF 手册。

98DX8208、98DX8212、98DX8332、98DX3257、98DX3255 最多支持 512 个 VRF 表。所有其他受支持的交换机芯片最多支持 1024 个。

通过 ACL 分配 VRF

L3HW 支持使用 ACL 交换机规则为入站流量分配 VRF。/interface/ethernet/switch/rule 中的 new-vrf 选项允许将匹配的数据包定向到特定的 VRF 表。

在不感知 VRF 的交换机(98DX3xxx 和 98DX2xxx 系列)上,将 new-vrf 设置为除 main 以外的任何值都将导致 redirect-to-cpu=yes。

有关 ACL 规则的更多详细信息,请参见交换机规则(ACL)。

配置示例


上游端口位于防火墙/NAT 之后的 VLAN 间路由

此示例演示如何受益于接近线速的 VLAN 间路由,同时保持防火墙和 NAT 在上游端口上运行。此外,到上游端口的 Fasttrack 连接也会被卸载到硬件,将流量速度提升到接近线速。VLAN 间流量完全由硬件路由,不进入 CPU/防火墙,因此不占用 Fasttrack 连接的硬件内存。

我们使用 CRS317-1G-16S+ 型号,设置如下:

  • sfp1-sfp4 - 桥接端口,VLAN ID 20,未标记。
  • sfp5-sfp8 - 桥接端口,VLAN ID 30,未标记。
  • sfp16 - 上游端口。
  • ether1 - 管理端口。

设置接口列表以便于访问:

接口列表

/interface/list
add name=LAN
add name=WAN
add name=MGMT 

/interface/list/member
add interface=sfp-sfpplus1 list=LAN
add interface=sfp-sfpplus2 list=LAN
add interface=sfp-sfpplus3 list=LAN
add interface=sfp-sfpplus4 list=LAN
add interface=sfp-sfpplus5 list=LAN
add interface=sfp-sfpplus6 list=LAN
add interface=sfp-sfpplus7 list=LAN
add interface=sfp-sfpplus8 list=LAN
add interface=sfp-sfpplus16 list=WAN
add interface=ether1 list=MGMT 

网桥设置

/interface/bridge
add name=bridge vlan-filtering=yes

/interface/bridge/port
add bridge=bridge interface=sfp-sfpplus1 pvid=20
add bridge=bridge interface=sfp-sfpplus2 pvid=20
add bridge=bridge interface=sfp-sfpplus3 pvid=20
add bridge=bridge interface=sfp-sfpplus4 pvid=20
add bridge=bridge interface=sfp-sfpplus5 pvid=30
add bridge=bridge interface=sfp-sfpplus6 pvid=30
add bridge=bridge interface=sfp-sfpplus7 pvid=30
add bridge=bridge interface=sfp-sfpplus8 pvid=30

/interface/bridge/vlan
add bridge=bridge tagged=bridge untagged=sfp-sfpplus1,sfp-sfpplus2,sfp-sfpplus3,sfp-sfpplus4 vlan-ids=20
add bridge=bridge tagged=bridge untagged=sfp-sfpplus5,sfp-sfpplus6,sfp-sfpplus7,sfp-sfpplus8 vlan-ids=30

路由需要专用的 VLAN 接口。对于标准 L2 VLAN 桥接(无 VLAN 间路由),可以省略下一步。

用于路由的 VLAN 接口设置

/interface/vlan
add interface=bridge name=vlan20 vlan-id=20
add interface=bridge name=vlan30 vlan-id=30

/ip/address
add address=192.168.20.17/24 interface=vlan20 network=192.168.20.0
add address=192.168.30.17/24 interface=vlan30 network=192.168.30.0

配置管理端口和上游端口、基本防火墙、NAT,并启用 Fasttrack 连接的硬件卸载:

防火墙设置

/ip/address
add address=192.168.88.1/24 interface=ether1
add address=10.0.0.17/24 interface=sfp-sfpplus16

/ip/route
add gateway=10.0.0.1

/ip/firewall/filter
add action=fasttrack-connection chain=forward connection-state=established,related hw-offload=yes
add action=accept chain=forward connection-state=established,related

/ip/firewall/nat
add action=masquerade chain=srcnat out-interface-list=WAN

此时,所有路由仍由 CPU 执行。在交换机芯片上启用硬件路由:

启用第 3 层硬件卸载

# Enable full hardware routing on LAN ports
:foreach i in=[/interface/list/member/find where list=LAN] do={ 
    /interface/ethernet/switch/port/set [/interface/list/member/get $i interface] l3-hw-offloading=yes 
} 

# Disable full hardware routing on WAN or Management ports
:foreach i in=[/interface/list/member/find where list=WAN or list=MGMT] do={ 
    /interface/ethernet/switch/port/set [/interface/list/member/get $i interface] l3-hw-offloading=no 
}

# Activate Layer 3 Hardware Offloading on the switch chip
/interface/ethernet/switch/set 0 l3-hw-offloading=yes

结果:

  • 在同一 VLAN 内(例如 sfp1-sfp4),流量由硬件在第 2 层转发 (L2HW)。
  • VLAN 间流量(例如 sfp1-sfp5)由硬件在第 3 层路由 (L3HW)。
  • 进出 WAN 端口的流量首先由 CPU/防火墙处理。然后 Fasttrack 连接被卸载到硬件 (硬件加速的 L4 有状态防火墙)。 NAT 同时应用于 CPU 和硬件处理的数据包。
  • 到管理端口的流量受防火墙保护。

典型错误配置


以下是用户在配置第 3 层硬件卸载时的典型错误。

交换机端口或绑定上的 VLAN 接口

/interface/vlan
add name=vlan10 vlan-id=10 interface=sfp-sfpplus1
add name=vlan20 vlan-id=20 interface=bond1

由于第 2 层依赖,只有在硬件卸载的、启用 vlan-filtering 的网桥上创建的 VLAN 接口才能进行 L3HW 卸载。正确的配置是:

/interface/bridge/port
add bridge=bridge1 interface=sfp-sfpplus1 frame-types=admit-only-vlan-tagged
add bridge=bridge1 interface=bond1 frame-types=admit-only-vlan-tagged
 
/interface/bridge/vlan
add bridge=bridge1 tagged=bridge1,sfp-sfpplus1 vlan-ids=10
add bridge=bridge1 tagged=bridge1,bond1 vlan-ids=20
 
/interface/vlan
add name=vlan10 vlan-id=10 interface=bridge1
add name=vlan20 vlan-id=20 interface=bridge1

警告

如果 VLAN 接口直接创建在以太网或绑定接口上,数据包可能被错误卸载 - 绕过 CPU 处理(如防火墙和 NAT)并导致未定义的行为。

如果需要这种类型的配置,必须在 /interface/ethernet/switch/port 菜单下通过设置 l3-hw-offloading=no 在相关交换机端口上禁用 L3HW 卸载。

未将网桥接口添加到 /interface/bridge/vlan/

对于 VLAN 间路由,网桥接口本身需要添加到给定 VLAN 的已标记成员中。在下一个示例中,VLAN 间路由在 VLAN 10 和 11 之间工作,但数据包不会路由到 VLAN 20。

/interface/bridge/vlan
add bridge=bridge1 vlan-ids=10 tagged=bridge1,sfp-sfpplus1
add bridge=bridge1 vlan-ids=11 tagged=bridge1 untagged=sfp-sfpplus2,sfp-sfpplus3 
add bridge=bridge1 vlan-ids=20 tagged=sfp-sfpplus1 untagged=sfp-sfpplus4,sfp-sfpplus5

上面的示例并不总是意味着错误。有时,您可能希望设备在某些/所有 VLAN 中充当简单的 L2 交换机。只需确保您是有意设置此类行为,而不是因为错误。

创建多个网桥

这些设备仅支持一个硬件网桥。如果创建了多个网桥,只有一个获得硬件卸载。虽然对于 L2 来说这意味着其他网桥使用软件转发,但在 L3HW 的情况下,多个网桥可能导致未定义的行为。

提示

不要创建多个网桥,而是创建一个网桥并使用 VLAN 过滤来分隔 L2 网络。

使用不属于交换机的端口

某些设备有两个交换机芯片或管理端口直接连接到 CPU。例如,CRS312-4C+8XG 有一个 ether9 端口连接到单独的交换机芯片。尝试将此端口添加到网桥或将其纳入 L3HW 设置会导致意外结果。将管理端口留给管理用途!

[admin@crs312] /interface/ethernet/switch> print
Columns: NAME, TYPE, L3-HW-OFFLOADING
# NAME     TYPE              L3-HW-OFFLOADING
0 switch1  Marvell-98DX8212  yes            
1 switch2  Atheros-8227      no   
           
[admin@crs312] /interface/ethernet/switch> port print
Columns: NAME, SWITCH, L3-HW-OFFLOADING, STORM-RATE
 # NAME         SWITCH   L3-HW-OFFLOADING  STORM-RATE
 0 ether9       switch2                             
 1 ether1       switch1  yes                      100
 2 ether2       switch1  yes                      100
 3 ether3       switch1  yes                      100
 4 ether4       switch1  yes                      100
 5 ether5       switch1  yes                      100
 6 ether6       switch1  yes                      100
 7 ether7       switch1  yes                      100
 8 ether8       switch1  yes                      100
 9 combo1       switch1  yes                      100
10 combo2       switch1  yes                      100
11 combo3       switch1  yes                      100
12 combo4       switch1  yes                      100
13 switch1-cpu  switch1                           100
14 switch2-cpu  switch2

过度依赖 Fasttrack 硬件卸载

由于 Fasttrack 硬件卸载以零配置开销提供接近线速的性能,用户倾向于将其用作默认解决方案。但是,硬件 Fasttrack 连接的数量非常有限,将其他流量留给 CPU。尽量使用硬件路由,通过交换机 ACL 规则将 CPU 流量降至最低,然后使用防火墙过滤规则微调要卸载哪些 Fasttrack 连接。

尝试卸载慢路径连接

使用某些配置(例如启用网桥 "use-ip-firewall" 设置、创建网桥 NAT/过滤规则)或运行 sniffer 或 torch 等特定功能可能会禁用 RouterOS FastPath,这将影响正确 FastTrack 和硬件卸载连接的能力。如果需要硬件卸载的 Fasttrack,请确保没有禁用 FastPath 的设置,并验证连接是否获得 "H" 标志,或使用 L3HW monitor 命令查看硬件卸载连接的数量。

L3HW 功能支持

  • HW - 该功能受支持并卸载到硬件。
  • CPU - 该功能受支持但由软件(CPU)执行。
  • N/A - 该功能无法与 L3HW 一起使用。必须完全禁用第 3 层硬件卸载(switch l3-hw-offloading=no)才能使此功能工作。
  • FW - 该功能要求对给定交换机端口设置 l3-hw-offloading=no。在交换机级别,l3-hw-offloading=yes。
FeatureSupportCommentsRelease
IPv4 Unicast RoutingHW7.1
IPv6 Unicast RoutingHW/interface/ethernet/switch/l3hw-settings/set ipv6-hw=yes7.6
IPv4 Multicast RoutingCPU
IPv6 Multicast RoutingCPU
ECMPHWMultipath routing7.1
BlackholesHW/ip/route/add dst-address=10.0.99.0/24 blackhole7.1
gateway=<interface_name>CPU/HW/ip/route/add dst-address=10.0.0.0/24 gateway=ether1 这仅适用于直连网络。由于硬件不知道如何发送 ARP 请求,CPU 发送 ARP 请求并等待回复,以在匹配目标 IP 地址的连接的第一个接收数据包上找出 DST MAC 地址。确定 DST MAC 后,添加硬件条目,所有后续数据包将由交换机芯片处理。7.1
BridgeHW从/到硬件卸载的网桥接口路由。7.1
VLANHW在创建于具有 vlan-filtering 的硬件卸载网桥接口上的 VLAN 接口之间路由。/interface/vlan7.1
BondingHW在绑定接口之间路由。/interface/bonding 仅 802.3ad 和 balance-xor 绑定模式被硬件卸载。7.1
IPv4 FirewallFW用户必须选择硬件加速路由或防火墙。防火墙规则由 CPU 处理。Fasttrack 连接被卸载到硬件。7.1
IPv4 NATFW应用于已卸载 Fasttrack 连接的 NAT 规则也由硬件处理。7.1
MLAGN/A
VRFHW硬件卸载的 VRF。
VRRPN/A
Traffic-FlowN/AL3HW 卸载的流量不会通过 Traffic Flow 报告。
VXLANHW支持硬件卸载的 VXLAN 数据平面、VXLAN 封装和解封装。这允许在 vlan-filtering 网桥内进行静态的一对一 VLAN 到 VXLAN 映射。目前,一些已知功能尚未实现。Underlay(路由封装的 VXLAN 数据包): 1. 不支持通过 ECMP 的 VTEP 2. 不支持通过 bond、bridge、VLAN 接口的 VTEP(仅支持独立的可路由以太网接口) 3. 不支持通过组播的 VTEP 4. VXLAN 硬件卸载仅限于 main 路由表。VTEP 无法在 VRF 内运行。 5. 不支持带 IPv6 的 VTEP Overlay(以太网和 VXLAN 之间的转发): 1. 不支持通过 VXLAN 的 VLAN 标记 2. 不支持在不同 VXLAN VNI 之间路由 3. VTEP 是隔离的,并且没有机制控制它们之间的 "horizon"。 4. 桥接的 VXLAN 接口不支持 IGMP snooping。启用 snooping 时,VXLAN 上的 MDB 条目不会被卸载,组播流量在以太网和 VXLAN 之间受到限制。 5. 桥接的 VXLAN 接口不被 MLAG 支持。/interface/vxlan7.18
MTUHW硬件最多支持 8 个 MTU 配置文件。7.1
QinQ RoutingCPU堆叠的可路由 VLAN 接口将失去 L3HW 卸载,而直接创建在网桥接口上的可路由 VLAN 接口仍可使用硬件卸载。
IPv4 routes with IPv6 nexthops or vice versaN/A

只有下表列出的设备支持 L3 硬件卸载。

L3HW 设备支持

只有下表列出的设备支持 L3 硬件卸载。

CRS3xx:交换机 98DX3xxx 和 98DX2xxx 系列

以下设备基于 Marvell 98DX224S、98DX226S、98DX2528, 或 98DX3236 交换机芯片型号。

信息

98DX3255 和 98DX3257 型号是例外,它们具有 98DX8xxx 而非 98DX3xxx 系列的功能集。

注意: 与其他交换机型号相比,以下是这些设备缺少的一些重要功能:

  • Fasttrack 和 NAT 连接卸载
  • 按 VLAN 的数据包和字节计数器
  • VXLAN 卸载
  • 硬件卸载的 VRF。
Switch ChipModelsIPv4 Route Prefixes <sup>1</sup>IPv6 Route Prefixes <sup>2</sup>NexthopsECMP paths per prefix <sup>3</sup>
98DX3236CRS305-1G-4S+IN CRS326-24G-2S+ (RM/IN) CRS328-24P-4S+RM CRS328-4C-20S-4S+RM1331233284K8
98DX226SCRS305-1G-4S+OUT (FiberBox Plus) CRS310-1G-5S-4S+ (netFiber 9/IN) CRS310-8G+2S+IN CRS318-16P-2S+OUT (netPower 16P) CRS320-8P-8B-4S+RM CRS418-8P-8G-2S+RM CRS418-8P-8G-2S+5axQ2axQ-RM1331233284K8
98DX224SCRS318-1Fi-15Fr-2S-OUT (netPower 15FR)1331233284K8
98DX2528CRS304-4XG-IN1331233284K8

<sup>1</sup> 由于可以卸载的路由总数有限,具有更高网络掩码的前缀优先由硬件转发(例如 /32、/30、/29 等)。任何其他无法放入硬件表的前缀将由 CPU 处理。直连主机作为 /32(IPv4)或 /128(IPv6)路由前缀卸载。主机数量也受 IP 设置 / IPv6 设置 中 max-neighbor-entries 的限制。
<sup>2</sup> IPv4 和 IPv6 路由表共享相同的硬件内存。
<sup>3</sup> 如果某条路由的路径数超过硬件 ECMP 限制(X),则只有前 X 条路径被卸载。

部分卸载

对于 98DX3xxx、98DX2xxx 交换机芯片系列,非常简单:一个 RouterOS 路由条目(/ip/route/)反映为一个硬件 IPv4 路由前缀条目。直连主机(/32 路由)也占用同一个表。只要路由总数("/ip/route/print count-only")+ 直连主机数("/ip/arp/print count-only where status=reachable or status=stale")不超过 13312(13k),所有内容都会被卸载。超过该数量时,具有较短前缀的路由保留在 CPU 上。

CCR2xxx、CRS3xx、CRS5xx:交换机 98DX8xxx 和 98DX4xxx 系列

以下设备基于 Marvell 98DX8xxx、98DX4xxx 交换机芯片或 98DX325x 型号。

Switch ChipModelsIPv4 Routes <sup>1</sup>IPv4 Hosts <sup>5</sup>IPv6 Routes <sup>1</sup>IPv6 Hosts <sup>5</sup>NexthopsIPv4 Fasttrack connections <sup>2, 3, 4</sup>IPv4 NAT entries <sup>2, 4</sup>IPv4 Fasttrack/NAT, VXLAN offloading Per-VLAN packet/byte counters
98DX8208CRS309-1G-8S+INup to 36Kup to 16Kup to 6Kup to 12K8K4.5K3.9K+
98DX8212CRS312-4C+8XG-RMup to 36Kup to 16Kup to 6Kup to 12K8K2.25K2.25K+
98DX8216CRS317-1G-16S+RMup to 240Kup to 64Kup to 40Kup to 48K8K4.5K4K+
98DX8332CRS326-24S+2Q+RM CRS326-4C+20G+2Q+RMup to 36Kup to 16Kup to 6Kup to 12K8K2.25K2.25K+
98DX3257 <sup>6</sup>CRS354-48G-4S+2Q+RM CRS354-48P-4S+2Q+RMup to 36Kup to 16Kup to 6Kup to 12K8K2.25K2.25K+
98DX4310CRS504-4XQ (IN/OUT) CRS510-8XS-2XQ-IN RDS2216-2XG-4S+4XS-2XQup to 120Kup to 64Kup to 20Kup to 48K8K4.5K4K+
98CX8410CRS520-4XS-16XQ-RMup to 240Kup to 64Kup to 40Kup to 48K8K4.5K4K+
98DX3255 <sup>6</sup>CCR2116-12G-4S+up to 36Kup to 16Kup to 6Kup to 12K8K2.25K2.25K+
98DX8525CCR2216-1G-12XS-2XQ CRS518-16XS-2XQ-RMup to 120Kup to 64Kup to 20Kup to 48K8K4.5K4K+

<sup>1</sup> 取决于路由表的复杂性。整字节 IP 前缀(/8、/16、/24 等)比其他前缀(例如 /22)占用更少的硬件空间。当路由硬件表变满时,只有具有较长子网前缀的路由被卸载(/30、/29、/28 等),而 CPU 处理较短的前缀。用户可以通过路由过滤器(对于动态路由)或抑制每个交换机端口、静态路由或 VLAN 的硬件卸载来微调要卸载哪些路由。IPv4 和 IPv6 路由表共享相同的硬件内存。
<sup>2</sup> 当达到 Fasttrack 或 NAT 条目的硬件限制时,其他连接将回退到 CPU。MikroTik 的智能连接卸载算法确保流量最大的连接被卸载到硬件。
<sup>3</sup> Fasttrack 连接与 ACL 规则共享相同的硬件内存。根据复杂性,一条 ACL 规则可能占用 3-6 个 Fasttrack 连接的内存。
<sup>4</sup> 如果 Fasttrack 连接需要网络地址转换,则创建硬件 NAT 条目。硬件同时支持 SRCNAT 和 DSTNAT。
<sup>5</sup> DX4000/DX8000 交换机芯片将直连主机、IPv4 /32 和 IPv6 /128 路由条目存储在 FDB 表而不是路由表中。硬件内存在常规 FDB L2 条目(MAC)、IPv4 和 IPv6 地址之间共享。主机数量也受 IP 设置 / IPv6 设置 中 max-neighbor-entries 的限制。
<sup>6</sup> 交换机芯片具有 DX8000 系列的功能集。

部分卸载

98DX8xxx、98DX4xxx 具有完全不同的路由表。我们必须卸载路由索引,而不是前缀。整个 IPv4 地址范围(IPv6 同理)必须被索引,即 0.0.0.0 - 255.255.255.255。添加新的路由条目会导致索引重建,根据路由表的复杂性增加 0-5 个条目的硬件内存。这就是为什么没有给出确切数字。例如,一些包含 240K 条目的路由表可以完全卸载到 CRS317 硬件,而其他包含 160K 条目的路由表勉强放得下。在您尝试之前,您永远不会知道。

在索引整个 IP 地址范围(0.0.0.0 - 255.255.255.255)时,只要您还使用相同的下一跳拥有默认路由(0.0.0.0/0),您就可以卸载任意数量的路由。

例如,在 CCR2216 路由器上创建了大约 950k 条带有 /30 前缀的路由,它们都使用相同的下一跳以及一条默认路由。结果,所有路由都被卸载,而 lpm-usage 保持最小。

[admin@MikroTik] > /interface/ethernet/switch/l3hw-settings/advanced/monitor 
        ipv4-routes-total: 942338
           ipv4-routes-hw: 942326
          ipv4-routes-cpu:     11
  ipv4-shortest-hw-prefix:      0
               ipv4-hosts:      1
         route-queue-size:      0
         route-queue-rate:      0
       route-process-rate:      0
              nexthop-cap:   8192
            nexthop-usage:     85
    vxlan-mtu-packet-drop:      0
     fasttrack-ipv4-conns:      0
     fasttrack-queue-size:      0
     fasttrack-queue-rate:      0
   fasttrack-process-rate:      0
   fasttrack-hw-min-speed:      0
   fasttrack-hw-offloaded:      0
    fasttrack-hw-unloaded:      0
                  lpm-cap:  27200
                lpm-usage:     11
             lpm-bank-cap:   1360
           lpm-bank-usage:      1
                                0
                                0
                                0
                                1
                                0
                                0
                                0
                                4
                                0
                                0
                                0
                                5
                                0
                                0
                                0
                                0
                                0
                                0
                                0
                  pbr-cap:   8192
                pbr-usage:      0
             pbr-lpm-bank:      2
                nat-usage:      0

但是,如果地址范围中存在"空隙",例如不使用默认路由或具有多个下一跳,则会消耗硬件表。当路由硬件表变满时,只有具有较长子网前缀的路由被卸载(/30、/29、/28 等),而 CPU 处理较短的前缀。以下是禁用默认路由或使用不同下一跳时发生的情况:只有 37k 条带有 /30 前缀的路由能放入硬件表。这是 CCR2216 的最坏情况。

[admin@MikroTik] > /interface/ethernet/switch/l3hw-settings/advanced/monitor 
        ipv4-routes-total: 942337
           ipv4-routes-hw:  37729
          ipv4-routes-cpu: 904608
  ipv4-shortest-hw-prefix:     30
               ipv4-hosts:      1
         route-queue-size:      0
         route-queue-rate:      0
       route-process-rate:      0
              nexthop-cap:   8192
            nexthop-usage:     85
    vxlan-mtu-packet-drop:      0
     fasttrack-ipv4-conns:      0
     fasttrack-queue-size:      0
     fasttrack-queue-rate:      0
   fasttrack-process-rate:      0
   fasttrack-hw-min-speed:      0
   fasttrack-hw-offloaded:      0
    fasttrack-hw-unloaded:      0
                  lpm-cap:  27200
                lpm-usage:  22392
             lpm-bank-cap:   1360
           lpm-bank-usage:   1022
                             1033
                             1027
                             1028
                             1221
                             1033
                             1040
                              678
                             1358
                             1245
                             1254
                             1242
                             1246
                             1249
                             1273
                             1260
                             1101
                             1024
                             1031
                             1027
                  pbr-cap:   8192
                pbr-usage:      0
             pbr-lpm-bank:      2
                nat-usage:      0

在许多情况下,默认行为"仅卸载具有较长子网前缀的路由"并非最优,特别是如果 CPU 处理的路由与硬件卸载路由的比率过高。发生这种情况时,数据包被硬件转发的几率显著下降。

如果硬件内存不足且发生部分卸载,作为网络管理员,更好的方法是仅卸载承载最多流量的路由,同时将要求较低的路由保留在 CPU 上,而不让部分卸载发生。

幸运的是,有几种方法可以管理这一点。有按交换机端口和静态路由抑制,以及使用各种属性过滤动态路由。一个例子是使用 as-path 过滤要求最高的前缀(Google、Meta),而所有其他路由被 L3HW 抑制。

CRS8xx:交换机 98DX7xxx 系列

以下设备基于 Marvell 98DX7xxx 交换机芯片型号。

危险

以下功能的软件支持仍在开发中,尚不可用:

  • FastTrack 和 NAT 连接卸载
  • VXLAN 卸载
Switch ChipModelsIPv4 Routes <sup>1</sup>IPv4 Hosts <sup>2</sup>IPv6 Routes <sup>1</sup>IPv6 Hosts <sup>2</sup>NexthopsIPv4 Fasttrack connectionsIPv4 NAT entriesVXLAN offloadingPer-VLAN packet/byte counters
98DX7335CRS812-8DS-2DQ-2DDQ-RMup to 240Kup to 64Kup to 40Kup to 48K16Kto be announcedto be announcedto be announced+
98DX7335CRS804-4DDQ-hRMup to 240Kup to 64Kup to 40Kup to 48K16Kto be announcedto be announcedto be announced+

<sup>1</sup> 取决于路由表的复杂性。整字节 IP 前缀(/8、/16、/24 等)比其他前缀(例如 /22)占用更少的硬件空间。当路由硬件表变满时,只有具有较长子网前缀的路由被卸载(/30、/29、/28 等),而 CPU 处理较短的前缀。用户可以通过路由过滤器(对于动态路由)或抑制静态路由的硬件卸载来微调要卸载哪些路由。IPv4 和 IPv6 路由表共享相同的硬件内存。
<sup>2</sup> 98DX7xxx 交换机芯片将直连主机、IPv4 /32 路由条目和 IPv6 /128 路由条目存储在 FDB 表而不是路由表中。硬件内存在常规 FDB L2 条目(MAC)、IPv4 地址和 IPv6 地址之间共享。主机数量也受 IP 设置 / IPv6 设置 中 max-neighbor-entries 的限制。