Linux 上的NetworkManager示例

2023-11-13

如果您是一位经验丰富的系统管理员,并且专注于网络管理,那么您可能已经听说过NetworkManager

NetworkManager于 2004 年发布,由 Red Hat 开发,是一组不同的工具,主要是接口,旨在促进系统上的网络管理。

如果您想打开网络适配器,您可能会使用NetworkManager来实现。

同样,如果您想编辑现有网卡以更改分配给它的 IP 地址,您将再次使用NetworkManager。

在本教程中,我们将介绍如何使用NetworkManager套件中的各种工具来轻松管理您的网络。

在列出套件中嵌入的工具(nmcli、 nmtui、 nm-applet)之后,我们将查看NetworkManager的实际用例列表。

NetworkManager架构

在深入研究NetworkManager的功能之前,让我们首先描述它的架构以及它如何与内核相关模块进行通信。

NetworkManager API

要理解的第一个概念是NetworkManager作为API 来配置主机上的网络接口。

但是,NetworkManager不能单独工作:它是在称为网络套接字的端点上接收网络消息的过程的一部分。

网络套接字由连接到以太网电缆的以太网 NIC 物理表示,以便开始通过网络共享数据。

当插入以太网电缆时,udev 模块首先识别它,该模块将向NetworkManager发送信号以通知已插入新电缆。

通过这种方式,NetworkManager能够保持连接,但也能够向其他应用程序公开网络可用性。

如果您使用的是 Firefox,并且如果 Firefox 需要知道网络连接的状态,它可以通过 DBus 查询NetworkManager以获取此信息。

NetworkManager实际上是一个网络 API,它将提供有关可用网卡、有线或无线网络的详细信息。

它还将提供一种使用专用配置文件配置网卡和接口的简单方法。

NetworkManager与 ifupdown

历史上,Linux 操作系统使用不同的方式管理网络接口,主要使用位于 /etc/network 的配置文件。

在这个目录中,可以使用一个文件来配置网络接口:interfaces 文件。

但是,在最近的发行版中,没有使用 ifup 和 ifdown 实用程序使用的“接口”文件。

默认情况下,NetworkManager负责管理您的网络接口,但可以在NetworkManager配置文件中更改管理网络的方式。

准确地说,NetworkManager.conf 文件“ifupdown”部分中的“managed”参数描述了您的系统是否使用了NetworkManager。

注意:“false”表示NetworkManager管理您的连接和设备,“true”表示您更喜欢使用 ifup 和 ifdown 的旧方式。

关于 systemd-networkd

在较新的系统上,systemd 设置为处理几乎所有内容,网络也不例外。

在某些情况下,您的系统可能依赖systemd-network守护进程来管理接口。

请注意,为了避免与网络相关的配置冲突,一次只能启用一项网络服务:无论是 ifupdown、systemd-networkd 还是 Network Manager。

如果您习惯使用“interfaces”文件来管理您的网络,您可能希望继续这样做,否则建议切换到NetworkManager。

网络管理工具

现在您对网络管理器有了更深入的了解,让我们开始列举该套件中提供的工具。

NetworkManager提供以下工具:

  • nmcli:用于使用NetworkManager配置、添加、编辑和删除连接的专用命令行工具;
  • nmtui:图形用户界面,仅提供与 nmcli 兼容的功能子集。使用 nmtui,您可以编辑连接、激活连接或更改计算机的主机名;
  • nm-applet:在GNOME 桌面环境中可用,此小程序用作界面覆盖,可用于连接或断开网络。

请注意,某些发行版可能具有上述工具的NetworkManager“快捷方式”:nmtui-connect、nmtui-edit 或 nmtui-hostname。

大多数时候,这些实用程序实际上是到主要 nmtui 实用程序的简单软链接。

在以下部分中,我们将了解如何使用上面引用的不同工具来正确配置网络。

使用 nmcli 的网络配置

如上一节所述,nmcli 是一个命令行实用程序,可用于监视网络连接,还可以添加、编辑、删除连接以及获取有关系统上设备的详细信息。

您可以使用以下语法与 nmcli 交互

$ nmcli <options> <section> <action>

