使用Keyfile时如果没有物理连接,NetworkManager不会设置静态连接

使用Keyfile时如果没有物理连接,NetworkManager不会设置静态连接

使用 NetworkManager Keyfile 时,除非存在物理连接或我手动设置,否则不会设置设备(静态 IP 地址)nmcli connection up Onboard-NET。对于使用它的内部程序,我需要始终保持连接。

以前使用此功能时/etc/sysconfig/network-scripts/ifcfg-net0,设备会自动设置为:

TYPE=Ethernet
DEVICE=net0
NAME="Onboard NET"
HWADDR=xx:xx:xx:xx:xx:xx
IPADDR=192.x.x.x
NM_CONTROLLED=yes
ONBOOT=yes
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
PREFIX=24
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6_DISABLED=yes
IPV6INIT=no

我们可以看到,即使没有物理连接或手动命令,设备也可以使用分配的 IP 地址启动。

net0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state ***DOWN*** group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.x.x.x/24 brd 192.9.201.255 scope global noprefixroute net0
       valid_lft forever preferred_lft forever

现在使用密钥文件

将设置复制到密钥文件/etc/NetworkManager/system-connections/Onboard-NET.nmconnection::

[connection]
id=Onboard-NET
type=ethernet
interface-name=net0
autoconnect=yes # also tried =no

[ethernet]
mac-address=xx:xx:xx:xx:xx:xx

[ipv4]
address1=192.x.x.x/24
method=manual
never-default=true

[ipv6]
method=disabled
never-default=true
addr-gen-mode=stable-privacy

[proxy]

启动时,静态 IP 地址/连接不会自动启动:

net0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    altname eno1
    altname enp0s31f6

如果与另一台计算机存在物理连接,该连接将自动建立,但如果没有,该连接将保持关闭状态,直到手动建立。和nmcli connection up Onboard-NET。现在我们可以看到它已经启动了:

[amat@adt ~]$ nmcli connection up Onboard-NET
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[amat@adt ~]$ ip a
net0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state **DOWN** group default qlen 1000
    link/ether 00:01:29:ad:8f:47 brd ff:ff:ff:ff:ff:ff
    altname eno1
    altname enp0s31f6
    inet 192.x.x.x/24 brd 192.x.x.255 scope global noprefixroute net0
       valid_lft forever preferred_lft forever

其他可能有用的调试信息

  • 还有另一个连接ext0( /etc/NetworkManager/system-connections/Onboard-EXT.nmconnection),它是 dhcp,用于连接到外部互联网。这个可以正确启动
  • 设备在 udev 中重命名
  • ifcfg 方法在 CentOS 6/7/8 中有效
  • net0 的 systemd 启动消息
NetworkManager[1037]: <info>  [1668115652.0180] manager: (net0): new Ethernet device (/org/freedesktop/NetworkManager/Devices/7)
NetworkManager[1037]: <info>  [1668115652.0182] device (net0): state change: unmanaged -> unavailable (reason 'managed', sys-iface-state: 'external')
  • 使用这些内核参数:net.ifnames=0 biosdevname=0

编辑

使用 ifcfg 文件时问题仍然存在(将 NetworkManager.conf 更改为[main] plugins=ifcfg-rh

可能是一些省电配置之类的吗?我不明白为什么它不听 ONBOOT=yes

答案1

或许ignore-carrier?来自NetworkManager.conf手册页

ignore-carrier

NetworkManager指定将(部分)忽略运营商状态的设备。通常,对于支持运营商检测的设备类型(例如以太网和 InfiniBand),NetworkManager仅当运营商存在(即插入电缆)时才允许在设备上激活连接,如果运营商存在,它将停用设备下降超过几秒钟。

忽略运营商的设备将允许在该设备上激活连接,即使该设备没有运营商,前提是该连接仅使用静态配置的 IP 地址。此外,当运营商丢失时,它将允许任何活动连接(无论是静态还是动态)在设备上保持活动状态。

相关内容