如何在Linux上从NetworkManager切换为systemd-network

简介:

在 Linux 世界里,对 systemd 的采用一直是激烈争论的主题,它的支持者和反对者之间的战火仍然在燃烧。到了今天,大部分主流 Linux 发行版都已经采用了 systemd 作为默认的初始化init系统。

正如其作者所说,作为一个 “从未完成、从未完善、但一直追随技术进步” 的系统,systemd 已经不只是一个初始化进程,它被设计为一个更广泛的系统以及服务管理平台,这个平台是一个包含了不断增长的核心系统进程、库和工具的生态系统。

systemd 的其中一部分是 systemd-networkd,它负责 systemd 生态中的网络配置。使用 systemd-networkd,你可以为网络设备配置基础的 DHCP/静态 IP 网络。它还可以配置虚拟网络功能,例如网桥、隧道和 VLAN。systemd-networkd 目前还不能直接支持无线网络,但你可以使用 wpa_supplicant 服务配置无线适配器,然后把它和 systemd-networkd 联系起来。

在很多 Linux 发行版中,NetworkManager 仍然作为默认的网络配置管理器。和 NetworkManager 相比,systemd-networkd 仍处于积极的开发状态,还缺少一些功能。例如,它还不能像 NetworkManager 那样能让你的计算机在任何时候通过多种接口保持连接。它还没有为更高层面的脚本编程提供 ifup/ifdown 钩子函数。但是,systemd-networkd 和其它 systemd 组件(例如用于域名解析的 resolved、NTP 的timesyncd,用于命名的 udevd)结合的非常好。随着时间增长,systemd-networkd只会在 systemd 环境中扮演越来越重要的角色。

如果你对 systemd-networkd 的进步感到高兴,从 NetworkManager 切换到 systemd-networkd 是值得你考虑的一件事。如果你强烈反对 systemd,对 NetworkManager 或基础网络服务感到很满意,那也很好。

但对于那些想尝试 systemd-networkd 的人,可以继续看下去,在这篇指南中学会在 Linux 中怎么从 NetworkManager 切换到 systemd-networkd。

需求

systemd 210 及其更高版本提供了 systemd-networkd。因此诸如 Debian 8 "Jessie" (systemd 215)、 Fedora 21 (systemd 217)、 Ubuntu 15.04 (systemd 219) 或更高版本的 Linux 发行版和 systemd-networkd 兼容。

对于其它发行版,在开始下一步之前先检查一下你的 systemd 版本。

 
 
  1. $ systemctl --version 

从 NetworkManager 切换到 Systemd-networkd

     从 NetworkManager 切换到 systemd-networkd 其实非常简答(反过来也一样)。

首先,按照下面这样先停用 NetworkManager 服务,然后启用 systemd-networkd。

 
 
  1. $ sudo systemctl disable NetworkManager 
  2. $ sudo systemctl enable systemd-networkd

你还要启用 systemd-resolved 服务,systemd-networkd用它来进行域名解析。该服务还实现了一个缓存式 DNS 服务器。

 
 
  1. $ sudo systemctl enable systemd-resolved 
  2. $ sudo systemctl start systemd-resolved

当启动后,systemd-resolved 就会在 /run/systemd 目录下某个地方创建它自己的 resolv.conf。但是,把 DNS 解析信息存放在 /etc/resolv.conf 是更普遍的做法,很多应用程序也会依赖于 /etc/resolv.conf。因此为了兼容性,按照下面的方式创建一个到 /etc/resolv.conf 的符号链接。

 
 
  1. $ sudo rm /etc/resolv.conf 
  2. $ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

用 systemd-networkd 配置网络连接要用 systemd-networkd 配置网络服务,你必须指定带.network 扩展名的配置信息文本文件。这些网络配置文件保存到 /etc/systemd/network 并从这里加载。当有多个文件时,systemd-networkd 会按照字母顺序一个个加载并处理。

首先创建 /etc/systemd/network 目录。

 
 
  1. $ sudo mkdir /etc/systemd/network 

DHCP 网络

    首先来配置 DHCP 网络。对于此,先要创建下面的配置文件。文件名可以任意,但记住文件是按照字母顺序处理的。

 
 
  1. $ sudo vi /etc/systemd/network/20-dhcp.network 
 
 
  1. [Match] 
  2. Name=enp3*
  3.  
  4. [Network]
  5. DHCP=yes

正如你上面看到的,每个网络配置文件包括了一个或多个 “sections”,每个 “section”都用 [XXX] 开头。每个 section 包括了一个或多个键值对。[Match] 部分决定这个配置文件配置哪个(些)网络设备。例如,这个文件匹配所有名称以 ens3 开头的网络设备(例如 enp3s0、 enp3s1、 enp3s2 等等)对于匹配的接口,然后启用 [Network] 部分指定的 DHCP 网络配置。

静态 IP网络

    如果你想给网络设备分配一个静态 IP 地址,那就新建下面的配置文件。

 
 
  1. $ sudo vi /etc/systemd/network/10-static-enp3s0.network 
 
 
  1. [Match] 
  2. [Network]
  3.  
  4. Address=192.168.10.50/24
  5. Gateway=192.168.10.1
  6. DNS=8.8.8.8

正如你猜测的, enp3s0 接口地址会被指定为 192.168.10.50/24,默认网关是 192.168.10.1, DNS 服务器是 8.8.8.8。这里微妙的一点是,接口名 enp3s0 事实上也匹配了之前 DHCP 配置中定义的模式规则。但是,根据词汇顺序,文件 "10-static-enp3s0.network" 在 "20-dhcp.network" 之前被处理,对于 enp3s0 接口静态配置比 DHCP 配置有更高的优先级。

