AI摘要
飞牛系统内置 Open vSwitch(OVS),可以把多余的物理网口直接桥接进主网桥,让它们和主网口共享同一个二层域,相当于多了几个交换机口,不需要额外的硬件。
本文基于单额外网口的环境,将 enp4s0 桥接进 OVS 主网桥,并通过 NetworkManager 的 dispatcher 脚本让配置在重启后自动生效。
确认网口名称和 OVS 状态
先去飞牛的系统设置 → 网络设置里确认网口名称,在主网口上开启 OVS。开启后该网口会出现一个以 -ovs 结尾的新网桥名称。
SSH 登录飞牛,切换到 root,查看当前 OVS 网桥信息:
ovs-vsctl show输出示例:
84d44291904-...
Bridge 84d44291904-ovs
Port eno1
Interface eno1
Port 84d44291904-ovs
Interface 84d44291904-ovs
type: internal
ovs_version: "3.1.0"注意这里的网桥名是飞牛自动生成的 UUID 风格名称(如 84d44291904-ovs),不是 eno1-ovs 这样的可读名称。后续脚本里用到的就是这个名称,以 ovs-vsctl show 的实际输出为准。
临时桥接(重启失效)
如果只是临时测试,直接执行:
ovs-vsctl add-port 84d44291904-ovs enp4s0立即生效,但飞牛系统重启后配置会消失(截至 0.9.9 版本)。要让它持久生效,需要用下面的脚本方案。
用 dispatcher 脚本让配置开机自动生效
飞牛使用 NetworkManager 管理网络,它支持在网络状态变化时触发脚本,脚本放在 /etc/NetworkManager/dispatcher.d/ 目录下。思路是:监听主网桥进入 up 状态的事件,触发后自动执行 add-port 命令。
进入目录,新建脚本:
cd /etc/NetworkManager/dispatcher.d/
nano 90-portstobridge脚本内容如下:
#!/bin/bash
# 判断第一个参数是否是目标网桥,第二个参数是否是 up
if [ "$1" = "84d44291904-ovs" ] && [ "$2" = "up" ]; then
ovs-vsctl add-port 84d44291904-ovs enp4s0
fi将 84d44291904-ovs 替换为 ovs-vsctl show 里看到的实际网桥名,enp4s0 替换为需要桥接的网口名。
保存后赋予执行权限:
chmod +x 90-portstobridge脚本命名为 90-portstobridge,90- 开头是为了让它在 01-ifupdown 等系统脚本执行完之后再运行——NetworkManager 按文件名字母顺序调用这个目录里的脚本,数字越大越靠后,可以确保 OVS 网桥完全初始化后再执行端口绑定。
重启 NetworkManager 服务验证是否生效:
systemctl restart NetworkManager重新连接后再次查看网桥状态:
ovs-vsctl showenp4s0 出现在网桥端口列表里即表示生效。
取消桥接
不再需要时,手动删除端口:
ovs-vsctl del-port 84d44291904-ovs enp4s0同时删掉脚本,否则下次重启还会自动重建:
rm /etc/NetworkManager/dispatcher.d/90-portstobridge最后去飞牛后台把对应网口的 OVS 开关关掉即可。