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

Ole*_*leg 30 networking networkmanager linux-kernel systemd-networkd netplan

我正在学习关于Linux的Kubuntu我18.04工作站上的网络,我看到有两个NetworkManagernetworkd-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...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我相信,如果没有安装,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
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索后,我最初的想法是,NetworkManager并且networkd都在运行,但是netplan生成的配置使得只有一个人在做某事。但我不知道我将如何验证这一点,找出操作链,或将其配置为适合我对 dummy0 的邪恶计划。

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

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

jdw*_*olf 25

systemd-networkd 当它启用时尊重配置 /etc/systemd/network

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

两者都作为systemd服务启用和禁用,systemd 使用 udev 为网络适配器创建设备文件。通常,您可能不应该同时启用两者,但如果您这样做,您需要注意它们的配置不会发生冲突。

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

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

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

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

  • 感谢您的比较/对比,但我正在寻找更多关于这些组件如何在更深层次上相互作用的信息。例如,当 systemd 和 NetworkManager 同时尝试控制同一个接口时,内核中到底发生了什么?iproute2/ ifupdown 工具在与 networkd/NetworkManager 冲突(或避免冲突)的内核中做了什么?我可以使用哪些命令来查看哪些工具对哪些接口做了哪些操作(在 udev/内核级别)? (3认同)

Ell*_*iew 18

我不会试图回答你的整个问题,
但我发现了一些帮助我理解这些系统如何组合在一起的东西。
希望这对某人有所帮助,因为这让我感到非常困惑


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

/etc/network/interfaces网络配置文件似乎是相当老,但仍然使用ifupifdownifquery

这些似乎是使网络“接口”(基于 MAC 的链接)和“连接”(基于 IP 的连接)上下的旧方法。

man 8 ifup 说:

说明
的ifupifdown你命令可以被用于配置(或分别解除配置)的基础上在文件接口定义网络接口 的/ etc /网络/接口

重要的含义是这样的:

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


2 - 旧ifconfig命令怎么样?

Debian的,我有一个名为的传统网络包网的工具,其中包括折旧:arpifconfigipmaddriptunneliwconfignameifnetstatroute,和vconfig命令。

你想现在可以使用iproute2ipiwss,和ifrename命令。


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

什么ifup/down(通过 ifupdown 包或假设还包括 ifupdown2 中的 Python 重写),ip不做的是在网络更改之前和之后运行旧脚本。请注意 ifup 所说的:

笔记

程序不直接配置网络接口;它运行诸如ip 之类的低级实用程序来完成其肮脏的工作。

另请参见
接口(5)、ip(8)、ifconfig(8)。

所以看起来 ifup/ifdown 已经从使用折旧ifconfig后端升级到现在使用ip后端。


4 - 网络管理器怎么样?( 2004 )

man 5 NetworkManager,

[IFUPDOWN]

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

管理

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

所以不清楚 NetworkManager 是否也可以运行 ifup/ifdown 脚本,但很清楚的是,NetworkManager 可以清除 ifup/ifdown 正在使用的接口。


5 - systemd-networkd ( 2010 )

这比 NetworkManager 更新,用于有线服务器和 GUI 环境不可用时。

但似乎对于无线连接,NetworkManager 是一种可行的方法,因为手动配置 systemd-networkd 更加困难。

man 8 systemd-networkd它说,

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

希望我一切都好,但如果没有,请告诉我。谢谢。