最小化安装(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 三件套统一验收。