Ubuntu 禁用 Netplan 而改用 ifupdown 配置网络

Kevin 教程 2,017 次浏览 1条评论

安装 Ubuntu Server 18.04 后发现网络配置方法有了变化,由原来的 ifupdown 改为了 Netplan。虽然网上可以轻易找到 Netplan 配置教程,如 Linode 这个更详细官方文档,但对于需要沿用 ifupdown 的场景就会带来障碍。下面介绍如何禁用 Netplan 改回 ifupdown,并将默认 DNS 管理由 systemd-resolved 改回 resolvconf。

系统安装时设置

Netplan FAQ 里有提到,可以在系统安装时设置不用 Netplan(引导界面按 F6 键设置如下参数)。

netcfg/do_not_use_netplan=true

该方法似乎只在实体机上具操作性,用 VNC 和 VirtualBox 测试按 F6 没反应。网上查询说因安全原因拦截了部分按键,没有找到可行解决办法。试了几个 VNC 客户端和修改 ISO 镜像文件设置均无解。

系统安装后设置

下面操作如非 root 用户请在命令前加sudo。过程中需仔细检查确认,弄错了会丢失网络连接。

1. 安装 ifupdown、resolvconf 软件包。

apt install ifupdown resolvconf

2. 修改/etc/network/interfaces文件配置网络连接。

如设置 DHCP 网络(修改其中网卡名称。如要使用 eth0 经典命名方式,该文曾有介绍)。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

或设置静态网络(其中 DNS 语句如果不改回 resolvconf 将不会起作用,而需要在 systemd-resolved 所属的/etc/systemd/resolved.conf配置文件里设置)。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address xxx.xxx.xxx.xxx
        netmask xxx.xxx.xxx.xxx
        gateway xxx.xxx.xxx.xxx
        dns-nameservers 8.8.8.8 8.8.4.4

3. 关闭 & 重开网络接口,设置networking服务开机启动和重启使设置生效。

ifdown --force eth0 lo && ifup -a
systemctl enable networking
systemctl restart networking

之后可通过systemctl status networking检查是否设置成功。

4. 停止、取消和禁止 Netplan 相关服务运行,并移除 Netplan 软件包及其配置文件。

解释下所操作的服务:

  • networkd-dispatcher是 Netplan 后端服务(桌面版则是NetworkManager);
  • networkd-dispatcher是 Netplan 守护服务,可通过监听连接状态以执行特定事件操作;
  • systemd-networkd-wait-online用于检测systemd-networkd所管理网络接口的连接状态;
  • systemd-resolved新的 DNS 管理服务,其配置文件里有的参数依赖 Netplan 后端服务工作;
systemctl stop systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved
systemctl disable systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved
systemctl mask systemd-networkd networkd-dispatcher systemd-networkd-wait-online systemd-resolved
apt purge nplan netplan.io

后续如要切换回 Netplan,别忘了恢复上述系统服务。将带有 mask 的命令换成 unmask 运行一次,不然即使 start  disable 了也没法使用服务。

其它可能用到的命令扩展:

  • systemctl list-dependencies systemd-networkd --reverse查询指定服务所关联的依赖项;
  • systemctl list-unit-files --type=masked --all列出/lib/systemd/system下被禁止的服务;

6. 完成以上操作就设置完成了,全文实测在 Ubuntu Server 18.04 系统下通过。

如果 DNS 解析不了,请检查/etc/resolv.conf所链接的文件是否是/run/resolvconf/resolv.conf。如果不是,运行下面命令设置。

ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf

评论列表

  1. #1

    Hi, very nice website, cheers!
    ——————————————————
    Need cheap and reliable hosting? Our shared plans start at $10 for an year and VPS plans for $6/Mo.
    ——————————————————
    Check here: https://www.reliable-webhosting.com/

发表评论

电邮地址用于 Gravatar 头像显示,不会被公开可见。