nmcli 有一组八个部分:

  • help : 用于获取有关 nmcli 用法的一般帮助;
  • general:用于获取网络管理器本身的状态和全局配置;
  • networking:公开方法以关闭网络管理器或重新启动它;
  • radio:用于管理无线传输协议,如WIFI或WAN;
  • connection:顾名思义,此部分用于启动和关闭接口以及添加和删除现有连接;
  • device:主要用于修改与给定设备相关的参数(例如接口名称)或使用现有连接连接设备;
  • agent & monitor:这些部分分别用于处理机密和观察网络变化。

描述的每个部分都有一组预定义的操作,可以在阅读 nmcli 文档(显示、添加、删除、修改、加载等)中找到这些操作

例如,如果您要列出当前活动的所有连接,您将使用“connection”部分和“show”操作执行“nmcli”。

$ nmcli connection show

在这种情况下,我的主机在名为“eth0”的网络适配器上具有有线以太网连接。

在以下部分中,我们将了解如何与网卡和连接交互以正确配置系统。

连接管理

使用NetworkManager时,一个连接可以被看作是一个“网络配置”。

因此,“连接”具有与第 2 层(数据链路层)和第 3 层(可能与 IP 地址相关)相关的所有信息。

当设备使用连接时,即主机上的网络适配器,它被设置为“活动”或“启动”。

另一方面,连接可以是“空闲”的,现在可以被任何网络接口使用:在这种情况下,它被设置为“非活动”或“关闭”

这里的第一个关键点是,每当我们在 Linux 主机上配置网络时,我们本质上都是在配置连接,稍后将绑定到设备。

列出网络连接

为了列出主机上可用的网络连接,您可以运行“连接”部分的“显示”操作。

$ nmcli connection show

或者,您可以提供“–active”标志以将结果限制为活动连接(即由网络适配器使用)

nmcli connection show --active

添加网络连接

在某些情况下,配置多个连接可能会很方便。

假设您在两个不同的地方工作:一个使用 DHCP 来分配您的 IP 地址(动态 IP 地址),另一个使用静态 IP 分配给您的计算机。

为了实现这一点,您可以创建可以根据您的位置打开的其他网络连接。

要使用网络管理器添加新的网络连接,您可以:

  • 将您的配置文件添加到 位于 /etc/NetworkManager的 system-connections目录中
  • 添加带有“add”选项的“ nmcli connection ”命令;
  • 使用提供 GUI的nm-connection-editor实用程序来添加、修改和删除现有连接。

使用 nmcli 命令行,您可以通过运行以下命令来创建新连接

$ sudo nmcli connection add type ethernet ifname eth2

使用 nmcli,一个新的 UUID 连接将分配给您新创建的连接,例如,您将能够开始使用它连接到 Internet。

修改连接参数

nmcli 实用程序的一项重要功能是修改现有连接的参数

如果您想修改您的 IP 地址并从 DHCP 切换到手动 IP 寻址,您还可以使用 nmcli 实用程序来更改这些参数。

为了修改现有的连接参数,您将使用以下语法

$ nmcli connection modify <connection_id> <parameter> <value>

例如,假设您希望 IP 地址为静态并设置为值“192.168.1.19”

为此,您将运行以下命令

$ nmcli connection modify <uuid> ipv4.method manual

$ nmcli connection modify <uuid> ipv4.address 192.168.1.19/24

注意:更改IP地址时,不要忘记设置子网掩码(此处为/24),否则您可能会获得分配的默认掩码,这在大多数情况下是错误的。

为了使您的更改生效,您需要使用“连接”部分的“向上”和“向下”操作重新启动连接。

$ nmcli connection down <uuid>

$ nmcli connection up <uuid>

现在您的接口已重新启动,您的 IP 更改应该有效。

$ hostname -I

192.168.1.19

设备管理

设备”是 nmcli 实用程序的部分之一,可用于管理主机上的网络适配器。

列出网络适配器

为了在您的主机上列出网络适配器,您可以在“设备”部分运行“显示”操作。

$ nmcli device show

此命令广泛地描述了您的网络适配器,它列出了:

  • 设备名称:当设备插入您的计算机时由 udev 分配(在本例中为 eth0);
  • 设备 MAC 地址:这里称为硬件地址;
  • 设备状态:它是否连接到网络或不;
  • IPv4 地址:使用 CIDR 表示法(192.168.1.16/24);
  • IPv4网关: (192.168.1.1);
  • IPv4主 DNS: (192.168.1.1)

注意:这里,网关充当主要 DNS,但您的公司可能有专用的名称服务器。

如果您想列出主机上可用的网卡并确定它们是否连接,这些特性非常有用。

