解决Debian 11软路由I225-V网卡VLAN无效问题

问题

最近给服役3年的J3455+RTL8111的软路由进行了升级,换成了N5105+I225V的新产品。直接把之前的旧2.5寸SATA迁移过去,Debian 11宿主机系统就正常启动了,OpenWRT虚拟机也正常启动了。本以为一切正常,却发现VLAN接口无法正常使用,经过排查,发现是I225-V网卡没能转发VLAN数据包。这该如何处理?

探索

尝试调整网卡配置

首先想到,是不是网卡驱动有配置项来控制VLAN是否进行转发呢?
搜索一番,发现没有相关的配置。使用ethtool -k | grep -v fixed查看所有功能,虽然也有vlan的配置,但是只是关于是否开启vlan硬件加速的配置。尝试开关后也没有效果。看来这条路是不通了。

尝试更换Intel官方网卡驱动

之前有遇到过,Intel的千兆网卡,使用Linux内核提供的igb驱动存在一些问题,需要使用Intel官方提供的igb驱动。搜了下I225-V的Intel官方驱动,不料Intel不提供2.5G网卡的Linux驱动,只给了Windows版的。有人在Vmware论坛问,支持人员也是回复说去Linux内核的github那里去找。看来这条路也是不通了。

尝试更新Linux内核及igc驱动

看了下当前的驱动没有显示版本号,也只能确认是igc驱动。内核版本是Debian 11标准的5.10。于是我先去找了下最新的Linux igc驱动,搜索了下vlan关键字,其中有一部分让我注意起来

按照这个代码的说明,看起来应该是支持802.1Q的VLAN功能的。但是我的版本为啥不行呢?转而搜索下我目前5.10的内核代码中igc驱动部分,结果确实没有找到8021Q相关文本。那看来我需要更新内核版本,很可能就能解决问题了。

经过搜索,发现在5.14版本内核中,引入了关于启用8021Q的代码,具体的commit连接是igc: Enable HW VLAN Insertion and HW VLAN Stripping

因此接下来的问题就是如何给Debian 11更新内核到不低于5.14的版本了。首选当然还是使用Debian自己提供的linux-image-amd64的二进制包,但是版本要高一些。经过搜索,我发现bullseye-backports提供的linux-image-amd64已经更新到6.0了,符合要求,因此我在/etc/apt/sources.list中启用了bullseye-backports。

然后安装bullseye-backports的linux-image-amd64

然后把网卡firmware等都更新到backports版本

最后重启系统,uname -a确认内核版本号已经升级至6.0.0

接下来在OpenWRT 22.03虚拟机中,重新创建VLAN接口,发现可以成功接收到数据包了。

确认

最后确认基于VLAN的网络和无VLAN的网络都可以正常分别进行DHCP。发现基于底层基础网卡创建VLAN,似乎DHCPv4不能正常使用,基于桥接后的br-lan再创建VLAN接口,就正常了。

最后确认了一下实际速度。家中是千兆联通,使用speedtest.net实际测速下行922mbps,上行36mbps,符合预期。基于VLAN的网络和无VLAN的网络在无线AP上均正常使用,问题解决。

后记

想到一个问题。如果使用给I225-V网卡的机器装裸OpenWRT,我看了下22.03已经是现在最新的稳定版了,其内核版本是5.10,所以一样很可能遇到无法使用VLAN接口的问题。所以目前的方法,要么升级其内核到不低于5.14的版本,要么使用虚拟机来转发一次。看起来在性能可用的情况下,基于虚拟机的OpenWRT方案其实灵活性和可靠性是更高的。

再一个,我发现I225-V网卡有4路硬队列,于是我给虚拟机的virtio-net网络接口也开了4路队列,这样一来,即使是千兆转发,vhost进程实际CPU开销也不会特别高,即网络瓶颈不在网卡转发这里了。如果后续再更换到2.5G网口的联通光猫,实际应当就可以跑到超过1000mbps的带宽了。

发表评论

为防机器,验证码请直接输入4个数字1

*