NetworkManager、networkd、netplan、ifupdown2 和 iproute2 究竟如何交互?

NetworkManager、networkd、netplan、ifupdown2 和 iproute2 究竟如何交互?

我正在 Kubuntu 18.04 工作站上学习 Linux 网络,我看到 和 都在NetworkManager运行networkd-dispatcher

oleg@eclectic:~$ sudo ps -ef | grep -i net
root        56     2  0 Oct11 ?        00:00:00 [netns]
root      1097     1  0 Oct11 ?        00:00:02 /usr/sbin/NetworkManager --no-daemon
root      1098     1  0 Oct11 ?        00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1250     1  0 Oct11 ?        00:00:02 /usr/sbin/inetd
root      1593  1097  0 Oct11 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper...

NetworkManager似乎被配置为通过以下方式处理“一切” netplan

oleg@eclectic:~$ cat /etc/netplan/01-network-manager-all.yaml 
# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

我相信如果没有安装的话netplan,一切都会交给它。networkdNetworkManager

中还有一堆文件/etc/network/,我不确定是什么在处理这些文件。很多包似乎都使用这个目录:

oleg@eclectic:~$ dpkg -S /etc/network
avahi-daemon, ifupdown2, wpasupplicant, openvpn, postfix, netbase, avahi-autoipd, wireless-tools, clamav-freshclam: /etc/network

经过一番谷歌搜索后,我最初的想法是NetworkManagernetworkd都在运行,但netplan生成的配置使得只有一个实际上在做某事。但我不知道如何验证这一点,找出操作链,或配置它以适应我对 dummy0 的邪恶计划。

问题:NetworkManager、networkd 和 netplan 究竟是如何协同工作的?换句话说,当计算机启动时,哪些进程将什么交给其他哪些进程?net-toolsifupdown2iproute2和 等目录中的工具如何/etc/network/适应这一切?最后,我如何自己解决这个问题并使用命令行了解详细信息?

更新:我并不是在寻找高层次的概述。相反,我想知道这些组件如何在内核级别或类似级别上交互、冲突或避免冲突。

答案1

systemd-networkd当其启用时遵循配置/etc/systemd/network

NetworkManager将遵循一些自动规则,例如如果找到有线连接,它将尝试连接到有线连接。

两者都作为systemd服务启用和禁用,并且 systemd 使用 udev 为网络适配器创建设备文件。一般来说,您可能不应该同时启用两者,但如果这样做,您需要小心它们的配置不要冲突。

netplan在任一网络管理器开始之前,根据其自己的配置为任一网络管理器创建配置。这样,netplan 实际上是一个配置抽象,无论它使用 systemd-networkd 还是 NetworkManager 都是配置的一部分。

iproute2是用于在命令行配置网络接口的工具包。它包括类似于网络管理器和旧的 ifconfig 的链接配置。而net-toolsipupdownifupdown2使用 /etc/network/interfaces 中的网络配置来配置和取消配置接口。

ifupdown或其其他版本可用于管理网络,但它不是自动的,但可以使用 systemd 服务在启动时启动它。

ifupdown2使用类似于systemd网络接口的依赖关系图。此外,它还充当其他工具的抽象,例如iproute2

答案2

我不会尝试回答您的整个问题,
但我发现了一些可以帮助我理解这些系统如何组合在一起的东西。
希望这对某人有帮助,因为这让我很困惑


1 - 旧的网络interfaces配置文件,它的ifup&ifdown命令:

/etc/network/interfaces网络配置文件似乎相当旧,但仍然被ifupifdown和所使用ifquery

这些似乎是打开和关闭网络“接口”(基于 MAC 的链接)和“连接”(基于 IP 的连接)的旧方法。

man 8 ifup说:

描述
IFUP如果向下命令可用于根据文件中的接口定义配置(或分别取消配置)网络接口 /etc/网络/接口

重要的含义是这样的:

如果 中未定义接口/etc/network/interfaces,则 ifup/ifdown 将不会管理该接口。


2 - 旧ifconfig命令怎么样?

旧版网络包名为net-tools在 Debian 上,包括已弃用的:arpifconfigipmaddriptunneliwconfignameifnetstatroutevconfig命令。

现在您想使用名为的包iproute2相反,它包括较新的ipiwssifrename命令。


3 - 如果该ip命令可以打开或关闭接口,为什么不使用它而不是使用ifupifdown

所做ifup/down的(通过ifupdown包或可能还有 Python 重写ifupdown2),ip不做的是在网络更改之前和之后运行遗留脚本。但请注意其中所说man ifup的:

笔记

该程序不直接配置网络接口;它运行低级实用程序,例如ip做它肮脏的工作。

