Networkmanager

NetworkManager 和 lo 介面的別名變成了 team0 的別名

  • August 6, 2021

我想創建一個lo介面的別名(我需要它作為keepalived的VIP)。但是網路管理器似乎會產生問題。我已經創建了這個文件

/etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
IPADDR=10.2.0.4
NETMASK=255.255.255.255
BROADCAST=10.2.0.255
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=yes
NAME=lo:0

然後我設置連接

ifup lo:0

結果是一場災難

team0              8c1d7e93-389b-4f61-b33d-ab9b6ca634b1  team      team0  
lo:0               54af739a-9533-7b7b-8fcc-691e69842b36  ethernet  enp1s0 
team1              af58780b-b280-49cf-b540-b55e49b2c52f  team      team1  
team-slave-enp7s0  b221675e-9604-4051-967e-a98b098c823d  ethernet  enp7s0 
team-slave-enp8s0  f8711dde-29bc-442b-aedd-2005888cf314  ethernet  enp8s0 
team-slave-enp9s0  67983ded-870e-4e5a-a284-9cfbcb6f1eb8  ethernet  enp9s0 
team-slave-enp1s0  9bea1e34-a555-450c-9d0e-10bad2ee99e9  ethernet  --    

如您所見,team0(enp1s0) 的從屬設備已停用,lo:0 成為 team0 的從屬設備(原文如此!)。如果我刪除 lo:0 全部返回 ok

ifdown lo:0

nmcli conn show

team0              8c1d7e93-389b-4f61-b33d-ab9b6ca634b1  team      team0  
team1              af58780b-b280-49cf-b540-b55e49b2c52f  team      team1  
team-slave-enp1s0  9bea1e34-a555-450c-9d0e-10bad2ee99e9  ethernet  enp1s0 
team-slave-enp7s0  b221675e-9604-4051-967e-a98b098c823d  ethernet  enp7s0 
team-slave-enp8s0  f8711dde-29bc-442b-aedd-2005888cf314  ethernet  enp8s0 
team-slave-enp9s0  67983ded-870e-4e5a-a284-9cfbcb6f1eb8  ethernet  enp9s0 

我也嘗試將其重命名為 lo:10 lo:20 但沒有任何改變

我找到了一個很好的解決方案,而不是使用不適用於此別名的 NetworkManager 我使用舊的良好 rc.local 腳本和 ip 命令在這種情況下,我需要一個虛擬 IP 地址(在 keepalived proxy1 和 proxy2 上配置)和也是“綁定”到介面 lo 作為兩個真實伺服器上的別名,兩個 arp_ignore 是必要的,否則會發生奇怪的網路問題。

vim /etc/rc.d/rc.local
#!/bin/bash

start() {
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
ip addr add 10.2.0.4/32 dev lo label lo:0
}

stop() {
echo stop
}


restart() {
stop
start
}

case "$1" in
'start')
 start
 ;;
'stop')
 stop
 ;;
'restart')
 restart
 ;;
*)
 echo "usage: $0 start|stop|restart"
esac
chmod 755 /etc/rc.d/rc.local 

在您的情況下,當呼叫 initscripts’ 時ifup,它僅呼叫nmcli connection up. 這意味著,在這些情況下,initscripts 不做任何相關的事情,除了呼叫 NetworkManager。

無論如何,initscripts 支持“別名”,它基本上是額外的 IP 地址。這些是帶有:0後綴的 ifcg 文件。我猜,如果你使用普通的 initscripts,這個 ifcfg- 文件可能會起作用。這意味著,如果您NM_CONTOLLED=no完全設置或禁用 NetworkManager。

NetworkManager 並不真正支持這樣的別名。它支持連接配置文件(基本上對應於正常 ifcfg 文件),並且每個配置文件支持多個 IP 地址。但是你不能將一個配置文件分成多個部分,就像 initscripts 的別名一樣。所以,我猜文件名中的這個冒號會混淆 NetworkManager。

initscripts 文件格式似乎不是那麼容易理解。例如,看到該文件,我不清楚 NetworkManager 將如何解釋該文件。但最後重要的是對文件的解釋。看nmcli connection show lo:0。然後應該清楚 NetworkManager 的行為方式。我認為原因是 Networkmanager 認識到這是ifcfg-lo文件的別名,但別名 ifcfg 文件無法定義設備名稱。同時,ifcfg-lo用於回送設備,始終不受 NetworkManager 管理。

這可能是 NM 中的一個錯誤,與嘗試定義 NetworkManager 不支持的別名有關。

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