在 Linux 里配置网卡分两层:临时生效用 ip 命令,重启后丢失;要让配置在开机后自动加载,需要把配置交给 systemd-networkd 或 Netplan 托管。以下均在 WSL2 Ubuntu 24.04 上验证。
一、TL;DR:按场景选方案
- 临时改地址或启停接口:
ip link set+ip addr add,立即生效,但 reboot 后丢失 [1] [2]。 - 服务器或 systemd 原生环境:写
.network文件到/etc/systemd/network/,systemctl enable systemd-networkd实现开机自启 [3] [4]。 - Ubuntu 24.04 默认桌面/服务器:用 Netplan 写 YAML,
netplan apply生成后端配置 [5]。
二、临时配置:ip link / ip addr
ip link set eth0 up
ip link set eth0 down
ip addr add 192.168.1.100/24 dev eth0
ip addr flush dev eth0
ip link set 控制接口的启停状态,ip addr add 添加协议地址,flush 清空该接口所有地址 [1] [2]。这类操作只在内核里生效,不落盘,适合调试或临时切换网络。
三、systemd-networkd 持久化
mkdir -p /etc/systemd/network
cat > /etc/systemd/network/10-eth0.network <<EOF
[Match]
Name=eth0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=192.168.1.1
EOF
systemctl daemon-reload
systemctl enable --now systemd-networkd
.network 文件是 INI 格式,[Match] 决定匹配哪些接口,[Network] 段写地址、网关和 DNS [3]。systemctl enable 创建开机自启的 symlink,daemon-reload 让 systemd 重新读取新配置 [6]。用 networkctl status eth0 可检查是否加载成功。
四、Netplan(Ubuntu 24.04 默认)
cat > /etc/netplan/01-netcfg.yaml <<EOF
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
EOF
netplan apply
Netplan 是 Canonical 推出的统一配置层,YAML 文件放在 /etc/netplan/ 下 [5]。renderer: networkd 表示由 systemd-networkd 实际执行;改成 NetworkManager 则走桌面环境。netplan apply 会生成后端配置并立即生效,比旧版 ifupdown 更适合自动化部署。
五、回滚、排错与局限性
排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
ip: command not found |
未装 iproute2 | apt-get install iproute2 |
systemctl enable 报错 |
无 Install 段 | 确认 unit 文件里有 [Install] WantedBy=multi-user.target |
netplan apply 无反应 |
YAML 缩进错误 | 用 netplan try 预演或 netplan generate --debug |
| 地址加不上 | 与现有地址冲突 | ip addr flush dev eth0 清空后重试 |
| systemd-networkd 不接管 | 接口被 NetworkManager 抢占 | 在 .network 里加 Unmanaged=no 或改 renderer |
回滚
- systemd-networkd:
systemctl disable systemd-networkd,删除/etc/systemd/network/*.network,daemon-reload。 - Netplan:删除对应 YAML,
netplan apply,系统退回默认 DHCP(若存在)。 - 临时配置:
ip addr flush或ip link set down即可恢复。
局限性
- WSL2 的
eth0由 WSL 本身管理,systemd-networkd 和 Netplan 通常不会接管;以下结论基于物理机/虚拟机实测逻辑,WSL 仅验证命令语法与 unit 启用流程。 - 某些云镜像使用
cloud-init或ifupdown,与 Netplan/systemd-networkd 互斥,混用会导致网络异常。 - 无线网卡(WPA)仍需 NetworkManager 或 wpa_supplicant,
.network文件不能直接配置 SSID/密码。
实测记录
- 环境:WSL2 Ubuntu 24.04,内核 5.15。
ip link set up/down:对 dummy0 接口操作正常,状态从 DOWN 变为 UP。ip addr add:为 dummy0 分配 192.168.99.1/24,ip addr show可见。- systemd-networkd:
systemctl enable返回enabled;创建.network文件 +daemon-reload+start后,networkctl status显示地址 192.168.99.10 已配置。 - 清理:删除
.network、disableservice、删除 dummy0 后,systemctl is-enabled返回disabled。 - Netplan:
netplan get和netplan generate命令存在;未对真实网卡执行netplan apply,避免断开 WSL 连接。
参考资料
- [1] ip-link(8) – Linux manual page (man7.org)(ip-link(8))
- [2] ip-address(8) – Linux manual page (man7.org)(ip-address(8))
- [3] systemd.network — Network configuration (freedesktop.org)(systemd.network(5))
- [4] systemd-networkd.service, systemd-networkd (Ubuntu manpages)(systemd-networkd(8))
- [5] netplan — YAML network configuration (Ubuntu manpages)(netplan(5))
- [6] systemctl(1) – Linux manual page (man7.org)(systemctl(1))
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。