也可以看看
接口(5)、ip(8)、ifconfig(8)。

因此,ifup/ifdown 似乎已从使用已折旧的ifconfig后端升级到现在使用ip由较新的软件包提供的后端iproute2


4 - NetworkManager 怎么样? (2004年

man 5 NetworkManager,

[如果向上向下]

此部分包含特定于 ifupdown 的选项,因此仅在使用 ifupdown 插件时有效。

管理

如果设置为 true,则 /etc/network/interfaces 中列出的接口由 NetworkManager 管理。如果设置为 false,则 NetworkManager 将忽略 /etc/network/interfaces 中列出的任何接口。请记住,NetworkManager 控制默认路由,因此由于该接口被忽略,NetworkManager 可能会将默认路由分配给其他某个接口。

因此,尚不清楚 NetworkManager 是否也可以运行ifup/ifdown脚本,但明确的是 NetworkManager 可以摆脱ifup/ifdown仍在使用的遗留接口(同样是“基于 MAC 的硬件链接”)。换句话说,ifup 要么使用硬件链接,要么使用 NetworkManager,或者可能使用其他东西,但不能同时使用 ifup 和 NetworkManager。


5 - 系统网络(2010年

它比 NetworkManager 更新,用于有线服务器以及 GUI 环境不可用时。

但对于无线连接来说,NetworkManager 似乎是最佳选择,因为手动配置 systemd-networkd 更加困难。

里面man 8 systemd-networkd说,

systemd-networkd 将管理它找到 .network 文件的任何链接的网络地址和路由带有适当的 [Match] 部分,请参阅 systemd.network(5) (真实网络设备)。对于这些链接,它将在启动设备时刷新现有的网络地址和路由。任何与 .network 文件之一不匹配的链接都将被忽略。 还可以使用 Unmanagement=yes 选项显式告诉 systemd-networkd 忽略链接,请参阅 systemd.network(5)。

希望我能解决这个问题,但如果没有,请告诉我。谢谢。

答案3

这是一个非常详细的问题。我会尽可能地分解它:

Netplan:这是各种后端的 YAML 网络配置抽象。它可以为NetworkManager或networkd生成配置文件。您可以使用它作为统一的接口来描述您想要的网络配置。然后,Netplan 根据系统的需要,使用 NetworkManager 或 Networkd 作为后端来应用此配置。使用的具体后端由 Netplan 配置文件中的 renderer: 属性控制。

NetworkManager:这是一个动态网络控制和配置系统,旨在保持网络设备和连接在可用时保持活动状态。 NetworkManager 主要针对桌面系统,例如 Kubuntu。它适合管理典型用户工作站上的各种网络设置,例如无线网络、有线网络和 VPN。

networkd:这是管理网络的系统服务。它会在网络设备出现时对其进行检测和配置,并且可以根据需要动态创建网络配置。 Networkd 通常用于首选简单性和自动化的服务器环境。

networkd-dispatcher:这是一个用于 systemd-networkd 连接状态更改的调度程序服务。它与 NetworkManager 中的dispatcher.d 功能相当。当网络设备更改状态(启动、关闭等)时,networkd-dispatcher 将执行放置在其配置目录中的任何脚本,从而允许您对发生的网络配置更改做出反应。

/etc/network/:此目录中的文件是基于 Debian 的系统中网络的传统配置文件,由 ifup 和 ifdown 命令使用。虽然这些文件可以在运行 NetworkManager 的系统上使用,但通常不能在运行 NetworkManager 的系统上使用,因为 NetworkManager 自行管理网络配置并忽略这些文件。

为了更好地理解这些组件如何协同工作,您需要查看启动过程:

当系统启动时,网络服务由 Ubuntu 的初始化系统 systemd 启动。 Netplan 读取其 YAML 配置文件,并根据配置使用的渲染器生成 NetworkManager 或 Networkd 的配置文件。 NetworkManager 或networkd(视情况而定)启动并读取Netplan 生成的配置文件。如果网络配置发生更改,NetworkManager 或 networkd 会做出适当的响应,并且 networkd-dispatcher 会触发设置为响应更改的任何脚本。至于确定哪个工具正在管理哪个接口,一个好的起点是查看 networkctl 的输出,这是 systemd 提供的命令,可以显示 systemd-networkd 所看到的网络链接的状态。

您提到的工具:net-tools(已弃用)、iproute2 和 ifupdown2 是在 Linux 中操作和配置网络接口的实用程序。它们直接与Linux内核交互以管理网络接口、路由等。它们可以与NetworkManager和networkd共存,但在由NetworkManager或networkd管理的系统中,它们更多地用于诊断而不是配置。

相关内容