使用 systemd 配置网络

通常我们在 Linux 中使用 ifconfig 或 ip 命令来配置网络,但这样配置是临时的,重启系统之后又没了。那怎么样才能优雅地配置网络呢?

其实在 iMX8 Yocto BSP 中,默认使用 systemd 系统管理程序作为第一个进程,并且提供了 systemd-networkd 服务,该服务会从 /etc/systemd/network 目录读取配置文件来管理网络设备。

网络管理命令

Yocto 默认提供了 systemd,使用 Systemd-Networkd 接管网络配置(位于 /lib/systemd/systemd-networkd),因此我们可以使用如下命令查看、控制网络服务。

# 查看网络服务的状态
systemctl status systemd-networkd

# 启动网络服务
systemctl start systemd-networkd

# 停止网络服务
systemctl stop systemd-networkd

# 重启网络服务
systemctl restart systemd-networkd

# 设置开机启动网络服务
systemctl enable systemd-networkd

# 禁止开机启动网络服务
systemctl disable systemd-networkd

网络配置文件

启动系统后,为了方面管理网络配置,我们可以在 /etc/systemd/network/ 目录中添加网络配置文件。

例如,添加一个动态分配 IP 的配置文件 10-wired-dhcp.network,内容如下:

[Match]
Name=eth0

[Network]
DHCP=yes

[DHCP]
RouteMetric=0

再添加一个静态 IP 配置文件 20-wired-static.network,内容如下:

[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
DNS=192.168.1.1
DNS=114.114.114.114

[Route]
Gateway=192.168.1.1
Metric=100

文件名前面的数字表示优先级,数字越小优先级越高,因此上述两个配置文件会优先使用 dhcp 网络配置。

重启网络服务即可看到效果

systemctl restart systemd-networkd

使用 networkctl 命令查看网卡状态

root@imx8mqevk:~# networkctl
IDX LINK TYPE     OPERATIONAL SETUP
  1 lo   loopback carrier     unmanaged
  2 eth0 ether    routable    configuring

Leave a Reply