背景
我有一个运行 Ubuntu 的系统,它有两个界面eno1
和enp4s0
.我使用以下命令创建了 OVS 桥:
ovs-vsctl add br s1
我使用以下命令将两个物理接口添加eno1
到enp4s0
网桥中:
ovs-vsctl add-port s1 eno1
ovs-vsctl add-port s1 enp4s0
我验证了端口是使用以下命令添加的:
ovs-ofctl show s1
要检查附加到两个接口的排队规则,请使用:
ip link
附加到接口的排队规则是:
eno1: fq_codel
enp4s0: mq
我想将附加到它们的 qdisc 更改为htb
.所以我使用以下方法在两个界面上更改了它们:
tc qdisc add dev eno1 root handle 1: htb default 12
tc qdisc add dev enp4s0 root handle 1: htb default 12
问题
在发出将两个接口的 qdisc 更改为 的命令后htb
,我使用 验证了它是否确实已更改ip link
。最初,他们都htb
按照我的意愿进行了报告。但是,一段时间后,它会自动更改为其默认 qdisc(fq_codel
和mq
)。
htb
我尝试多次更改它们的 qdisc ,并发出ip link
检查它们是否正在更改。他们每次都会在很短的时间后更改为默认的 qdisc。
问题
eno1
如何将和的 qdisc 永久更改enp4s0
为htb
.是什么导致它们在短时间内重置为默认 qdisc?
答案1
既然我已经解决了问题,我会回答我的问题
发生这种情况是因为 NetworkManager(或其他进程)可能正在控制该接口。他们定期重置接口配置。要解决这个问题:
检查managed
NetworkManager 正在使用哪些接口:
nmcli dev status
如果测试接口在上述命令的输出中列为managed
,则它们由 NetworkManager 控制。否则它们将被列为unmanaged
.如果它们被列为managed
,那么我们有两个选择:
- 选项A:编辑 NetworkManager 配置文件并添加要从
managed
NetworkManager 中排除的接口:
sudo nano /etc/NetworkManager/NetworkManager.conf
将以下行添加到conf
文件中:
[keyfile]
unmanaged-devices=mac:00:11:22:33:44:55;mac:66:77:88:99:00:aa
将 mac 地址替换为测试接口的 mac 地址。在较新版本的 NetworkManager 上,我们可以使用接口名称来执行此操作:
[keyfile]
unmanaged-devices=interface-name:eno1,interface-name:enp4s0
重新启动网络管理器:
systemctl stop NetworkManager
systemctl start NetworkManager
检查接口现在是否不受管理:
nmcli dev status
- 选项B:停止网络管理器。
停止当前会话(它将在下次启动时再次启动):
systemctl stop NetworkManager
或者禁用 NetworkManager(下次启动时默认情况下不会再次启动):
systemctl disable NetworkManager
如果它们未在 NetworkManager 中列为受管理,则它们可能由 dhclient 租用。要检查:
sudo cat /var/lib/dhcp/dhcpd.leases
如果 dhclient 正在租用该接口,则它将在输出中列出。如果是,要么找到 dhclient 的 PID 并将其杀死,要么编辑 dhclient 的配置文件并排除测试接口。