首页 > Sysadmin > 正文

最小化安装的Linux怎么配网络:nmcli、netplan、systemd-networkd三条路线与接管者判定

huyuanwen 2026-11-07 Sysadmin

最小化安装(minimal install)的 Linux 没有桌面环境,也没有图形化的网络管理器,配置网络只剩命令行一条路。麻烦的是,不同发行版接管网卡的工具并不一样:Ubuntu Server 用 netplan,RHEL 系用 NetworkManager,Debian 最小化和容器里常见 systemd-networkd,老一点的系统还在用 ifupdown。工具选错,改了配置也不生效。本文按”先弄清谁在管网卡、再走对应路线”的顺序,把三条主流配置路线各走一遍,最后给出 DNS 检查方法和几个高频坑。

一、先搞清楚:你的系统由哪个工具接管网卡

动手之前先花一分钟确认”谁在管网卡”,这一步能避免大部分”改了配置没反应”的问题。依次执行:

cat /etc/os-release
systemctl is-active NetworkManager systemd-networkd
ls /etc/netplan /etc/network/interfaces /etc/sysconfig/network-scripts 2>/dev/null

经验规律:Ubuntu Server 走 netplan(底层实际由 NetworkManager 或 systemd-networkd 执行);RHEL、Rocky、Alma、Fedora 最小化装完默认是 NetworkManager;Debian 最小化可能是 ifupdown(/etc/network/interfaces)也可能是 networkd;容器镜像里则多数只有 networkd 甚至什么都不带。下面三条路线按系统各取其一即可。

二、路线一:nmcli 命令行(RHEL 系默认)

nmcli 是 NetworkManager 的命令行前端,改完即生效,最适合远程 SSH 场景下逐条执行。先看设备状态:

nmcli device status
nmcli connection show

配置静态 IP(以网卡名 eno1 为例,用 ip link 确认自己的名字):

nmcli connection add type ethernet con-name eno1 ifname eno1 \
  ipv4.method manual \
  ipv4.addresses 192.168.1.50/24 \
  ipv4.gateway 192.168.1.1 \
  ipv4.dns 223.5.5.5
nmcli connection up eno1

如果只是想改回自动获取(DHCP),一条命令就够:

nmcli connection modify eno1 ipv4.method auto
nmcli connection up eno1

验证:依次跑 ip -4 addr show eno1、ip route show default、ping -c 3 223.5.5.5,三个都有结果才算通。

三、路线二:netplan(Ubuntu Server 默认)

netplan 的思路是”写 YAML、一次生效”,配置文件在 /etc/netplan/ 下,通常叫 00-installer-config.yaml。静态 IP 示例:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      addresses: [192.168.1.50/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5, 8.8.8.8]

保存后先测再应用,这是远程操作的安全带:

chmod 600 /etc/netplan/00-installer-config.yaml
netplan try    # 120 秒内不通网会自动回滚
netplan apply  # 确认没问题后正式生效

两个硬性要求:文件权限必须是 600,否则 netplan 会拒绝读取并告警;YAML 缩进只能用空格,混进一个 Tab 就整个文件作废。改 DHCP 的话,把 addresses/routes/nameservers 三段换成 dhcp4: true 即可。

四、路线三:systemd-networkd(Debian 最小化、容器)

networkd 没有交互式命令,全靠 /etc/systemd/network/ 下的 .network 文件。新建 10-eno1.network:

[Match]
Name=eno1

[Network]
Address=192.168.1.50/24
Gateway=192.168.1.1
DNS=223.5.5.5

想用 DHCP 就把 Address/Gateway/DNS 三行换成 DHCP=yes。然后重启服务并查看状态:

systemctl restart systemd-networkd
networkctl status eno1

networkctl 这个工具值得记住,networkctl list 能一眼看到所有网卡的接管状态(configured/unmanaged),排查”网卡压根没被管”特别有用。

五、DNS 与默认路由的统一验收

不管走哪条路线,最后都用同三组命令验收:ip -4 addr show 看地址、ip route show default 看默认路由、resolvectl status(或 cat /etc/resolv.conf)看 DNS。注意在 Ubuntu 和 RHEL 上,/etc/resolv.conf 往往是指向 systemd-resolved 的软链接,手动编辑它会被覆盖——DNS 应该写进 netplan 或 nmcli 的配置里,让管理工具去生成。

六、常见坑速查

  • 两个工具抢网卡:NetworkManager 和 systemd-networkd 同时 active,配置互相覆盖。用 networkctl list 和 nmcli device 对照,保留一个、mask 掉另一个。
  • netplan 权限不是 600:直接告警拒读,chmod 600 /etc/netplan/*.yaml 解决。
  • YAML 里用了 Tab:netplan 报”line does not start with a space”之类错误,全文转空格。
  • 远程改完就断网:养成先 netplan try、或另开一个 SSH 会话保底再动手的习惯。
  • 改了配置没 up:nmcli 改完必须 nmcli con up 才重新生效,networkd 要 restart 服务。

常见问题 FAQ

Q1:怎么快速判断网卡归谁管?

跑 systemctl is-active NetworkManager systemd-networkd,输出 active 的就是接管者;再用 nmcli device status 与 networkctl list 看具体网卡是 managed 还是 unmanaged,两边一对就清楚了。

Q2:netplan apply 之后连不上网怎么办?

如果你用的是 netplan try,120 秒内不确认会自动回滚到旧配置,SSH 会自己恢复;如果直接 apply 了,只能回到物理控制台或带外管理把 YAML 改回去。所以远程操作永远先 try 后 apply。

Q3:最小化系统里连 ping、vim 都没有?

正常现象,最小化镜像刻意精简。Debian 系 apt install iputils-ping vim-tiny,RHEL 系 dnf install iproute iputils vim-minimal;不装也能活——ip addr、ss -tun、curl -sI 这三个够完成绝大多数排障。

三条路线记住一句话就够:RHEL 系找 nmcli,Ubuntu Server 找 netplan,Debian 最小化和容器找 networkd;动手前先确认接管者,远程操作先留回滚,最后用 ip/curl 三件套统一验收。