从 Ubuntu 17.10 以后,Ubuntu 开始使用 Netplan 作为默认的网络配置方式。到了 Ubuntu Server 18.04、20.04 这些版本,服务器网络配置通常会写在 /etc/netplan/ 目录下的 YAML 文件中,再由 Netplan 交给 systemd-networkd 或 NetworkManager 这类后端服务实际管理网络。
Netplan 的优点是配置格式统一,也更适合云服务器、自动化部署和新版本 Ubuntu 的默认网络管理方式。不过对于一些习惯老式 Linux 网络配置的人来说,/etc/network/interfaces 仍然更直观。尤其是老服务器迁移、传统脚本兼容、特定网络环境、桥接配置、内网实验机或一些旧项目部署时,继续使用 ifupdown 反而更顺手。
这篇文章记录的是在 Ubuntu Server 18.04 / 20.04 中禁用 Netplan,改回使用 ifupdown 管理网络,并将 DNS 管理切换到 resolvconf 的方法。
一、操作前提醒 #
这类操作会直接影响服务器网络连接,尤其是远程服务器、VPS、云主机,一旦配置错误,可能会导致 SSH 断开后无法重新连接。
如果是在本地物理机、虚拟机控制台、VNC 或 KVM 环境下操作,风险相对可控。如果是在远程服务器上操作,建议提前准备好以下内容:
- 确认自己有控制台或救援模式入口
- 记录当前 IP、网关、DNS、网卡名称
- 备份现有 Netplan 配置
- 先确认网络配置文件没有语法错误
- 不要在业务高峰期操作
先查看当前网卡名称:
ip link或者:
ip addr常见网卡名称可能是:
eth0
ens33
ens160
enp0s3不同系统、虚拟化平台、云平台的网卡名称可能不同。下面示例中使用的是 eth0,实际操作时要替换成自己机器上的网卡名称。
二、备份当前 Netplan 配置 #
在修改网络管理方式之前,先备份原来的 Netplan 配置:
sudo cp -a /etc/netplan /etc/netplan.bak.$(date +%F-%H%M%S)也可以查看当前配置内容:
ls -l /etc/netplan/
cat /etc/netplan/*.yaml如果后续切换失败,可以通过这些备份恢复原来的网络配置。
三、安装 ifupdown 和 resolvconf #
先安装传统网络配置所需的软件包:
sudo apt update
sudo apt install ifupdown resolvconf其中:
ifupdown用来管理/etc/network/interfaces中定义的网络接口resolvconf用来根据接口配置生成 DNS 解析配置dns-nameservers这类配置通常需要配合resolvconf才能写入解析文件
安装完成后,可以检查命令是否存在:
which ifup
which ifdown
which resolvconf四、配置 /etc/network/interfaces #
编辑传统网络配置文件:
sudo vi /etc/network/interfaces也可以使用 nano:
sudo nano /etc/network/interfaces静态 IP 配置示例 #
如果服务器使用固定 IP,可以参考下面的配置:
# This file describes the network interfaces available on your system
# and how to activate them.
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4需要根据自己的实际网络环境修改:
eth0
192.168.1.2
255.255.255.0
192.168.1.1
8.8.8.8 8.8.4.4如果是在内网服务器中,DNS 可以写路由器地址或内网 DNS,例如:
dns-nameservers 192.168.1.1如果公司或机房有自己的 DNS,应该优先使用内部 DNS。
DHCP 配置示例 #
如果服务器通过 DHCP 自动获取 IP,可以使用下面的配置:
# This file describes the network interfaces available on your system
# and how to activate them.
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcpDHCP 方式适合普通虚拟机、测试机、家庭服务器或由路由器自动分配地址的环境。
不过,如果是长期运行的服务器,通常更建议使用固定 IP,避免 IP 地址变化后影响 SSH、服务访问或防火墙规则。
五、先测试 ifupdown 配置 #
配置完成后,可以先尝试重新启用接口。
如果是本地环境,可以执行:
sudo ifdown --force eth0
sudo ifup eth0或者:
sudo ifdown --force eth0 lo && sudo ifup -a如果是远程 SSH 环境,不建议直接执行这类命令,因为网络接口重启期间可能会断开连接。更稳妥的做法是准备控制台入口后再执行。
执行后检查 IP 是否正常:
ip addr show eth0检查路由:
ip route测试网关:
ping -c 4 192.168.1.1测试公网 IP:
ping -c 4 8.8.8.8测试 DNS:
ping -c 4 google.com如果 IP 能 ping 通,但域名不能解析,通常说明 DNS 配置还没有生效,需要检查 resolvconf 和 /etc/resolv.conf。
六、启用 networking 服务 #
确认 /etc/network/interfaces 配置正确后,启用传统 networking 服务:
sudo systemctl enable networking
sudo systemctl restart networking查看服务状态:
systemctl status networking如果状态为 active,说明 networking 服务已经正常运行。
七、停止并禁用 Netplan 相关后端服务 #
Netplan 本身是配置工具,实际管理网络的通常是 systemd-networkd 或 NetworkManager。Ubuntu Server 默认更多见的是 systemd-networkd;桌面版通常会使用 NetworkManager。
如果已经决定完全改用 ifupdown,可以停止并禁用下面这些服务:
sudo systemctl stop systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved
sudo systemctl disable systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved其中:
systemd-networkd是常见的 Netplan 后端之一networkd-dispatcher会监听 networkd 状态变化并执行相关事件脚本systemd-networkd-wait-online用来等待 networkd 管理的网络接口上线systemd-resolved是 systemd 的 DNS 解析服务
如果希望彻底防止这些服务再次被启动,可以继续 mask:
sudo systemctl mask systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved需要注意,mask 比 disable 更强。被 mask 的服务即使手动 start 也无法启动,除非先执行 unmask。
八、卸载 Netplan 软件包 #
如果确认不再使用 Netplan,可以卸载相关软件包:
sudo apt purge nplan netplan.io有些系统中可能没有 nplan 这个包,只存在 netplan.io。如果提示找不到某个包,可以忽略不存在的那个。
卸载后可以清理不再需要的依赖:
sudo apt autoremove也可以检查 Netplan 命令是否还存在:
which netplan如果没有输出,说明 Netplan 命令已经不存在。
九、处理 DNS 解析文件 #
切换到 ifupdown + resolvconf 后,需要确认 /etc/resolv.conf 指向的是 resolvconf 生成的文件。
先查看当前链接:
ls -l /etc/resolv.conf如果它不是指向:
/run/resolvconf/resolv.conf可以重新创建软链接:
sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf然后查看 DNS 配置:
cat /etc/resolv.conf如果配置正常,里面应该能看到 nameserver 记录,例如:
nameserver 8.8.8.8
nameserver 8.8.4.4如果没有看到对应 DNS,可以重启 resolvconf:
sudo systemctl restart resolvconf然后重新启用网卡:
sudo ifdown --force eth0
sudo ifup eth0再检查:
cat /etc/resolv.conf十、重启系统并验证 #
完成配置后,建议重启系统,确认开机后网络仍然正常:
sudo reboot重启后依次检查:
ip addr
ip route
cat /etc/resolv.conf
systemctl status networking测试网络:
ping -c 4 8.8.8.8
ping -c 4 google.com如果公网 IP 和域名都能正常访问,说明网络和 DNS 都已经切换成功。
十一、安装阶段禁用 Netplan #
如果是全新安装 Ubuntu Server,也可以在安装阶段选择不用 Netplan。
在安装介质启动菜单中,可以通过启动参数加入:
netcfg/do_not_use_netplan=true这个方法适合全新安装时使用。对于已经安装好的系统,一般还是按照前面的方法手动切换。
如果是 VPS 或云主机,有些 VNC 控制台可能会拦截按键,导致安装阶段不方便修改启动参数。这种情况下,安装完成后再切换会更实际。
十二、常用排查命令 #
查看网卡状态:
ip addr查看路由:
ip route查看接口配置文件:
cat /etc/network/interfaces查看 networking 服务状态:
systemctl status networking查看 DNS 文件指向:
ls -l /etc/resolv.conf查看 DNS 内容:
cat /etc/resolv.conf查看被 mask 的服务:
systemctl list-unit-files --type=masked --all查看某个服务的反向依赖:
systemctl list-dependencies systemd-networkd --reverse查看 Netplan 是否仍然存在:
which netplan
dpkg -l | grep netplan十三、如何恢复回 Netplan #
如果后续想切回 Netplan,需要恢复之前禁用的服务,并重新安装 Netplan。
先解除 mask:
sudo systemctl unmask systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved重新安装 Netplan:
sudo apt update
sudo apt install netplan.io恢复或重新创建 /etc/netplan/ 下的 YAML 配置文件。
例如 DHCP 配置可以写成:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true然后应用:
sudo netplan generate
sudo netplan apply如果使用 systemd-networkd,还需要启用相关服务:
sudo systemctl enable systemd-networkd systemd-resolved
sudo systemctl restart systemd-networkd systemd-resolved如果之前修改过 /etc/resolv.conf,还需要根据 systemd-resolved 的方式恢复链接。常见方式之一是:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf恢复完成后,测试网络和 DNS:
ping -c 4 8.8.8.8
ping -c 4 google.com十四、完整操作命令整理 #
如果是在本地控制台操作,并且网卡名是 eth0,完整流程可以整理为:
sudo cp -a /etc/netplan /etc/netplan.bak.$(date +%F-%H%M%S)
sudo apt update
sudo apt install ifupdown resolvconf
sudo vi /etc/network/interfaces
sudo systemctl enable networking
sudo systemctl restart networking
sudo systemctl stop systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved
sudo systemctl disable systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved
sudo systemctl mask systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved
sudo apt purge nplan netplan.io
sudo apt autoremove
sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
sudo reboot注意:这只是流程整理,真正执行前一定要先把 /etc/network/interfaces 配置好,并确认网卡名称、IP、网关、DNS 都正确。
总结 #
Ubuntu 18.04 / 20.04 默认使用 Netplan 管理网络,但如果更习惯传统方式,或者需要兼容旧项目、旧脚本、特殊网络环境,也可以切换回 ifupdown。
核心思路是:
- 安装
ifupdown和resolvconf - 配置
/etc/network/interfaces - 启用
networking服务 - 停止并禁用
systemd-networkd等相关服务 - 卸载
netplan.io - 修正
/etc/resolv.conf指向resolvconf - 重启后验证 IP、路由和 DNS
这个方法在自建服务器、实验环境、物理机和普通虚拟机中比较适合。但如果是云服务器、自动化部署环境,或者依赖云平台初始化网络配置的系统,建议谨慎操作,避免因为网络配置切换导致远程无法连接。