背景
我有一个运行 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
按照我的意愿进行了报告。但是,一段时间后,它会自动更改为默认的 qdiscs (fq_codel
和mq
)。
我尝试将他们的 qdisc 更改为htb
多次,并发出ip link
以检查它们是否正在更改。他们每次都在很短的时间后更改为默认的 qdisc。
问题
如何将eno1
和的 qdisc 永久更改enp4s0
为htb
. 是什么导致它们在短时间内重置为默认的 qdisc?
我会回答我的问题,因为我已经解决了这个问题
发生这种情况的原因可能是 NetworkManager(或其他一些进程)正在控制接口。他们定期重置接口配置。要解决问题:
managed
检查NetworkManager正在使用哪些接口:nmcli dev status
如果测试接口在上述命令的输出中列为
managed
,那么它们是由 NetworkManager 控制的。否则,它们将被列为unmanaged
。如果它们被列为managed
,那么我们有两个选择:managed
:sudo nano /etc/NetworkManager/NetworkManager.conf
将以下行添加到conf
文件中:将 mac 地址替换为测试接口的 mac 地址。在较新版本的 NetworkManager 上,我们可以使用接口名称来执行此操作:
重启网络管理器:
检查接口现在是否不受管理:
nmcli dev status
停止当前会话(它将在下次启动时再次启动):
systemctl stop NetworkManager
或禁用 NetworkManager(默认情况下它不会在下次启动时重新启动):
systemctl disable NetworkManager
如果它们未在 NetworkManager 中列为托管,则它们可能由 dhclient 租用。要检查:
sudo cat /var/lib/dhcp/dhcpd.leases
如果接口被 dhclient 租用,那么它将在输出中列出。如果是,要么找到dhclient的PID并将其杀死,要么编辑dhclient的配置文件并排除测试接口。