systemd-netword 使用
经常用 debian 的系统,一直配置网络都是在/etc/network/interface/ ,但是在ubuntu 里,配置网络主要用 netplan。两者配置起来还是有不小的区别,最近查了下,现在整体的趋势是用 systemd-networkd,这是 systemd 自带的网络配置工具。netplan 本质上是一个语法转换器,最终的配置也是用的 systemd-networkd。而 network/interface 也比较老旧了,现在的系统是使用 systemd 初始化的,自然也都有 systemd-networkd 工具。
正好需要配置一个网关小主机,学习一下 systemd-networkd 的配置方式。
配置文件说明
systemd-networkd 的配置文件在 /etc/systemd/network/ 目录下,文件主要有两种后缀
- .network 用于配置网络
- .netdev 用于定义虚拟设备
网络配置
我的网关小主机有三个网卡,我希望 eth0 作为 wan 口,eth1 和 eth2 创建网桥作为 lan 口。
首先 eth0 作为 wan 口,
# file eth0.network
[Match]
Name=eth0
[Network]
DHCP=yes
然后定义一个网桥 br0.netdev
# file br0.netdev
[NetDev]
Name=br0
Kind=bridge
再将 eth1 和 eth2 都加入到网桥里
# file eth1.network
[Match]
Name=eth1
[Network]
Bridge=br0
# file eth2.network
[Match]
Name=eth2
[Network]
Bridge=br0
然后创建 br0 的配置,正好 systemd-networkd 自身也带了 dhcp server,就不需要用 dnsmasq 来配置了。
# file br0.network
[Match]
Name=br0
[Network]
# 启用 IPv6 的链路本地地址
LinkLocalAddressing=ipv6
# 定义本网口的 IP
Address=192.168.23.1/24
DNS=1.1.1.1
DNS=223.6.6.6
# 开启 IP 转发,这是网卡层面的配置,net.ipv4.ip_forward=1 还是需要配置
IPForward=yes
# 开启 IP 伪装,这个配置了它会自动配 iptables 里配置
IPMasquerade=yes
DHCPServer=yes
# 这个表示没有插网线的情况下也执行配置
ConfigureWithoutCarrier=yes
[DHCPServer]
DNS=223.6.6.6 223.5.5.5
# DHCP 地址的起始 IP
PoolOffset=10
# DHCP 地址的数量,末尾 IP 就是 Offset + Size,这里配置范围的方式和 netplan,dnsmasq 不同
PoolSize=200
# 默认租约时间
DefaultLeaseTimeSec=7d
# 最大租约时间
MaxLeaseTimeSec=7d
# 是否下发 DNS
EmitDNS=yes
# 是否下发网关地址,也就是上面给这个网卡配置的地址
EmitRouter=yes
注意这些文件需要权限是 644。
配置好后执行 systemctl restart systemd-networkd 启动就好了,遇到报错就去 journalctl 里查看。
状态查看
还有一个 networkctl 命令可以查看每个网卡的配置情况
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp2s0 ether enslaved configured
3 eno1 ether routable configured
4 wwan0 ether off unmanaged
5 br0 bridge routable configured
6 wlan0 wlan off unmanaged
7 wt0 wireguard routable unmanaged
参考
https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
Read other posts