systemd-networkd 是 systemd 生态中专为现代 linux 设计的轻量级声明式网络管理服务,替代脚本化配置,适用于服务器、容器宿主机等追求稳定与可复现性的场景,与 systemd-resolved 协同处理 dns,不依赖图形界面。

systemd-networkd 是 systemd 生态中专为现代 Linux 设计的轻量级网络管理服务,它用声明式配置替代脚本化操作,适合服务器、容器宿主机和嵌入式系统等追求稳定与可复现性的场景。它不依赖图形界面或复杂守护进程,核心逻辑清晰、启动快、日志统一,且与 systemd-resolved 协同处理 DNS,是 ifconfig + /etc/network/interfaces 或 NetworkManager 之外的务实选择。
确认服务状态与启用
systemd-networkd 默认在多数 systemd 发行版(如 Debian 12+、Ubuntu 22.04+、Fedora 36+)中已预装,但通常未启用。需手动激活:
- 检查是否运行:
systemctl is-active systemd-networkd,若返回inactive或报错,则服务未启用 - 启用并立即启动:
sudo systemctl enable --now systemd-networkd - 验证运行状态:
systemctl status systemd-networkd,确保显示active (running)
注意:启用后,传统工具(如 ifup/ifdown)可能失效,因为接口会被 systemd-networkd 接管;若同时运行 NetworkManager,建议停用其对物理接口的管理,避免冲突。
配置文件结构与存放位置
所有配置以 .network 为后缀,采用 INI 格式,按字母顺序加载,优先级从高到低为:/etc/systemd/network/ > /run/systemd/network/ > /usr/lib/systemd/network/。推荐将自定义配置全部放在 /etc/systemd/network/ 下,并以两位数字前缀命名(如 10-eth0.network),确保加载顺序可控。
-
[Match]节用于匹配接口:支持Name=eth0、Type=ether、MACAddress=00:11:22:33:44:55等条件,多个条件需同时满足 -
[Network]节定义基础网络行为:IP 分配方式(DHCP 或静态)、网关、DNS、路由策略等 -
[Address]和[Route]可作为独立节出现,用于更精细地添加多个地址或多条路由,比全写在[Network]中更清晰
配置修改后无需重启服务,执行 sudo networkctl reload 即可重新加载全部配置;对单个接口生效,可用 sudo networkctl reconfigure eth0。
常用配置示例:静态 IP 与默认网关
以有线接口 eth0 配置静态 IPv4 地址 192.168.1.50/24、网关 192.168.1.1、DNS 1.1.1.1 为例:
# /etc/systemd/network/20-eth0.network [Match] Name=eth0 <p>[Network] DHCP=no Address=192.168.1.50/24 Gateway=192.168.1.1 DNS=1.1.1.1 </p>
若需额外添加一条到 10.10.0.0/16 的静态路由,且走另一台网关 192.168.1.253,可追加一个 [Route] 节:
[Route] Destination=10.10.0.0/16 Gateway=192.168.1.253 Metric=200
配置保存后运行 sudo networkctl reconfigure eth0,再用 networkctl status eth0 查看是否已应用,ip route show 验证路由表是否更新。
诊断与日常管理
networkctl 是主要交互命令,比 ifconfig 或 ip link 更聚焦于“连接状态”而非底层设备细节:
-
networkctl list:列出所有网络链接及其整体状态(routable、configured、carrier等) -
networkctl status eth0:查看接口详细信息,含配置来源、地址、网关、DNS、MTU、LLDP 对端等 -
networkctl route show:以结构化方式展示当前生效的路由条目(含来自 DHCP 或 .network 文件的) -
networkctl flush-caches:清空 systemd-resolved 的 DNS 缓存(配合使用)
遇到连通问题时,先运行 networkctl status 看接口是否为 routable;再查 journalctl -u systemd-networkd -n 50 --no-pager 定位配置加载失败原因(如语法错误、匹配失败、DHCP 超时等)。











