hank9999部落格

写点奇怪的东西

R86S 折腾日记三 | 强制让 PVE 网页管理支持在 vlan 上 bonding

hank9999's Avatar 2024-10-19

  1. 1. 0x00 前言
  2. 2. 0x01 手动修改配置测试
  3. 3. 0x02 修改 PVE 支持
  4. 4. 0x03 结语

0x00 前言

我的路由器带有双 LAN 聚合功能,我实测后发现是 Linux bonding 中的 balance-rr 模式
但是我的路由器只有千兆网口,我的交换机跟 R86S 之前是万兆速率,这不正好,我在交换机上划个 vlan,PVE 上直接 bonding
然后 PVE 在创建 bond 接口时,报错了 bond 'bond0' - wrong interface type on slave 'enp4s0.3003' ('vlan' != 'eth or bond') (500)

0x01 手动修改配置测试

理论上来说,我干过这事,我在 RouterOS 中,创建两个 vlan,然后再 bonding,速率确实可以翻倍
我考虑到,可能是 PVE 管理网页的问题,我在 /etc/network/interfaces 中手动添加了 bond0 接口

1
2
3
4
iface bond0 inet manual
bond-slaves enp4s0.3003 enp4s0.3004
bond-miimon 100
bond-mode balance-rr

然后在网桥的 bridge-ports 里把 bond0 加进去,重载 ifreload -a
嗯看着一切正常,测速,也正常,CPU 占用率也正常

0x02 修改 PVE 支持

注意!vlan 上 bonding 没有经过 PVE 官方检验,USE AT YOUR OWN RISK,后果自负

那目前的问题就明确是,应该是 PVE 网页管理在配置的时候有检查
那就在 prel 目录直接搜一下报错

1
2
3
root@pve-home:~# cd /usr/share/perl5
root@pve-home:/usr/share/perl5# grep -lr "wrong interface type on slave"
PVE/INotify.pm

很显然就是这个文件了,干他
在这个文件里发现了一段这样的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# check bond
foreach my $iface (keys %$ifaces) {
my $d = $ifaces->{$iface};
next if !($d->{type} eq 'bond' && $d->{slaves});

my $bond_primary_is_slave = undef;
foreach my $p (split (/\s+/, $d->{slaves})) {
my $n = $ifaces->{$p};
$n->{autostart} = 1;

die "bond '$iface' - unable to find slave '$p'\n" if !$n;
die "bond '$iface' - wrong interface type on slave '$p' ('$n->{type}' != 'eth or bond')\n"
if ($n->{type} ne 'eth' && $n->{type} ne 'bond'); # 这里就是校验的地方

$check_mtu->($ifaces, $iface, $p);
$bond_primary_is_slave = 1 if $d->{'bond-primary'} && $d->{'bond-primary'} eq $p;
}
die "bond '$iface' - bond-primary interface is not a slave" if $d->{'bond-primary'} && !$bond_primary_is_slave;
}

可以看到校验的关键if是 if ($n->{type} ne 'eth' && $n->{type} ne 'bond');
然后把 vlan 类型加在后面,在 ne 'bond' 后面添加 && $n->{type} ne 'vlan'
改成这样

1
if ($n->{type} ne 'eth' && $n->{type} ne 'bond' && $n->{type} ne 'vlan');

保存,然后重启 pvedaemon

1
service pvedaemon restart

(๑•̀ㅂ•́)و✧,可以用了

0x03 结语

这篇文章的主要思路跟在 EMMC 上安装 PVE 很像,都是修改 PVE 的脚本代码,整体思路还是比较清晰的。

最后希望这篇博文能够为你在配置自己的 HomeLab/R86S/PVE/bonding/vlan 时,提供一些帮助。

本文作者 : hank9999
版权声明 :本站所有文章除特别声明外,均采用 BY-NC-SA 4.0 许可协议。转载请注明出处!
本文链接 : https://blog.hank.ltd/r86s-logbook-3-force-pve-manager-web-support-bonding-on-vlans/