我想创建 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