AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 760738
Accepted
frankfalse
frankfalse
Asked: 2023-11-06 16:20:51 +0800 CST2023-11-06 16:20:51 +0800 CST 2023-11-06 16:20:51 +0800 CST

同一以太网接口的多个 NetworkManager 连接配置文件并不总是正常工作

  • 772

我在 Linux 发行版中使用 3 个 NetworkManager 连接配置文件,所有连接配置文件都引用相同的以太网接口:enp3s0。我正在使用这些连接来管理:

  • 默认静态 IP 配置
  • 设置新的静态 IP 配置
  • 请求 DHCP 地址

在问题的其余部分中,我将使用术语“连接”来表示术语“连接配置文件”。

要更改以太网配置,我会更改连接的优先级,因此,如果我想启用默认静态 IP 配置,我会设置高于静态 IP 配置和 DHCP 配置的优先级。请阅读问题后续部分的“设置 3 个连接的属性”
段落,以获取有关连接优先级设置的详细信息。

问题

如果我在启动时通过由systemd服务启动的 bash 脚本创建连接,则一切正常,但如果我在启动完成后执行 bash 脚本,则 NetworkManager 及其连接配置文件无法正确管理 IP 配置。转到问题末尾的“问题”段落以获取错误的详细描述。

问题的其余部分提供了理解问题所需的所有详细信息。
我对问题的长度表示歉意,但需要很多信息。


创建 3 个 NetworkManager 连接配置文件

为了创建连接,我使用nmcli如下所示的命令:

# for default static
nmcli c add ifname enp3s0 type ethernet con-name ethernet_default_ipstatic
# for ethernet_ipstatic
nmcli c add ifname enp3s0 type ethernet con-name ethernet_ipstatic
# for ethernet_dhcp
nmcli c add ifname enp3s0 type ethernet con-name ethernet_dhcp

执行完路径中的前面的命令后/etc/NetworkManager/system-connections,将出现 3 个文件,名为:

  • ethernet_default_ipstatic.nmconnection
  • ethernet_ipstatic.nmconnection
  • ethernet_dhcp.nmconnection

设置 3 个连接的属性

前面的命令创建了 3 个具有默认属性的连接,因此创建它们后需要设置它们的属性。nmcli为了这个目标,我仍然使用如下所示的命令。

对于ethernet_default_ipstatic连接设置以下属性:

nmcli con mod ethernet_default_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv6.method disabled

上一个命令为连接设置以下属性:

  • ipv4.method = 手动(此设置 IP 静态而不是 DHCP)
  • IP 地址 192.168.1.1,网络掩码 255.255.255.0(无网关)
  • IPV6 已禁用
  • 自动连接属性保持默认 yes
  • 优先级属性保持默认 0

对于ethernet_ipstatic属性是:

nmcli con mod ethernet_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv4.gateway 192.168.1.100 ipv4.may-fail no ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1

上一个命令为连接设置以下属性:

  • ipv4.method = 手动(此设置 IP 静态而不是 DHCP)
  • IP地址192.168.1.1,网络掩码255.255.255.0,网关192.168.1.100
  • IPV6 已禁用,自动连接否,优先级 -1

对于ethernet_dhcp属性是:

nmcli con mod ethernet_dhcp ipv4.method auto ipv4.addresses '' ipv4.gateway '' ipv4.may-fail no ipv4.dhcp-timeout 20 ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1 connection.autoconnect-retries 3

上一个命令为连接设置以下属性:

  • ipv4.method = auto(设置 DHCP 而不是静态 IP 地址)
  • IP地址'',网关''
  • IPV6 已禁用,自动连接否,优先级 -1

默认配置

通过前面的命令,连接ethernet_default_ipstatic比其他连接具有优先级,因此以太网接口enp3s0配置有 IP static 192.168.1.1/24。

nmcli由服务执行命令

nmcli如果我通过以下服务 ( ) 在启动时执行先前的命令,则一切正常my_custom_nm_service.service:

[Unit]
Description=Init NetworkManager Ethernet Connections
Requires=NetworkManager.service
After=NetworkManager.service
Before=network.target

[Service]
Type=oneshot
ExecStart=/home/<username>/script_services/init_connections.sh
User=<username>

[Install]
WantedBy=multi-user.target

其中init_connections.sh执行之前的nmcli命令。

笔记。在单元文件中注意选项的存在:

  • 需要=NetworkManager.service
  • 之后=NetworkManager.service
  • 之前=network.target

问题

如果启动完成后我通过命令删除所有连接,nmcli con del然后执行脚本,init_connections.sh我将获得系统的不可预测的 IP 配置。
发生的典型错误配置如下:

  • 活动连接(由nmcli con命令显示)ethernet_default_ipstatic因此系统应具有静态 IP 地址192.168.1.1/24
  • 但系统已通过 DHCP 服务器获取 IP 地址

init_connections.sh当服务执行脚本时,它在 network.target 之前执行,但老实说,我不知道这种差异对于理解问题是否重要。

systemd
  • 1 1 个回答
  • 69 Views

1 个回答

  • Voted
  1. Best Answer
    frankfalse
    2023-11-06T22:46:10+08:002023-11-06T22:46:10+08:00

    我发现问题:要正确设置默认配置,我需要执行nmcli con up如下命令:

    nmcli con up "ethernet_default_ipstatic" iface enp3s0
    

    正如这篇文章中也指出的那样。

    笔记。此时此刻,对我来说,了解为什么脚本的执行init_connections.sh在服务启动时运行良好并不重要my_custom_nm_service.service。我真正感兴趣的是在启动过程结束时运行脚本。


    为了完整起见,我编写了测试步骤。

    1)删除服务

    my_custom_nm_service.service我已禁用启动脚本执行的服务init_connections.sh

    2)删除所有连接

    启动完成后,我通过以下脚本删除了所有连接(delete_connections.sh):

    nmcli c del ethernet_default_ipstatic
    nmcli c del ethernet_ipstatic
    nmcli c del ethernet_dhcp
    

    3)创建3个连接:出现故障

    执行脚本init_connections.sh:

    nmcli con add ifname enp3s0 type ethernet con-name ethernet_default_ipstatic
    nmcli con mod ethernet_default_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv6.method disabled
    nmcli con add ifname enp3s0 type ethernet con-name ethernet_ipstatic
    nmcli con mod ethernet_ipstatic ipv4.method manual ipv4.addresses 192.168.1.1/24 ipv4.gateway 192.168.1.100 ipv4.may-fail no ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1
    nmcli con add ifname enp3s0 type ethernet con-name ethernet_dhcp
    nmcli con mod ethernet_dhcp ipv4.method auto ipv4.addresses '' ipv4.gateway '' ipv4.may-fail no ipv4.dhcp-timeout 20 ipv6.method disabled connection.autoconnect no connection.autoconnect-priority -1 connection.autoconnect-retries 3
    

    执行脚本后,我的Linux系统出现了问题中描述的问题:

    • nmcli con命令告诉活动连接是ethernet_default_ipstatic(因为它具有更高的优先级)
    • IP 地址已由 DHCP 服务器分配

    4)解决方案:执行nmcli con up

    解决办法是执行命令:

    nmcli con up "ethernet_default_ipstatic" iface enp3s0
    

    之后接口enp3s0就有默认的IP地址

    • 1

相关问题

  • journalctl 中的区分级别

  • 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _

  • systemd:如何在服务启动时运行脚本,而不编辑服务定义

  • 使用 systemd 看门狗支持重新启动应用程序

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve