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。
| Feature | Support | Comments | Release |
|---|---|---|---|
| IPv4 Unicast Routing | HW | 7.1 | |
| IPv6 Unicast Routing | HW | /interface/ethernet/switch/l3hw-settings/set ipv6-hw=yes | 7.6 |
| IPv4 Multicast Routing | CPU | ||
| IPv6 Multicast Routing | CPU | ||
| ECMP | HW | Multipath routing | 7.1 |
| Blackholes | HW | /ip/route/add dst-address=10.0.99.0/24 blackhole | 7.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 |
| Bridge | HW | 从/到硬件卸载的网桥接口路由。 | 7.1 |
| VLAN | HW | 在创建于具有 vlan-filtering 的硬件卸载网桥接口上的 VLAN 接口之间路由。/interface/vlan | 7.1 |
| Bonding | HW | 在绑定接口之间路由。/interface/bonding 仅 802.3ad 和 balance-xor 绑定模式被硬件卸载。 | 7.1 |
| IPv4 Firewall | FW | 用户必须选择硬件加速路由或防火墙。防火墙规则由 CPU 处理。Fasttrack 连接被卸载到硬件。 | 7.1 |
| IPv4 NAT | FW | 应用于已卸载 Fasttrack 连接的 NAT 规则也由硬件处理。 | 7.1 |
| MLAG | N/A | ||
| VRF | HW | 硬件卸载的 VRF。 | |
| VRRP | N/A | ||
| Traffic-Flow | N/A | L3HW 卸载的流量不会通过 Traffic Flow 报告。 | |
| VXLAN | HW | 支持硬件卸载的 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/vxlan | 7.18 |
| MTU | HW | 硬件最多支持 8 个 MTU 配置文件。 | 7.1 |
| QinQ Routing | CPU | 堆叠的可路由 VLAN 接口将失去 L3HW 卸载,而直接创建在网桥接口上的可路由 VLAN 接口仍可使用硬件卸载。 | |
| IPv4 routes with IPv6 nexthops or vice versa | N/A |
只有下表列出的设备支持 L3 硬件卸载。
L3HW 设备支持
只有下表列出的设备支持 L3 硬件卸载。
CRS3xx:交换机 98DX3xxx 和 98DX2xxx 系列
以下设备基于 Marvell 98DX224S、98DX226S、98DX2528, 或 98DX3236 交换机芯片型号。
信息
98DX3255 和 98DX3257 型号是例外,它们具有 98DX8xxx 而非 98DX3xxx 系列的功能集。
注意: 与其他交换机型号相比,以下是这些设备缺少的一些重要功能:
- Fasttrack 和 NAT 连接卸载
- 按 VLAN 的数据包和字节计数器
- VXLAN 卸载
- 硬件卸载的 VRF。
| Switch Chip | Models | IPv4 Route Prefixes <sup>1</sup> | IPv6 Route Prefixes <sup>2</sup> | Nexthops | ECMP paths per prefix <sup>3</sup> |
|---|---|---|---|---|---|
| 98DX3236 | CRS305-1G-4S+IN CRS326-24G-2S+ (RM/IN) CRS328-24P-4S+RM CRS328-4C-20S-4S+RM | 13312 | 3328 | 4K | 8 |
| 98DX226S | CRS305-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-RM | 13312 | 3328 | 4K | 8 |
| 98DX224S | CRS318-1Fi-15Fr-2S-OUT (netPower 15FR) | 13312 | 3328 | 4K | 8 |
| 98DX2528 | CRS304-4XG-IN | 13312 | 3328 | 4K | 8 |
<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 Chip | Models | IPv4 Routes <sup>1</sup> | IPv4 Hosts <sup>5</sup> | IPv6 Routes <sup>1</sup> | IPv6 Hosts <sup>5</sup> | Nexthops | IPv4 Fasttrack connections <sup>2, 3, 4</sup> | IPv4 NAT entries <sup>2, 4</sup> | IPv4 Fasttrack/NAT, VXLAN offloading Per-VLAN packet/byte counters |
|---|---|---|---|---|---|---|---|---|---|
| 98DX8208 | CRS309-1G-8S+IN | up to 36K | up to 16K | up to 6K | up to 12K | 8K | 4.5K | 3.9K | + |
| 98DX8212 | CRS312-4C+8XG-RM | up to 36K | up to 16K | up to 6K | up to 12K | 8K | 2.25K | 2.25K | + |
| 98DX8216 | CRS317-1G-16S+RM | up to 240K | up to 64K | up to 40K | up to 48K | 8K | 4.5K | 4K | + |
| 98DX8332 | CRS326-24S+2Q+RM CRS326-4C+20G+2Q+RM | up to 36K | up to 16K | up to 6K | up to 12K | 8K | 2.25K | 2.25K | + |
| 98DX3257 <sup>6</sup> | CRS354-48G-4S+2Q+RM CRS354-48P-4S+2Q+RM | up to 36K | up to 16K | up to 6K | up to 12K | 8K | 2.25K | 2.25K | + |
| 98DX4310 | CRS504-4XQ (IN/OUT) CRS510-8XS-2XQ-IN RDS2216-2XG-4S+4XS-2XQ | up to 120K | up to 64K | up to 20K | up to 48K | 8K | 4.5K | 4K | + |
| 98CX8410 | CRS520-4XS-16XQ-RM | up to 240K | up to 64K | up to 40K | up to 48K | 8K | 4.5K | 4K | + |
| 98DX3255 <sup>6</sup> | CCR2116-12G-4S+ | up to 36K | up to 16K | up to 6K | up to 12K | 8K | 2.25K | 2.25K | + |
| 98DX8525 | CCR2216-1G-12XS-2XQ CRS518-16XS-2XQ-RM | up to 120K | up to 64K | up to 20K | up to 48K | 8K | 4.5K | 4K | + |
<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 Chip | Models | IPv4 Routes <sup>1</sup> | IPv4 Hosts <sup>2</sup> | IPv6 Routes <sup>1</sup> | IPv6 Hosts <sup>2</sup> | Nexthops | IPv4 Fasttrack connections | IPv4 NAT entries | VXLAN offloading | Per-VLAN packet/byte counters |
|---|---|---|---|---|---|---|---|---|---|---|
| 98DX7335 | CRS812-8DS-2DQ-2DDQ-RM | up to 240K | up to 64K | up to 40K | up to 48K | 16K | to be announced | to be announced | to be announced | + |
| 98DX7335 | CRS804-4DDQ-hRM | up to 240K | up to 64K | up to 40K | up to 48K | 16K | to be announced | to be announced | to 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 的限制。