我正在 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
,一切都会交给它。networkd
NetworkManager
中还有一堆文件/etc/network/
,我不确定是什么在处理这些文件。很多包似乎都使用这个目录:
oleg@eclectic:~$ dpkg -S /etc/network
avahi-daemon, ifupdown2, wpasupplicant, openvpn, postfix, netbase, avahi-autoipd, wireless-tools, clamav-freshclam: /etc/network
经过一番谷歌搜索后,我最初的想法是NetworkManager
和networkd
都在运行,但netplan
生成的配置使得只有一个实际上在做某事。但我不知道如何验证这一点,找出操作链,或配置它以适应我对 dummy0 的邪恶计划。
问题:NetworkManager、networkd 和 netplan 究竟是如何协同工作的?换句话说,当计算机启动时,哪些进程将什么交给其他哪些进程?net-tools
、ifupdown2
、iproute2
和 等目录中的工具如何/etc/network/
适应这一切?最后,我如何自己解决这个问题并使用命令行了解详细信息?
更新:我并不是在寻找高层次的概述。相反,我想知道这些组件如何在内核级别或类似级别上交互、冲突或避免冲突。
答案1
systemd-networkd
当其启用时遵循配置/etc/systemd/network
而NetworkManager
将遵循一些自动规则,例如如果找到有线连接,它将尝试连接到有线连接。
两者都作为systemd
服务启用和禁用,并且 systemd 使用 udev 为网络适配器创建设备文件。一般来说,您可能不应该同时启用两者,但如果这样做,您需要小心它们的配置不要冲突。
netplan
在任一网络管理器开始之前,根据其自己的配置为任一网络管理器创建配置。这样,netplan 实际上是一个配置抽象,无论它使用 systemd-networkd 还是 NetworkManager 都是配置的一部分。
iproute2
是用于在命令行配置网络接口的工具包。它包括类似于网络管理器和旧的 ifconfig 的链接配置。而net-tools
、ipupdown
和ifupdown2
使用 /etc/network/interfaces 中的网络配置来配置和取消配置接口。
ifupdown
或其其他版本可用于管理网络,但它不是自动的,但可以使用 systemd 服务在启动时启动它。
ifupdown2
使用类似于systemd
网络接口的依赖关系图。此外,它还充当其他工具的抽象,例如iproute2
答案2
我不会尝试回答您的整个问题,
但我发现了一些可以帮助我理解这些系统如何组合在一起的东西。
希望这对某人有帮助,因为这让我很困惑
1 - 旧的网络interfaces
配置文件,它的ifup
&ifdown
命令:
这/etc/network/interfaces
网络配置文件似乎相当旧,但仍然被ifup
、ifdown
和所使用ifquery
。
这些似乎是打开和关闭网络“接口”(基于 MAC 的链接)和“连接”(基于 IP 的连接)的旧方法。
man 8 ifup
说:
描述
IFUP和如果向下命令可用于根据文件中的接口定义配置(或分别取消配置)网络接口 /etc/网络/接口。
这重要的含义是这样的:
如果 中未定义接口/etc/network/interfaces
,则 ifup/ifdown 将不会管理该接口。
2 - 旧ifconfig
命令怎么样?
旧版网络包名为net-tools
在 Debian 上,包括已弃用的:arp
、ifconfig
、ipmaddr
、iptunnel
、iwconfig
、nameif
、netstat
、route
和vconfig
命令。
现在您想使用名为的包iproute2
相反,它包括较新的ip
、iw
、ss
和ifrename
命令。
3 - 如果该ip
命令可以打开或关闭接口,为什么不使用它而不是使用ifup
和ifdown
?
所做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管理的系统中,它们更多地用于诊断而不是配置。