NetworkManager 更改和改进

[ad_1]

NetworkManager 是默认服务 Fedora 用于与内核中的低级网络连接。 创建它是为了提供一个高级接口,用于在没有 shell 脚本的系统上初始化和配置网络。 在过去的几 Fedora 发布后,NetworkManager 开发人员付出了很多努力,使其变得更好。 本文介绍了过去几年在 NetworkManager 中实现的一些主要改进 Fedora 发布。

一个简短的历史

过去的几 Fedora 发布突出显示了在开发 NetworkManager 方面所付出的难以置信的努力。 不幸的是,NetworkManager 在许多人的心目中拥有 Red Hat Enterprise Linux 6 (NM 0.8.1) 的遗产。 Red Hat Enterprise Linux 6 中的版本几乎只能处理 WiFi 网络,在所有其他情况下都必须禁用和/或删除(后者通常更可取)。

类似于过去通过一系列 shell 脚本启动和停止服务的方式,网络配置在 Fedora 也曾经通过几个不同的 shell 脚本来处理。 这些仍然作为“遗留网络服务”存在,但它们很脆弱,没有状态概念。 对绑定或桥接进行过更改的任何人都知道,使用 ifenslave、brctl 或最近的 ip 仔细手动取消选择当前配置然后希望所有 ifcfg-* 文件正确的痛苦。 或者只是硬着头皮进行重启。

正如最初的 upstart 和后来的 systemd 标志着运行一系列 shell 脚本来配置一个没有状态概念的服务的结束,所以 NetworkManager 标志着运行一系列类似的 shell 脚本来配置网络的结束。

Red Hat Enterprise Linux 发行版并没有精确排列,但这应该可以让您了解随着时间的推移加速发展,尤其是与 消息 源存储库中的文件。

Fedora 发布 RHEL 发布 网络管理器版本
12 0.7.996
13 6.X 0.8.1
14 0.8.1
15 0.8.999
16 0.9.1.90
17 0.9.4
18 0.9.7
19 0.9.8.2
20 7.0 0.9.9.0
21 0.9.10.0
22 7.1 1.0.2
23 7.2 1.0.6
24 1.2.2
25 7.3 1.4.2
26 1.8.0

那么最近几年的主要变化是什么 Fedora 发布? 为什么你现在应该注意 NetworkManager 而不是在你的服务器实例上删除它?

不碍事

在某些情况下,不希望运行守护程序或任何动态行为风险。 通常,由于一次性触发和忘记 shell 脚本的性质,这一直是传统网络服务的首选。 一些 Fedora 之前在 NM 1.0 发布,添加了只操作一次然后隐藏的功能。

cat > /etc/NetworkManager/conf.d/c-and-q.conf <<EOF
[main]
configure-and-quit=true
EOF

文档汇总

在 IRC 上,当使用 NetworkManager 时,经常有人质疑 ifcfg-* 文件中的有效内容。 为了在系统上本地改进此文档,我们付出了巨大的努力。 最感兴趣的手册页是:

nm 设置
对所有类型的接口都有效的整体 NetworkManager 设置名称。 这些在 DBus 上用于更改 NM 行为或与 nmcli 一起使用

用于配置接口的 CLI 命令。

nm-设置-ifcfg-rh
NM 配置选项与它们在 ifcfg-* 文件中的命名方式的映射。 ifcfg-* 文件中使用的术语并不总是与接口上的属性名称相同,因此在使用这些文件的普通 Red Hat 环境中引用它非常有用。
nmcli 示例
许多 nmcli 活动的有用参考,其中还包括 polkit 策略信息。
NetworkManager.conf
实际守护程序本身以及较低级别或默认行为的配置。

IPv6 来了! 注意!

随着 IPv4 的世界末日时钟继续倒计时,网络越来越多 启用 IPv6 连接. 在最近的几个版本中,有很多与 IPv6 相关的更改。 这些主要是错误修复(例如,仅具有自动链接本地 fe80:: 地址的接口不被视为已连接),但关注隐私的更改很重要。

由于 EUI64 编码使用 MAC 来自动创建 IPv6 地址,因此人们对跟踪系统的 MAC 地址非常关注。 有过 两种处理方法 从稍微不同的角度。 首先有 RFC4941 这涉及自动生成地址并在生成新地址之前使用它一段时间等。 这可以在 NM 中通过属性在连接上进行配置

ipv6.ip6-隐私

但最好在内核级别处理它

net.ipv6.conf.default.use_tempaddr=2

更喜欢使用临时地址,以便一切都知道配置。 NetworkManager 默认会尊重 sysctl 设置。 用于设置此临时地址有效期限的 sysctl 属性是

net.ipv6.conf.default.temp_prefered_lft

.

这样做的缺点是任何使用 IP 进行会话跟踪的东西(安全 cookie 可能是这里的一个例子)都有可能随着 IP 的变化而失去会话。

处理隐私的第二种方法(可以与临时寻址一起使用)是 RFC7217 这允许在连接上使用随机但稳定的 IPv6 地址。 这通过从 /dev/urandom 为系统创建一个密钥,然后使用连接 UUID 来创建随机地址,但对于连接保持不变。 现在默认使用此地址而不是 EUI64,但可以在需要可预测性的环境中使用可预测地址代替 SLAAC.

