在ESXi添加多个SR-IOV网卡给 VM(OP/爱快) 桥接网口后无法访问
使用环境:1. ESXi 6.7u2
2. OpenWRT R20
3. iKuai 3.5.7
硬件:
1. Intel 10 Gigabit X540-AT2 x 6
遇到的问题:
给同一个VM (OP/爱快)添加多张SR-IOV网卡,在OP/爱快 中桥接后无法访问 (VT-d,IO-MMU都已经开启,测试过单个SR-IOV网卡完全工作正常)
!!!注意不是同一个 PF物理网卡 虚拟出的 VF虚拟网卡 添加进去,而是多张 PF物理网卡 虚拟出来的 多张 VF虚拟网卡添加进去 !!!
希望解决:
在OP/爱快中将多张SR-IOV网卡桥接后也能正常使用
具体设置:
1.在ESXi中开启SR-IOV功能
https://s3.bmp.ovh/imgs/2021/09/5a99b8ff12cdaaa9.png
2.为每张网卡单独设置一个虚拟交换机(也尝试过将5个网口合并到一个虚拟交换机中,还是一样没法访问)
https://s3.bmp.ovh/imgs/2021/09/7eae2c325be2e2c5.png
3.为每个虚拟交换机配置对应的端口组
https://s3.bmp.ovh/imgs/2021/09/b1e80bf215fa5dab.png
4.给爱快添加SR-IOV网卡
https://s3.bmp.ovh/imgs/2021/09/c14532d791984e1c.png
测试结果:
1.爱快可以正常识别所有的SR-IOV网卡,但是在桥接后,只有一个网口(和管理口在同一个虚拟交换机中)可以正常访问内外网
https://s3.bmp.ovh/imgs/2021/09/ffb94c9c7a46a7eb.png
其他4个网口都是能获取的IP地址,但无法访问内外网(包括爱快后台和ESXi后台)
https://s3.bmp.ovh/imgs/2021/09/adc1c97316cb9e87.png
2.将SR-IOV网卡单独绑定一个LAN,网络可以正常访问,但只有和管理口在同一个虚拟交换机的网口可以访问ESXi后台(这个估计需要在爱快中设置一下)
https://s3.bmp.ovh/imgs/2021/09/d8d22980a0c86ad8.png
附加说明:
为什么一定要用SR-IOV?
先来看一下这两图:
使用VMNET3的表现(这里我弄错了,我也不知道Direct I/O到底起了什么作用,反正虚拟交换机和OP之间就是没有发送的流量)
https://s3.bmp.ovh/imgs/2021/09/a179b75603e26761.png
使用SR-IOV的表现
https://s3.bmp.ovh/imgs/2021/09/c899b1bb56a730df.png
总结来说就是,使用了SR-IOV后不仅处理器占用可以显著降低,网络在高负担下的表现也更加出色。
那到这里,肯定有人会说:
只将一个网口开启SR-IOV作为LAN接入到 OP / 爱快中,接着再把其余4个网口直通给OP / 爱快 不就好了吗?
EMMMMM
是的,我最开始就是这样做,结果就是
OP将直通网口和SR-IOV网口桥接到一起后,无法访问,无法访问,无法访问。但不排除是OP自己的问题
爱快也是差不多的情况。
本帖最后由 mqdlee 于 2024-8-30 17:12 编辑
此贴终结:
首先,导致 SRIOV 网卡无法在桥接的情况下工作的原因: 需要对VF进行 启用 Trust mode 和 关闭 spoof check 操作
然后,进行这项操作,在ESXi上需要安装英特尔的网卡管理工具:工具下载地址
问题就出在这个工具上,它只支持 700/800系的intel网卡,于是没法用在网络上大多数的命令进行配置
其他案例:这位网友使用的英伟达Connectx6-DX也是因为没有对应工具无法进行操作
Connectx-6 DX SRIOV ESXI Trust mode? - Adapters and Cables / Ethernet Adapter Cards - NVIDIA Developer Forums
但幸运的是,你可以尝试使用Linux系统,比如PVE,而我就是切换到PVE后,使用如下命令
# 创建指定数量的 SR-IOV 网卡
echo 4 > /sys/class/net/enp1s0f0/device/sriov_numvfs
# 让目标网卡启动
ip link set dev enp1s0f0 up
# 让目标网卡进入混杂模式,用于支持桥接
ip link set dev enp1s0f0 promisc on
# 让 VF 0 开启信任模式,关闭spoof_check
ip link set dev enp1s0f0 vf 0 mac c2:**:**:**:**:67 trust on spoof off
# 检查网卡信息
ip link show enp1s0f0
4: enp1s0f0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 38:**:**:**:**:e8 brd ff:ff:ff:ff:ff:ff
vf 0 link/ether c2:**:**:**:**:67 brd ff:ff:ff:ff:ff:ff, spoof checking off, link-state auto, trust on, query_rss on
如果你依旧想尝试在 ESXi 上进行 SRIOV网卡桥接,那可以看看这篇内容:(其实就是 27#楼说的方法)
Enabling SR-IOV for VMware | vMX Getting Started Guide for VMware | Juniper Networks TechLibrary
主要的操作是这样的,创建虚拟交换机,安全特性 全部选择接受,接着创建端口组继承虚拟交换机的安全设置,VLAN ID 设置为 4095,即为接受全部VLAN流量
在虚拟机里设置SRIOV网卡不要直接选择PCIe设备,而是选择网卡适配器,适配器类型选择SRIOV直通,然后选择一张VF网卡
最后要在虚拟机里设置一个VLAN ID,请确保要连接的虚拟机的VLAN ID保持一致,ikuai OP应该都支持配置VLAN的,Window我不熟悉,但应该也可以的
最后这里是给使用 700/800系 英特尔网卡的用户的参考内容:
估计12楼的教程就是来自这个篇内容,但里面有明确注明只适用于 英特尔 700系 网卡
Setting trust mode to use SR-IOV interface for layer-2 services on vMX in VMware ESXi (juniper.net)
博通(Vmware)官方简易教程 Modifying the vSwitch security policy is not persistent when SRIOV is enabled (broadcom.com)
第三方教程,比较详细
Set SRIOV VFs to 'Trust Mode' When Using 9 or More VLANs per PKT Interface - SBC Core 12.0.x Documentation - Ribbon Public Documentation Center (rbbn.com)
ESXCIL 命令文档
ESXCLI Commands (vmware.com)
国内论坛实践成功案例
Intel X710-AT2 ESXi SR-IOV 开启记 - 电脑讨论(新) - Chiphell - 分享与交流用户体验
就是这里我看到它的ESXi用的驱动是 i40en,而不是ixgben,才确认是真的不支持
命令如下:
# 两参数取值“8,8”是因为 X710-AT2 就两个口,准备每个口开 8 个 VFs
esxcli system module parameters set -a -m i40en -p max_vfs=8,8
# 两个PF的8个VF全部设置为信任模式
esxcli system module parameters set -a -m i40en -p trust_all_vfs=8,8
原来是通病,我还以为网卡问题,我试了好几个网卡x540和x520一样都是桥接就不行了,不桥接还能访问。x550的vf 爱快识别硬件但是不识别网口,很蛋疼。 我还试了,直接用添加pci设备,然后选择虚拟的vf,一样不行 朱朱侠 发表于 2021-9-9 11:21
我还试了,直接用添加pci设备,然后选择虚拟的vf,一样不行
直接添加VF设备是需要手动指定MAC的。
我看intel官方的SR-IOV说明图也是需要配合虚拟交换机使用,SR-IOV像是把一个 真实物理网口 虚拟成多个 虚拟网口 和虚拟交换机组合在一起,这样就可以让一个网口给多个虚拟系统使用,并且传输消耗很小。(可以想象成是一个【真实的交换机】和 虚拟系统连接到了一起) mqdlee 发表于 2021-9-9 12:16
直接添加VF设备是需要手动指定MAC的。
我看intel官方的SR-IOV说明图也是需要配合虚拟交换机使用,SR-I ...
我的搞定了,还是按照添加网卡选择sr-iov的方式。 不仅需要虚拟交换机和端口组, 还需要创建两个网口对应的虚拟网卡,这样桥接之后就能用了。昨天偶然发现桥接之后不能正确分配ip了,添加虚拟网卡后正常了。 是ESXi的虚拟机配置页面里再添加两个对应网口的虚拟网卡吗?
朱朱侠 发表于 2021-9-18 09:25 static/image/common/back.gif
我的搞定了,还是按照添加网卡选择sr-iov的方式。 不仅需要虚拟交换机和端口组, 还需要创建两个网口对应 ...
是ESXi的虚拟机配置页面里再添加两个对应网口的虚拟网卡吗?
mqdlee 发表于 2021-9-23 14:07
是ESXi的虚拟机配置页面里再添加两个对应网口的虚拟网卡吗?
是的,我的这样搞定了 朱朱侠 发表于 2021-9-24 20:27
是的,我的这样搞定了
我尝试了一下,给OP添加对应网口的虚拟网卡https://img11.360buyimg.com/ddimg/jfs/t1/198719/36/12261/347480/61615af9Eaa0c2878/8dec279724f1ccff.png
在OP中也能正确识别出全部网卡
https://img12.360buyimg.com/ddimg/jfs/t1/206950/25/4513/523896/61615afaE658c60a8/fc72d0db79f3d97e.png
但是如何在OP里绑定网卡呢?
https://img14.360buyimg.com/ddimg/jfs/t1/197407/22/12311/333062/61615af9E19e68394/11611cef0cab464a.png
无论怎么绑定都是没法让桥接到一起SR-IOV网卡可以正常访问
如果将全部网卡桥接到一块,在OP里还能看到这样的报错
https://img13.360buyimg.com/ddimg/jfs/t1/199681/7/12172/806859/61615afbEbb145fb9/f6c29ee7ecd9eb65.png
朱朱侠 发表于 2021-9-18 09:25
我的搞定了,还是按照添加网卡选择sr-iov的方式。 不仅需要虚拟交换机和端口组, 还需要创建两个网口对应 ...
你好 我理解这样的:vmx3_1口和VF_1口桥接,vmx3_2口和VF_2口桥接,再将vmx3_1口和vmx3_2口桥接,这样说不是所有网卡全部连通了?但是这样做的意义在哪里?为了使用VF网卡而再建连个vmx3网卡,那你怎么知道实际数据流量是走的VF还是vmx3口?另外这样部分流量走了VMX3和不使用VF有什么区别呢,不使用vmx3就是为了更完整的使用VF,降低vmx3对CPU的占用,但是你又建了两个,是不是反而增加了VF对CPU的占用?我只是在猜测哈,没有实际测试。
我最近也遇到这样的问题,在esxi下,将VF1和VF2分别直通到win10和群晖下面,直接就可以互相访问,同一个物理网卡下的VF用iperf3测试有5G左右的带宽,证明不需要创建vmx3桥接就可以独立、正常的使用VF的完整功能,同样,在Ikuai下单独使用VF直通或添加虚拟SRIOV网卡绑定lan口,直接无法访问,完全直通PF(即物理网口)到ikuai并绑定lan口,就可以访问ikuai的web,真的好奇怪,我认为这个是ikuai的驱动的问题,另外我遇到一个奇怪的现象,刚把VF直通进win10的时候,可以识别网卡但是显示未连接(红叉),卸载驱动重新安装就正常了;在群晖6.23中,刚手动装上VF驱动也显示未连接(无法获取IP),ssh下ifconfig eth1 up才能正常使用,为防止所有流量走eth0口,我又ifconfig eth0 down,原来的网卡下线,只保留VF网卡使用。通过这两个案例我感觉VF装进Ikuai需要UP一下,也就是上线一次,VF才能在ikuaizhong正常使用,但是ikuai中我不会操作,同样的VF搞进debian就可以直接正常使用,估计还是驱动的问题。VF进dsm7.01中直接就可以使用,因为集成了ixixgbevf网卡的驱动。我想我们应该到Ikuai官方去发帖,引起他们注意,完善驱动。对了,我仅建了一个sw0的虚拟交换机。我看B站有个sriov的视频说着PVE下要让vf网卡处于活动状态,否则在win10中需要卸载驱动重新识别才能正常使用,否则就是红叉,和我上面的情况一样,但是ESXI也不能看到是否活动,我想和这个也有关系。
另外,我还有个需求,一直没有实现:电信、联通、内网设备3组线我想通过Vlan交换机的trunk口接esxi下的PF物理网卡,再通过vlanID 区分分给PF虚拟出的VF,进IKUAI分别给WAN1、wan2、LAN,但是也一直没有实现,大家有兴趣可以一起研究一下! mqdlee 发表于 2021-10-9 17:12
我尝试了一下,给OP添加对应网口的虚拟网卡
在OP中也能正确识别出全部网卡
老哥请问您解决了吗?我好像也碰到了 如果是桥接的话,应该是工作在2层:
用于第 2 层服务的 SR-IOV 接口
要将 SR-IOV 接口用于 VMware ESXi 主机中部署的 vMX 实例上的第 2 层服务(如 VPLS、第 2 层 virtual**、第 2 层线路或桥接),您必须在英特尔网卡设置中启用信任模式并禁用欺骗检查。使用以下步骤启用信任模式并禁用欺骗检查:
安装英特尔 esxcli 插件。有关说明,请参见 VMware 知识库文章。
通过在 ESXi shell 模式下输入以下命令,验证 SR-IOV 网卡上的信任模式和欺骗检查状态:
content_copy zoom_out_map
esxcli intnet sriovnic vf get -v <vf number> -n <vmnic name>
例:
content_copy zoom_out_map
root@host:~] esxcli intnet sriovnic vf get -v 0 -n vmnic12
VF ID Trusted Spoof Check
----- ------- -----------
0 false true
启用信任模式并禁用英特尔 NIC 上的欺骗检查。
content_copy zoom_out_map
esxcli intnet sriovnic vf set -s false -t true -v <vf number> -n <vmnic name>
例:
content_copy zoom_out_map
esxcli intnet sriovnic vf set -s false -t true -v 0 -n vmnic12
Trusted mode is set to true and spoof check is set to false
content_copy zoom_out_map
esxcli intnet sriovnic vf get -v 0 -n vmnic12
VF ID Trusted Spoof Check
----- ------- -----------
0 true false
更改为信任模式和欺骗检查值后,重新启动使用 SR-IOV 接口配置的 vMX FPC。
content_copy zoom_out_map
user@host> request chassis fpc slot <number> restart
FPC 联机后,第 2 层服务开始在 SR-IOV 接口上工作。 本帖最后由 Martin213 于 2022-2-5 09:22 编辑
如果是桥接的话,应该是工作在2层:
用于第 2 层服务的 SR-IOV 接口
要将 SR-IOV 接口用于 VMware ESXi 主机中部署的 vMX 实例上的第 2 层服务(如 VPLS、第 2 层 virtual**、第 2 层线路或桥接),您必须在英特尔网卡设置中启用信任模式并禁用欺骗检查。使用以下步骤启用信任模式并禁用欺骗检查:
安装英特尔 esxcli 插件。有关说明,请参见 VMware 知识库文章。
通过在 ESXi shell 模式下输入以下命令,验证 SR-IOV 网卡上的信任模式和欺骗检查状态:
esxcli intnet sriovnic vf get -v <vf number> -n <vmnic name>
例:
root@host:~] esxcli intnet sriovnic vf get -v 0 -n vmnic12
VF ID Trusted Spoof Check
----- ------- -----------
0 false true
启用信任模式并禁用英特尔 NIC 上的欺骗检查。
esxcli intnet sriovnic vf set -s false -t true -v <vf number> -n <vmnic name>
例:
esxcli intnet sriovnic vf set -s false -t true -v 0 -n vmnic12
Trusted mode is set to true and spoof check is set to false
esxcli intnet sriovnic vf get -v 0 -n vmnic12
VF ID Trusted Spoof Check
----- ------- -----------
0 true false
更改为信任模式和欺骗检查值后,重新启动使用 SR-IOV 接口配置的 vMX FPC。
user@host> request chassis fpc slot <number> restart
FPC 联机后,第 2 层服务开始在 SR-IOV 接口上工作。 Martin213 发表于 2022-2-5 09:20
如果是桥接的话,应该是工作在2层:
用于第 2 层服务的 SR-IOV 接口
要将 SR-IOV 接口用于 VMware ESXi...
太感谢了,但目前我还没时间去验证,先提前感谢大佬的回复。有空我再去测试一次,后续有问题还望打扰大佬了 有蛋糕了?