Network-Interface

更改為 htb 後 qdisc 重置

  • January 12, 2020

背景

我有一個執行 Ubuntu 的系統,它有兩個介面eno1enp4s0. 我使用以下方法創建了一個 OVS 網橋:

ovs-vsctl add br s1

我使用以下方法添加了兩個物理介面eno1enp4s0網橋:

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_codelmq)。

我嘗試將他們的 qdisc 更改為htb多次,並發出ip link以檢查它們是否正在更改。他們每次都在很短的時間後更改為預設的 qdisc。

問題

如何將eno1和的 qdisc 永久更改enp4s0htb. 是什麼導致它們在短時間內重置為預設的 qdisc?

我會回答我的問題,因為我已經解決了這個問題

發生這種情況的原因可能是 NetworkManager(或其他一些程序)正在控制介面。他們定期重置介面配置。要解決問題:

managed檢查NetworkManager正在使用哪些介面:

nmcli dev status

如果測試介面在上述命令的輸出中列為managed,那麼它們是由 NetworkManager 控制的。否則,它們將被列為unmanaged。如果它們被列為managed,那麼我們有兩個選擇:

  • **選項 A:**編輯 NetworkManager 配置文件並添加介面以從 NetworkManager 中排除managed

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:停止 NetworkManager。

停止目前會話(它將在下次啟動時再次啟動):

systemctl stop NetworkManager

或禁用 NetworkManager(預設情況下它不會在下次啟動時重新啟動):

systemctl disable NetworkManager


如果它們未在 NetworkManager 中列為託管,則它們可能由 dhclient 租用。要檢查:

sudo cat /var/lib/dhcp/dhcpd.leases

如果介面被 dhclient 租用,那麼它將在輸出中列出。如果是,要麼找到dhclient的PID並將其殺死,要麼編輯dhclient的配置文件並排除測試介面。

引用自:https://unix.stackexchange.com/questions/561423