更改设备配置

在某些情况下,直接更改设备配置可能很有用。

但是,您需要记住一个关键点:您可以实时更改设备,但如果您希望保留更改,则需要修改连接配置。

简而言之,设备配置更改是暂时的。

为了更改您的设备配置,您需要执行带有“修改”选项的“nmcli device”命令并指定要更改的参数。

$ nmcli device modify <interface_name> <parameter> <value>

$ nmcli dev mod <interface_name> <parameter> <value>

例如,假设您想更改“eth0”网络接口的 IP 地址。您还希望 IP 归属是静态的而不是动态的。

为了实现这一点,您将执行以下命令

$ nmcli dev mod eth0 ipv4.address 192.168.1.19/24

Connection successfully reapplied to 'eth0'

$ nmcli device modify eth0 ipv4.gateway 192.168.1.1

Connection successfully reapplied to 'eth0'

$ nmcli device modify eth0 ipv4.dns 192.168.1.1

Connection successfully reapplied to 'eth0'

$ nmcli device modify eth0 ipv4.method manual

Connection successfully reapplied to 'eth0'

重新应用参数

只是为了展示更改是暂时的,如果您将参数“重新应用”到您的界面,您的所有更改都将丢失。

相反,将重新应用在您的连接配置文件(在 /etc/NetworkManager/system-connections 中)中定义的参数。

$ nmcli dev reapply eth0

Connection successfully reapplied to 'eth0'

重新检查 IP 地址将为您提供另一个 IP 地址,而不是您在上一节中静态分配的 IP 地址。

$ hostname -I

192.168.1.18/24

网络管理器图形工具

在本节中,我们将看看网络管理器套件中包含的图形工具:nmtui 和 nm-applet。

Nmtui 实用程序

nmtui 顾名思义,是一个文本用户界面,旨在通过易于使用的用户界面促进网络操作。

要从 nmtui 开始,只需在终端 shell 中执行“nmtui”。

$ nmtui

在此图形菜单中,您有三个选项:

  • 编辑连接:您可以在其中选择网络接口并修改分配给它们的参数(例如 DNS、IP 地址或网关地址);
  • 激活连接:同时取消激活现有连接。提醒一下,连接仅在分配给特定设备时才处于活动状态或启用状态;
  • 设置系统主机名:像“hostnamectl”或“hostname”一样,您可以通过网络设置PC名称。

在 nmtui 工具中导航非常简单:您可以使用键盘键进行导航,使用“Enter”键确认您的选择,使用“Escape”键取消并返回上一屏幕。

GNOME 上的 Nm 小程序

最后一个与网络管理器相关的应用程序是 nm-applet :一个可用于 GNOME 用户界面的 GUI 小程序。

nm-applet 工具是一个覆盖用户界面,位于桌面菜单的右上角。

使用 nm-applet,您可以:查看现有连接,随意添加、编辑和删除它们。

您可以查看有关有线连接设置的详细信息并对其进行编辑以更改您的 IP 地址或更改 IP 归属方法(例如从 DHCP 到手动)

结论

在本教程中,您了解了网络管理器:现代发行版上的一种工具,用于创建、修改和管理网络连接。

您已经发现了与网络管理器相关的工具(即nmcli、nmtui 和 nm-applet),并且您已经了解了如何使用这些工具来修改现有连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 上的NetworkManager示例 的相关文章

  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil

