ESXi + openwrt折腾软路由和万兆软交换机的一些小坑

Why 软交换机?

因为需要部署万兆电口的内网,然而目前的万兆交换机多为光口,加上光模块成本很可能得近2000。

我希望这两条紫色的线是万兆的

故想到用一台几百块的x86机器+一张几百块的intel x540双万兆电口网卡,在OS中桥接,做成软交换,同时也桥接若干板载的千兆网口,用来与原有的千兆有线内网连通。再同时,如果在这台机器上做虚拟化,上面的虚拟机也可以享受到万兆网络。事实证明,我还是simple young naive

ESXi vSwitch的坑

ESXi vSwitch即“虚拟交换机”,如果不部署vCenter server的话只能创建“标准vSwitch”,然而这确实是个“虚拟机的交换机”,对于物理端口并没有交换功能,就算你给vSwitch添加多个物理端口作为“上行链路”,也只是负载均衡、故障转移的bond,而非软交换机的bridge

据我所知,ESXi的单机WebUI并没有任何能创建物理端口bridge的地方,而为了一个交换功能去装几十个G的vCenter server有些舍本逐末,所以就有了让VM实现交换的折中方案。

VM负责交换时不同路径的效率问题

这里使用的是的E3-1220L,这是一颗20w TDP、2C4T、2.2~3.4GHz的处理器,作为基准。

这里把两张万兆网卡都直通给了VM,一个openwrt的VM。

首先是场景1:标准的软交换的路径,效率尚可:

外部设备A <--> 万兆网口1 <--> VM <--> 万兆网口2 <--> 外部设备B

但如果是下面这种场景2,外部设备到路由器上另一个VM时,效率就感人了:

外部设备A <--> 万兆网口1 <--> VM <--> 虚拟网卡 <--> ESXi虚拟交换机 <--> 虚拟网卡 <--> 目标VM

经测试,这种情况下CPU 100%只能跑到5Gbps左右。

而如果两张万兆网卡不使用直通的方式,场景2的效率会少很多,但场景1由于要多经过两张虚拟网卡和ESXi虚拟交换机,效率会更感人。

解决方案的话,目前考虑用Proxmox VE替代ESXi,有待测试。

openwrt镜像种类的选择

x64的openwrt镜像,有和硬路由器上类似的SquashFS + overlay的根分区,或者是直接一个ext4的根分区,这里建议选择第二种,不然扩容比较麻烦。

例如图中的第一个

作者:WuSiYu

学生,Web开发者,智能硬件&IOT爱好者

8条评论

    1. ESXi上行链路只是bond而非交换机功能的bridge,大概设计上就没有在两个物理网口之间的交换功能。所以要么让虚拟机负责交换,要么换Proxmox VE吧。

    1. 洋垃圾x79的E5还是能跑满万兆的,不过现在万兆硬交换机也有便宜的了,直接上硬交换机也是个合理的选择。

    1. 如果软路由上有VM到HOST的需求的话SR-IOV就好太多了,但印象中不过分套娃,两个PF接两台实机能效应该还撑得住。
      套很多层,那就吃不消了。
      ESXi也不是特别有趣的东西,我反正已经直接用libvirt管理QEMU就完事了。
      懒得的折腾其他了。

      1. 确实有SR-IOV就没这问题了,届时网卡内部就会由硬件实现交换,自然没有效率问题了,可惜不是所有机器都支持。
        ESXi的优势主要还是简便省事,libvirt我现在也在用,配合的cockpit-machine面板易用性一般,感觉缺少一个功能完全的Web面板。

    2. 确实有SR-IOV效果会好很多,但是要是有多个网口的话就很难受了。
      比如6个网口的主板,将它们全部启动SR-IOV,添加入OP或iKuai中,无论是vmxnet3网卡还是直通网卡,一旦SR-IOV网卡和其他网卡桥接在一起,就会无法访问,导致我非常头疼。
      详细看这篇内容:《在ESXi添加多个SR-IOV网卡给 VM(OP/爱快) 桥接网口后无法访问 》
      https://www.right.com.cn/forum/thread-5626188-1-1.html

WuSiYu进行回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注