在吃掉 udev 和谋划收编 dbus 后, systemd 又将它的魔爪伸向了网络管理方面. 虽然这已经是 systemd 209 时候的旧闻, 不过因为整个功能太过不完善 (被吐槽有超多 bug, 以及各种基本功能缺失) 以及没有文档, 上游一直没有大力推广.
本文仅就最为简单普通的有线网络连接介绍 systemd-networkd 的打开方式. (wifi 呀, ppp 呀, vpn 呀之类的复杂配置现在都不支持哦) (大部分信息翻译自 ArchWiki)
先介绍一些基本的信息:
配置文件存放在 /usr/lib/systemd/network (上游提供的配置), /run/systemd/network (运行时配置), 以及 /etc/systemd/network (本地配置). 其中 /etc/systemd/network 有着最高的优先级.
有三类配置文件:
- .network 文件: 给匹配到的设备应用一个网络配置
- .netdev 文件: 给匹配到的环境创建一个虚拟的网络设备
- .link 文件: 当一个网络设备出现时, udev 会寻找第一个匹配到的 .link 文件.
他们都遵循一些相同的规则:
- 如果 [Match] 部分满足了条件, 在接下来的段落中的配置会被应用
- [Match] 部分可以接受不止一项条目. 在这种情况下, 只有当每一个条目都被满足时, 这个配置才会被启用
- 空白的 [Match] 部分表示这个配置在任何情况下都会被应用
- 每一项条目都是 KEY=VALUE 格式的键值对
- 所有的配置文件会被收集并按字典序排序后再处理, 无论它们在哪个目录
- 相同名字的配置文件会相互替代
最简单的配置, 对我们来说最重要的 .network 文件即可完成. 对于常见参数的简单解释:
[Match]
Name= 设备名 (比如Br0, enp4s0, 也可以用通配符, 比如 en*)
Host= 匹配的 hostname
Virtualization= 一个布尔值, 检测你的系统是否运行在一个虚拟化环境中. 也就是说, Virtualization=no 只会在宿主机上满足, 而 Virtualization=yes 会应用到任何虚拟机或 container.
[Network]
DHCP= 一个布尔值. 设为 true 的时候, 会启用 systemd-networkd 自带的基础 DHCPv4 支持.
DNS= DNS 服务器地址.
Bridge= 如果要将这个连接加入网桥, 在这里写入目标网桥的名字
Address= 静态的 IPv4 或者 IPv6 地址, 以及相应的用/<数字>方式表示的掩码(如 192.168.1.90/24).
Gateway= 网关地址.
如果需要指定多个 DNS, Address 或者 Gateway, 你可以多次指定相应的键值对. (也就是说, 多写几行 DNS=xxx, DNS=yyy…)
最后, 一个简单的 DHCP 配置:
[Match]
Name=en*
[Network]
DHCP=yes
一个简单的静态 IP 配置:
[Match]
Name=ens3
[Network]
Address=192.168.1.87/24
Gateway=192.168.1.254
DNS=192.168.1.254
更多介绍和样例请见 man 5 systemd.network <(=^_^=)>
systemd, 人类的希望!
希望将来能完美支持 VPN, Network-Manager 老是各种失灵。
看起来很适合服务器(
嗯, 目测现在主要就是给服务器用的呢…
能不能把那个tag cloud 干掉啊,太难看了……
其实还挺萌的嘛(
还能放大缩小呢……
就是容易让人想起小C曾经做过的那个
小C那个是改字号实现的, 都不是平滑变化的… 而且还是五颜六色的…
这个至少看起来不那么坑 xD
replay 的邮件都进了spam了……
这个评论的框最窄能到多少啊
嗯, 可以非常窄的…
我擦,点了replay之后,连Leave a Reply都变窄了
对! 这是个 feature 23333
不知道最窄是什么情况啊
你这是用什么搭的博客啊
标准 WordPress 嗯~
不玩了,感觉马上就要被玩坏了
达到最窄的情况了!!
嗯, 达到了 xD
所以这是一个完善的 feature 哟 (大雾
還是挺萌的嘛
我也来试一下最窄的效果是……..酱紫的么….pia肥猫…
好挤,透不过来气……
我也挤一挤。
(坑