随机推荐

  • Csdn爬虫自动评论

    前言 因为发现自己的csdn博客被机器人自动评论 这些博客很多都是对别人进行评论 然后别人就有可能回访或者点赞关注等等 基本上总积分非常高 为了覆盖掉这些机器评论 本篇主要是实现java爬虫对自己的博客所有文章进行自动评论 一 准备分析工作
  • vscode插件一draw.io绘图工具

    vscode 插件推荐一draw io 日常工作中需要制作时序图 流程图等 这里推荐的是vscode的插件中draw io 先自行在官网下载vscode https code visualstudio com 安装后打开vscode 如图在
  • c++ map 析构函数_C++核心准则C.36:析构函数不应该失败

    C 36 A destructor may not fail析构函数不应该失败 Reason 原因 In general we do not know how to write error free code if a destructor
  • Crazyswarm framework

    Crazyswarm framework 1 Tools Crazyfile Chooser Simulation sim flag 2 软件架构 使用方法 参考论文 应用的论文 3使用教程 参考网页 配置文件 example 基础 轨迹生
  • k8s 部署dubbo

    docker pull chenchuxin dubbo admin docker tag chenchuxin dubbo admin hub redblue ai com dubbo admin cat lt lt END gt dub
  • sql 数据查询返回值问题

    1 create 返回值 若发生错误 返回false 成功则返回创建的数据 2 add 返回值 addAll 返回值 成功 id或true 失败 false 成功 如果主键是自动增长型 返回值为新增记录Id值 addAll为最大值 否则返回
  • Microsoft Store打不开的解决方案

    Microsoft Store无法打开的解决方案 一 方案一 1 按Win i键 点击 网络和internet 2 转到 代理 关闭 使用代理服务器 3 尝试打开 microsoft store 二 方案二 1 按Win R键 输入inet
  • PHP请求微信接口获取用户电话号

    前言情景剧 业务场景是为了在用户登录的时候判断其是否已经成功注册 没有成功注册的话就将获取到的openid和session key加密后作为token传给前端 然后让前台通过组件获得code之后连着token一起传给后端 后端拿着code再
  • 服务机器人串口配置

    服务机器人串口配置 1 确定串口号 2 查看串口号对应的kernels 3 修改rules 1 确定串口号 如下图 以雷达为了例子 插拔之后 可知串口号为 ttyUSB1 2 查看串口号对应的kernels 3 修改rules 更改KERN
  • 搭建Zerotier内网穿透网络及彻底删除zerotier方法

    搭建Zerotier内网穿透网络 1 注册zerotier账号并登录https my zerotier com 2 访问https my zerotier com network 点击Create a Network 之后再Your Net
  • Java 【基础】 模拟log4j,输出当前语句的行数,和类路径

    一直很好奇log4j 是如何获取到当前输出的行数的 今天学到了 原来是堆栈跟踪 把代码贴出来给大家看一下 模拟log4j public static void debug String string System out println 调
  • declare-styleable的使用

    declare styleable是给自定义控件添加自定义属性用的 可以定义多种类型 int Boolean string等等 参考链接
  • 正则表达式去除冗长代码,tppabs

    利用正则表达式去除网页中的冗长没用代码 1 btppabs h 2 tpa http 3 清除css内的 tpa http s gif png jpg 4 tpa
  • org.springframework.http.converter.HttpMessageNotWritableException

    这里说无法将 对应对象转换 原因在于没有导入json 依赖 所以无法转换 org springframework http converter HttpMessageNotWritableException No converter fou
  • SD/MMC存储器启动方案在SoC中的设计与实现

    原文地址 http blog csdn net allen6268198 article details 7745208 引言 SD MMC存储器以其成本低廉 存储容量大 性能优良 安全性高等特点越来越广泛地应用于便携式设备和家用电子设备
  • Android Studio中设置鼠标悬停显示文档提示方法

    有些小伙伴在开发的过程中可能会习惯使用文档注释 那么在Android Studio中如何设置启用文档注释呢 1 首先打开Android Studio 点击菜单栏中的 File选项菜单 点击如下的Settings 进行设置 2 点击Edito
  • Windows10系统下swin-transformer目标检测环境搭建

    Swin Transformer Object Detection环境搭建 前言 1 环境准备 2 虚拟环境创建 3 安装pytorch 4 安装mmcv 5 安装mmdet 6 安装apex 7 测试 前言 刚搞明白了分类 又进来了检测这
  • 基于 Linux 安装 web 服务及基本配置

    在网络环境中 web 服务无疑是最为流行的应用系统 有了 web 站点 企业可以充分展示自己的作品 宣传企业形象 web 站点还为企业提供了与客户交流 电子商务交易平台等丰富的网络应用 Apache HTTP Server 是 ASF 旗下
  • mycat实现mysql读写分离,热切换,集群

    在互联网时代 实现mysql读写分离 热切换 集群能大大提高mysql数据库访问压力 防止数据丢失 使用mycat能帮我们实现这些 我们要实现的是这种架构 1 Mycat能实现数据库的垂直切分和水平切分 这里用户写数据的时候 通过mycat
  • Linux 上的NetworkManager示例

    如果您是一位经验丰富的系统管理员 并且专注于网络管理 那么您可能已经听说过NetworkManager NetworkManager于 2004 年发布 由 Red Hat 开发 是一组不同的工具 主要是接口 旨在促进系统上的网络管理 如果