v7.1beta4关于L3 Hardware Offloading更新介绍(CRS3xx用户一定要看)
CRS3xx系列产品的用户一定要看
从RouterOS v7.1beta4开始l3hw=yes和l3hw=fw两个模式进行了合并,允许单独指定接口的路由硬件转发,并兼容部分Firewall/NAT配置,将l3hw 属性被重命名为l3-hw-offloading。从RouterOS v7.1 beta6 开始CRS3xx系列几乎全部支持支持Layer3 hardware offloading。
/interface/ethernet/switch set switch1 l3-hw-offloading=yes /interface/ethernet/switch/port set [find] l3-hw-offloading=yes
现在L3-HW能分别配置到每个物理交换接口,当启用l3-hw-offloading设置更改配置,不影响正在使用的会话连接。如果禁用l3-hw- offloading仍然会有路由条目在硬件内存中保留,因此建议修改l3-hw- offloading配置后重启设备。
v7.1 beta4调整内容如下:
L3-HW设置同时存在于/interface/ethernet/switch和/interface/ethernet/switch/port下,但它们有所不同, 在switch下设置 l3-hw- offloading=no ,将完全禁用硬件转发,所有数据包将通过CPU处理。但在port下设置 l3-hw- offloading=no,将禁用该指定接口的三层路由转发,而fasttrack将继续下发到硬件处理 。但需要注意,数据包在路由转发下发到硬件时,要求源和目标端口同时设置
l3-hw-offloading=yes,如果仅一侧启用,数据将会通过CPU处理,仅Fasttrack的连接会被下发到硬件。
默认情况下,所有路由条目都启用了HW硬件加速。为了进一步调整需要硬件处理的流量,每条路由都有一个选项suppress-hw-offload(压制hw-offload)来禁用/启用,是否进行硬件转发。
例如,当我们知道某条路由涉及服务器网络的流量非常大,我们可以只启用到该特定静态路由硬件加速:
/ip/route set [find where static && dst-address!="192.168.3.0/24"] suppress-hw-offload=yes
仅目标静态路由192.168.3.0/24启用硬件加速(注意规则是dst-address!=”192.168.3.0/24″,有“!” 代表非),其他路由开启压制,可以在下面看到AsH前缀,表明该路由条目选择HW-offloading的硬件加速(H-flag并非表示该路由实际上已经在HW-offloading,而是表示该路由可被选择为HW-offloading)
[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
如果只启用fasttrack功能,请在port上禁用l3-hw-offloading功能,而在switch上启用全局l3-hw-offloading功能。
/interface/ethernet/switch set switch1 l3-hw-offloading=yes /interface/ethernet/switch/port set [find] l3-hw-offloading=no
另一个例子是,当sfp-sfpplus16下创建的VLAN作为外网WAN端口时,需要开启NAT转换,但其他端口作为内网开启L3-HW加速,进出sfp-sfpplus16的数据包会进入CPU处理,即被防火墙/NAT处理。
/interface/ethernet/switch set switch1 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
需要注意CRS3xx系列交换机的L3-HW在v7.1 beta6后开始被完全支持,但需要区分Marvell DX8000和DX3000/2000系列芯片,它们之间的功能有所区别。
DX8000系列芯片
下列设备基于 Marvell 98DX8xxx 或 98DX3257 交换芯片
型号 | 版本 | 路由条目 | 下一跳 | ECMP | Fasttrack 1,2 | NAT |
CRS317-1G-16S+ | 7.1beta1 | 150 – 240K | 8K | 4K | 4500 / 3750 3 | 8K 4 |
CRS309-1G-8S+ | 7.1beta2 | 50 – 80K | 8K | 4K | 4500 / 3750 | 8K |
CRS312-4C+8XG | 7.1beta2 | 50 – 80K | 8K | 4K | 2250 / 1500 | 8K |
CRS326-24S+2Q+ | 7.1beta2 | 50 – 80K | 8K | 4K | 2250 / 1500 | 8K |
CRS354-48G-4S+2Q+ | 7.1beta4 | 50 – 80K | 8K | 4K | 2250 / 1500 | 8K |
备注说明:
- *1 当达到Fasttrack或NAT的HW会话限制时,超出的会话连接将回落到CPU,MikroTik的智能连接算法确保了流量最大的连接被卸载到硬件处理
- *2 Fasttrack连接与ACL规则共用HW内存。根据复杂度的不同,一条ACL规则可能会占用3-6条Fasttrack连接的内存。
- *3 (MPLS 和Bridge Port Extender同时被禁用) / (MPLS和Bridge Port Extender两者都启用)。MPLS与Fasttrack连接共用HW内存。此外,启用MPLS需要分配整个内存区域,否则可以存储多达750个Fasttrack连接。这同样适用于Bridge Port Extender(桥接端口扩展器)。然而,MPLS和Bridge Port Extended可能使用相同的内存区域,所以同时启用它们不会使Fasttrack连接的限制加倍。
- *4 如果Fasttrack启用,NAT条目无法被全部使用因为受限于Fasttrack连接数量。
DX3000/2000系列
下面的设备列表为 Marvell 98DX224S、98DX226S和98DX3236 交换芯片,这些芯片不支持Fasttrack 和NAT 连接下发,而 98DX3257 除外,其功能与DX8000相同,所以有别于DX3000系列。
这类交换芯片使用不同的方法下发IPv4路由,而不是DX8000系列芯片使用的IP rangs, DX3000/2000使用的IP prefixs
型号 | 版本 | IPv4路由前缀1 | 下一跳 | ECMP per prefix2 |
CRS305-1G-4S+ | 7.1beta6 | 13312 | 4K | 8 |
CRS318-1Fi-15Fr-2S | 7.1beta6 | 13312 | 4K | 8 |
CRS318-16P-2S+ | 7.1beta6 | 13312 | 4K | 8 |
CRS326-24G-2S+ | 7.1beta6 | 13312 | 4K | 8 |
CRS328-24P-4S+ | 7.1beta6 | 13312 | 4K | 8 |
CRS328-4C-20S-4S+ | 7.1beta6 | 13312 | 4K | 8 |
- *1 可用于加速的路由总量非常有限,更高的子网掩码会被优先做硬件转发(如:/32,/30,/ 29 等高位子网,最后才是0.0.0/0,如果超出限制数量0.0.0.0/0的默认路由会被放到CPU处理,对于其他任何前缀不适合HW表将由CPU处理。
- *2 如果到相同目的路由,存在多路径,即ECMP路由,超过限制数量(8条),则只加速第一组8条EMCP路由,多出的会由CPU处理。
CRS3xx的三层路由配置可以参考:RouterOSv7.1 Beta6 L3 HW三层路由转发配置
此次对L3-hardware-offloading的大改,可用看出v7版本的功能配置调整还在继续,没有完全稳定下来,大家可用尝鲜,但实际使用建议还是需要继续等待。不过从这次的L3-hardware-offloading调整,应该是对用户实际情况的反馈做了大的修改,我的分析如下:
1、开始MikroTik应该是只想让CRS3xx系列支持普通的三层路由转发,同时兼顾部分nat加速的功能,但市面上三层交换机几乎都是将三层路由下发给交换芯片转发,没有考虑过nat问题,因为这个是nat路由器要做的事情,MikroTik三层路由和nat会话下发到了交换芯片(只能做两种全局选择l3hw=yes和l3hw=fw),两种功能虽然做了区分,整体的配置导致了很多复杂的应用问题,比如如何区分三层路由和nat会话加速,这两种应用在实际使用中存在冲突,我测试的时候l3hw=yes是没有问题的,但l3hw=fw存在问题无法工作。
2、7.1beta4后的调整更加细分,除全局的设置L3-hardware-offloading=yes外,还细化到每个交换机端口的L3-hardware-offloading,而且还能控制路由条目的L3-hardware-offloading属性,这样做增加了配置复杂性,但我觉得灵活度更好,这就是RouterOS的一贯风格,“灵活性”。控制交换机端口从上面的配置介绍就可以看出,如果是一个端口配置的VLAN作为外网的wan端口关闭L3-hardware-offloading,但全局的L3-hardware-offloading=yes,代表这个端口的nat会话可以被fasttrack和nat智能算法加速。
3、我说的更深点,就是L3-hardware-offloading有两个控制层面,一个控制层面就是全局和端口的L3-hardware-offloading=yes,这个就是三层VLAN路由下发给交换芯片,也就是只做三层交换机的功能,不涉nat。第二个层面是如果有nat路由,就把三层VLAN的对外端口的L3-hardware-offloading取消,进入CPU处理,CPU再一次判断,涉及到的nat会话是否能支持交换芯片的nat加速。
4、静态路由条目数量的限制,在大量静态路由配置的情况下,超出了加速数量,可以让管理员来调整这些路由,设置那些路由可以加速,那些路由不加速,早期的华为s5700交换机低端型号限制了128条静态路由,可能是软件限制,也可能是芯片性能问题。而MikroTik官方告诉了当前芯片能处理路由器条目的数量,管理员根据这个数量自己在RouterOS调整路由加速规则,还是那句话“灵活”。
5、Dx3000和Dx2000大部分是不支持nat加速的,但三层路由是ok的,这个是芯片功能问题,限制了nat会话加速,之前我写信给官方,他们说无法保证Dx3000和Dx2000的芯片能实现L3-HW,不过现在是全部支持三层转发了!
6、从一开始RouterOS是一台路由器,交换机本来就是附属的,但基于Linux系统的RouterOS是可以实现交换机功能,现在基于Marvell的交换芯片,对于RouterOS来说是增加一个功能而已,但功能增加,还要和之前的路由配置兼容,这意味着有更加复杂的应用开发,其实就是nat会话加速问题,如果单纯的只做三层路由的硬件加速,就简单多了,可能就一条l3hw=yes就完了,CRS3xx系列就定位一个三层交换机就ok了,但MikroTik还是选择了更复杂的nat会话加速,那就是CRS3xx系列是一台将二层、三层交换机和nat路由器合体,并且能同时实现硬件加速,如此综合性的高性价比交换路由产品,估计市面上没有吧,但这样带来了极其烧脑的配置,功能多意味着配置越复杂!
CRS3xx系列出来2年了,Cloud Router Switch这个产品名称在v7.1beta4版本给转正了,不过我觉得v7正式版本的路还很长!