NetworkManager 和 lo 接口的别名成为 team0 的别名

NetworkManager 和 lo 接口的别名成为 team0 的别名

我想创建 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 但没有任何变化

答案1

在您的情况下,当调用 initscripts' 时,ifup它仅调用nmcli connection up.这意味着,在这些情况下,除了调用 NetworkManager 之外,initscripts 不会执行任何相关操作。

无论如何,initscripts 支持“别名”,它基本上是附加的 IP 地址。这些是带有后缀的 ifcg 文件:0。我想,如果您使用普通的初始化脚本,这个 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 不支持的别名有关。

答案2

我找到了一个很好的解决方案,而不是使用不适用于此别名的 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 

相关内容