一旦你完成了创建配置文件,重启 systemd-networkd 服务或者重启机器。

 
 
  1. $ sudo systemctl restart systemd-networkd 

运行以下命令检查服务状态:

 
 
  1. $ systemctl status systemd-networkd 
  2. $ systemctl status systemd-resolved

用 systemd-networkd 配置虚拟网络设备systemd-networkd 同样允许你配置虚拟网络设备,例如网桥、VLAN、隧道、VXLAN、绑定等。你必须在用 .netdev 作为扩展名的文件中配置这些虚拟设备。

这里我展示了如何配置一个桥接接口。

Linux 网桥如果你想创建一个 Linux 网桥(br0) 并把物理接口(eth1) 添加到网桥,你可以新建下面的配置。

 
 
  1. $ sudo vi /etc/systemd/network/bridge-br0.netdev 
 
 
  1. [NetDev] 
  2. Name=br0
  3. Kind=bridge

然后按照下面这样用 .network 文件配置网桥接口 br0 和从接口 eth1。

 
 
  1. $ sudo vi /etc/systemd/network/bridge-br0-slave.network 
 
 
  1. [Match] 
  2. Name=eth1
  3.  
  4. [Network]
  5. Bridge=br0
 
 
  1. $ sudo vi /etc/systemd/network/bridge-br0.network 
 
 
  1. [Match] 
  2. Name=br0
  3.  
  4. [Network]
  5. Address=192.168.10.100/24
  6. Gateway=192.168.10.1
  7. DNS=8.8.8.8

最后,重启 systemd-networkd。

 
 
  1. $ sudo systemctl restart systemd-networkd 

你可以用 brctl 工具 来验证是否创建好了网桥 br0。

总结当 systemd 誓言成为 Linux 的系统管理器时,有类似 systemd-networkd 的东西来管理网络配置也就不足为奇。但是在现阶段,systemd-networkd 看起来更适合于网络配置相对稳定的服务器环境。对于桌面/笔记本环境,它们有多种临时有线/无线接口,NetworkManager 仍然是比较好的选择。






作者:Dan Nanni
来源:51CTO
目录
相关文章
|
Ubuntu Linux
几种Linux系统切换内核启动顺序方法
几种Linux系统切换内核启动顺序方法
|
10月前
|
Oracle 关系型数据库 Linux
linux系统重启网卡后网络不通(NetworkManager篇)
linux系统重启网卡后网络不通(NetworkManager篇)
1010 0
|
Linux Windows
OracleVirtualBo界面太小,操作界面对用户不友好?如何使得界面最大化且方便在Windows和Linux环境之间切换应用呢?
OracleVirtualBo界面太小,操作界面对用户不友好?如何使得界面最大化且方便在Windows和Linux环境之间切换应用呢?
197 0
OracleVirtualBo界面太小,操作界面对用户不友好?如何使得界面最大化且方便在Windows和Linux环境之间切换应用呢?
|
Linux Shell 编译器
Linux:关机&重启操作+用户登录和注销+添加用户+指定/修改密码+删除用户+查询用户信息+切换用户+查询当前用户/登录用户+用户组+修改用户的组+用户组和相关文件
Linux:关机&重启操作+用户登录和注销+添加用户+指定/修改密码+删除用户+查询用户信息+切换用户+查询当前用户/登录用户+用户组+修改用户的组+用户组和相关文件
287 0
Linux:关机&重启操作+用户登录和注销+添加用户+指定/修改密码+删除用户+查询用户信息+切换用户+查询当前用户/登录用户+用户组+修改用户的组+用户组和相关文件
|
Linux
linux第四课:改变文件的权限和属性(内含:1.修改权限命令chmod+2.临时切换用户用 sudo+3.chowm:改变文件所有者)
linux第四课:改变文件的权限和属性(内含:1.修改权限命令chmod+2.临时切换用户用 sudo+3.chowm:改变文件所有者)
255 0
linux第四课:改变文件的权限和属性(内含:1.修改权限命令chmod+2.临时切换用户用 sudo+3.chowm:改变文件所有者)
|
Linux
【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(四)进程切换命令
【Linux】【操作】Linux操作集锦系列之三——进程管理系列之(四)进程切换命令
|
Linux
Linux小技巧-路径快速切换
如果你的应用都部署在某个目录中,需要经常切换到一个比较深的路径中进行服务管理。那么可以自定义一个CDPATH变量,那么可以很轻松实现切换。
90 0
|
Shell Linux 数据安全/隐私保护
Linux su命令 – 切换用户、用户提权
su命令用于切换当前用户身份到指定用户或者以指定用户的身份执行命令或程序。 普通用户切换到root用户,可以使用su -- 或su root,但是必须输入root密码才能完成切换。root用户切换到普通用户,可以使用su username,不需要输入任何密码即可完成切换。
470 0
|
Linux Docker 容器
linux版本halo切换宝塔docker部署Halo
linux版本halo切换宝塔docker部署Halo
262 0
linux版本halo切换宝塔docker部署Halo
|
Linux Shell
【操作系统 | Linux】 文件管理五件套(查看,切换,创建删除,复制移动)
🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 🌐 推荐一款找工作神器网站: 牛客网🎉🎉|笔试题库|面试经验|实习招聘内推 还没账户的小伙伴 速速点击链接跳转牛客网登录注册 开始刷爆题库,速速通关面试吧🙋‍♂️ 系列专栏,快订阅追更吧! Linux实战99精讲 🎉🎉 @[toc]
【操作系统 | Linux】 文件管理五件套(查看,切换,创建删除,复制移动)