06 - 网络配置(ifupdown / systemd-networkd / Netplan)
前提条件
- 已完成 Debian 12 Bookworm 最小化安装(主机名
linuxdc,IP192.168.1.100/24) - 系统已升级、apt 源优化、时间同步完成
- 以 root 身份登录,或 ops 用户执行
sudo -i切换至 root 环境 - 虚拟机环境:VMware Workstation Pro,网络适配器为桥接(Bridged)或 NAT
- 当前 IP 仍为安装时手动设置的
192.168.1.100/24(在/etc/network/interfaces中)
全局网络参数
| 参数 | 值 |
|---|---|
| 接口名 | ens33 |
| IP / 前缀 | 192.168.1.100/24 |
| 网关 | 192.168.1.1 |
| DNS | 8.8.8.8、8.8.4.4 |
详细步骤
Debian 12 默认使用 ifupdown(/etc/network/interfaces),现代生产环境推荐迁移至 systemd-networkd。本章对比三种方案,以 systemd-networkd 为主要推荐方式。
1. 当前状态检查
ip addr show
cat /etc/network/interfaces
systemctl status networking
2. 方案一:继续使用经典 ifupdown(兼容旧习惯,最简单)
编辑主配置文件:
vim /etc/network/interfaces
推荐生产配置示例:
# 回环接口
auto lo
iface lo inet loopback
# 主网卡(根据实际情况替换 ens33 / enp0s3)
auto ens33
iface ens33 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
应用配置:
ifdown ens33 --force && ifup ens33
# 或重启网络服务
systemctl restart networking
注意
ifdown ens33 会断开当前 SSH 连接,建议先在本地控制台操作,或使用 ip addr add / del 手动切换。
检查点
ip -br addr show ens33 # 显示 192.168.1.100/24
ping -c 4 8.8.8.8 # 0% packet loss
3. 方案二:迁移到 systemd-networkd(推荐生产方式)
停用 ifupdown 管理的网络服务:
systemctl stop networking
systemctl disable networking
启用 systemd-networkd 和 systemd-resolved:
systemctl enable --now systemd-networkd
systemctl enable --now systemd-resolved
创建网络配置文件:
mkdir -p /etc/systemd/network
vim /etc/systemd/network/10-static-ens33.network
文件内容:
[Match]
Name=ens33
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
[Link]
RequiredForOnline=routable
配置 DNS 解析(将 /etc/resolv.conf 指向 systemd-resolved):
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
应用并验证:
systemctl restart systemd-networkd
networkctl status
ip -br addr show
resolvectl status
检查点
networkctl status ens33显示State: routableresolvectl status显示 DNS 为8.8.8.8和8.8.4.4ping -c 4 8.8.8.8正常通信
4. 方案三:使用 Netplan(可选,偏 Ubuntu 风格)
安装 Netplan:
apt install -y netplan.io
创建配置文件:
vim /etc/netplan/01-netcfg.yaml
内容示例:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
YAML 缩进
YAML 对缩进敏感,必须使用空格(不可用 Tab),建议用 vim 编辑(已在 .vimrc 中设置 expandtab)。
应用配置:
netplan generate
netplan apply
netplan status
检查点
netplan status 显示 ens33 状态为 online,IP 为 192.168.1.100/24。
5. 最终验证(所有方案通用)
ip -br addr show
ip route show
ping -c 4 8.8.8.8
ping -c 4 www.baidu.com
resolvectl query www.baidu.com
实践任务
- 检查当前网络配置使用哪种方式(ifupdown / systemd-networkd / netplan)
- 将网络配置迁移到 systemd-networkd,设置静态 IP
192.168.1.100/24,DNS8.8.8.8、8.8.4.4 - 重启网络服务后,用
networkctl status和resolvectl status验证 - (可选)尝试 Netplan 配置并对比使用感受
自测问题
1. Debian 12 默认使用哪种网络管理方式?
Debian 12 默认使用 ifupdown,配置文件为 /etc/network/interfaces,由 networking.service 管理。这是 Debian 历史上的传统网络管理方式,简单可靠,但不支持网络热插拔和动态配置。NetworkManager 在桌面版中默认安装,服务器版不安装。
2. systemd-networkd 和 ifupdown 的主要区别是什么?
ifupdown 是静态配置工具,通过 shell 脚本执行,功能有限,不支持网络状态事件响应。systemd-networkd 是 systemd 生态的原生网络管理守护进程,支持热插拔、网络状态跟踪(networkctl)、与 systemd-resolved 深度集成、配置文件语法更规范,适合现代容器化和云原生环境。在 Debian 服务器上,systemd-networkd 是更现代的选择,维护成本更低。
3. 如何让 systemd-resolved 接管 DNS 解析(/etc/resolv.conf 指向哪里)?
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
/run/systemd/resolve/stub-resolv.conf 包含 127.0.0.53,所有 DNS 查询通过 systemd-resolved 的本地桩解析器(stub resolver)处理,再转发至配置的上游 DNS 服务器,支持 DNS 缓存、DNSSEC 等特性。
4. 如果迁移后网络不通,最常见的三种排查方向是什么?
- 配置文件语法错误:
journalctl -u systemd-networkd -n 50查看错误日志,常见问题包括.network文件中[Match]的Name=接口名与实际不符(用ip link show确认接口名) - DNS 解析失败但网络连通:
ping 8.8.8.8成功但ping www.baidu.com失败,说明 DNS 配置有问题。检查/etc/resolv.conf内容,确认systemd-resolved服务已启动,或直接检查resolvectl status - 旧配置未清除:ifupdown 和 systemd-networkd 同时管理同一接口会冲突。确认已执行
systemctl disable networking,并清空/etc/network/interfaces中对应接口的配置
总结
本章完成了网络配置的现代化迁移。生产环境强烈推荐 systemd-networkd(轻量、可靠、与 systemd 集成完善)。ifupdown 仍可继续使用(简单兼容),Netplan 适合有 Ubuntu 背景的团队。后续所有章节假设网络已稳定在 192.168.1.100/24,DNS 为 8.8.8.8 和 8.8.4.4。