系统MAC隐私保护

特别是由于 WiFi 在我们的社会中已成为一种常见功能,因此不仅 IP 层存在隐私问题,而且 MAC 地址的最低级别也是如此。

就在最近 Fedora 24(和 EL7.3) NetworkManager 在扫描要使用的接入点时开始使用随机 MAC。 目前的默认设置是使用接口的 MAC 是什么(或者如果已经使用 macchanger 等工具预先设置了它,则保留它)但是类似于 IP 层,现在可以设置

克隆的 MAC 地址

每次连接被激活或 STABLE 时,在与 RANDOM 的连接上完全随机的 MAC 以模仿与连接保持一致的随机生成地址的 IPv6 行为。

桥接、团队和联系

以前有特殊的虚拟接口类型

团队奴隶

,

债券奴隶

桥从

在使用桥梁、团队或债券时必须声明。 尽管底层框架支持将它们堆叠在一起(以及 vlan 标记),但无法通过 nmcli 实用程序直接创建“堆栈”,因为每个都有一个基本假设,即它们必须位于物理接口上(类型以太网)。

最近这些特殊的接口类型被删除了

掌握

连接属性被用来任意地将这些东西堆叠在一起。 这在具有用于容纳链接到不同网络的多个来宾虚拟机的主机的服务器环境中尤其重要。

在 NM 1.2 之前,这是将三个接口组合在一起所需的 nmcli 命令的杂耍,并在这些接口上标记了 vlan,并在这些接口上定义了网桥,以供客人连接:

nmcli connection add type bond con-name bond0 mode active-backup
nmcli connection add type bond-slave ifname eth2 master mybond
nmcli connection add type bond-slave ifname ens9 master mybond
nmcli connection add type bond-slave ifname ens10 master mybond
nmcli connection add type bridge con-name bridge0 ifname bridge0 connection.autoconnect yes ipv4.method manual "10.0.0.1/24" 
nmcli connection add type bridge con-name bridge60 ifname bridge60 connection.autoconnect yes ipv4.method manual "10.0.60.1/24" 
nmcli connection add type bridge con-name bridge100 ifname bridge100 connection.autoconnect yes ipv4.method manual "10.0.100.1/24" 
nmcli connection add type vlan con-name vlan-60 dev bond0 id 60
nmcli connection add type vlan con-name vlan-100 dev bond0 id 100
nmcli connection down bond0
nmcli connection down vlan-60
nmcli connection down vlan-100
nmcli connection modify bond0 connection.master bridge0 connection.slave-type bridge
nmcli connection modify vlan-60 connection.master bridge60 connection.slave-type bridge
nmcli connection modify vlan-100 connection.master bridge100 connection.slave-type bridge
nmcli connection up bond-slave-eth2
nmcli connection up bond-slave-ens9
nmcli connection up bond-slave-ens10
nmcli connection up bond0
nmcli connection up bridge0
nmcli connection up vlan-60
nmcli connection up bridge60
nmcli connection up vlan-100
nmcli connection up bridge100

随着允许任意分层的更改和删除特殊的 *-slave 类型,这变得简单了:

nmcli c add type bridge ifname bridge0 con-name bridge0 connection.autoconnect yes ipv4.method manual ipv4.addr "10.0.0.2/24"
nmcli c add type bridge ifname bridge60 con-name bridge60 connection.autoconnect yes ipv4.method manual ipv4.addr "10.0.60.2/24"
nmcli c add type bridge ifname bridge100 con-name bridge100 connection.autoconnect yes ipv4.method manual ipv4.addr "10.0.100.2/24"
nmcli c add type vlan con-name vlan-100 dev bond0 id 100 master bridge100 connection.autoconnect yes 
nmcli c add type vlan con-name vlan-60 dev bond0 id 60 master bridge60 connection.autoconnect yes 
nmcli c add type bond ifname bond0 con-name bond0 connection.autoconnect yes master bridge0 bond.options mode=active-backup 
nmcli c add type ethernet ifname eth1 con-name eth1 master bond0 connection.autoconnect yes
nmcli c add type ethernet ifname eth2 con-name eth2 master bond0 connection.autoconnect yes
nmcli c add type ethernet ifname eth3 con-name eth3 master bond0 connection.autoconnect yes

此版本还带来了管理更多类型设备的能力,例如 macvlan、vxlan 和隧道。

下一个是什么?

有点令人惊讶的是当前 Fedora 发行版目前与 Red Hat Enterprise Linux 7 版本的 NetworkManager 匹配,但 Fedora 26 就在拐角处。

这将带来一路飞跃到 1.8.0,这当然会在过程中得到 1.6.0 的改进。

值得查看开发人员博客 1.6.01.8.0 但需要注意的一些关键事项是 MACsec 对需要第 2 层加密的网络的支持、IPv6 连接共享(使用 前缀委派) 并更好地处理 NetworkManager 服务的重启。

在研究这篇文章时,我发现只有几个区域需要遗留网络服务。

  1. openvswitch的使用
  2. Openstack 部署

除此之外,没有理由再禁用 NetworkManager。

至于未来? 好在总有 要做的工作!

[ad_2]

Related Posts