前几天帮人调一台 Ubuntu 20.04 服务器,开机后网卡起来了,但就是死活连不上外网。一通排查下来,问题居然出在 Netplan 里 DNS 写错了一层缩进。这种问题在 Ubuntu 系统里太常见了,尤其 20.04 开始把网络配置统一收敛到 Netplan 之后,很多人还是拿老一套 /etc/network/interfaces 的思路来改,结果越改越乱。
今天我就把 Ubuntu 20.04 网络配置这件事从头到尾捋一遍,从最基础的 IP 地址设置、网卡信息查看,到静态 IP 配置、DNS 解析、路由检查,再到最后能不能顺利连上外网,全部用亲测可用的命令和配置示例讲清楚。不管是刚装好 Ubuntu 的虚拟机,还是机房里的物理服务器,这篇文章都能让你照着操作就解决问题。
1. 动手之前,先搞清楚 Ubuntu 20.04 的网络管理机制
1.1 为什么一定要从 Netplan 说起
很多从 CentOS 7 或者更老版本 Ubuntu 转过来的朋友,第一时间会去改 /etc/network/interfaces 文件,改完执行 service networking restart,然后发现要么提示服务不存在,要么配置没生效。原因很简单:Ubuntu 18.04 之后,系统默认的网络配置工具已经从 ifupdown 换成了 Netplan。
Netplan 是一个基于 YAML 的抽象网络配置工具。你在 /etc/netplan/ 目录下看到的 .yaml 文件,是它的前端配置入口。Netplan 会根据这些 YAML 文件,在系统启动时或执行 netplan apply 时,把配置转换成后端渲染器能识别的格式,再交给后端去执行。
Ubuntu 20.04 默认有两种后端可以选:NetworkManager 和 systemd-networkd。桌面版默认用 NetworkManager,服务器版默认用 systemd-networkd。这个差异对日常配置影响很大,比如你在一台桌面 Ubuntu 上手动改了 /etc/netplan/01-network-manager-all.yaml,如果没有把 renderer 指定为 NetworkManager,修改可能被 NetworkManager 接管或忽略,出现让人摸不着头脑的现象。
Netplan 的配置语法是 YAML,这意味着缩进和空格极其敏感。一个 Tab 键或两个空格用错,netplan apply 直接报错,甚至整台机器的网络都不动。我见过太多人因为 addresses 和 gateway4 的层级写错,导致配置一直不生效,这就是没有理解 Netplan 的核心机制。
1.2 你的系统里现在跑的是哪一套网络栈
在动手改配置之前,我建议你先搞清楚当前系统到底用的哪一套网络栈。这样后续排查才不会像无头苍蝇。
执行下面两条命令:
bash复制systemctl status systemd-networkd
systemctl status NetworkManager
如果 systemd-networkd 是 active 状态,说明你这台机器的网络由 systemd-networkd 管理,配置走 Netplan 的 systemd-networkd 后端即可。如果 NetworkManager 是 active 状态,说明是桌面环境或者 NetworkManager 接管了网络,改 Netplan 时要在 renderer 字段里写上 NetworkManager。
还有一种情况:两个服务都没有运行,那就看看 netplan 当前用的什么 renderer:
bash复制netplan get
这条命令会打印当前生效的 Netplan 配置。比如输出:
yaml复制network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: true
这就说明后端是 networkd。如果你看到 renderer: NetworkManager,那后面配置静态 IP 时,renderer 字段也要保持 NetworkManager,避免两台服务互相打架。
1.3 配置之前先做三件事
每次给服务器或虚拟机改网络配置,我都会先做三件事,这三件事帮我避免过很多次灾难。
第一件:备份当前的网络配置。命令很简单:
bash复制sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.bak
如果文件名不同,比如是 00-installer-config.yaml,就替换成实际文件名。备份是万能的后悔药,尤其当你通过 SSH 远程修改服务器网络时,配置错了把自己关在门外,备份能让你在机房或面板里快速恢复。
第二件:确认你当前是用 IP 连接还是用主机名连接。如果是远程操作,务必关闭系统防火墙或提前放行 SSH 端口,否则静态 IP 一改,IP 变了,SSH 会话直接断掉,人就进不去了。
第三件:查看当前的网卡名称和 MAC 地址。Ubuntu 20.04 的网卡命名规则是 ens33、ens160、enp0s3 这种形式,不再是老版本的 eth0。用 ip addr 查看一下,把网卡名字记下来。后面写配置时网卡名字写错,配置直接无法生效。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 静态 IP 配置实操:从 DHCP 到固定地址
2.1 查看当前网络状态与网卡名称
先看当前网络状态:
bash复制ip addr
输出类似:
text复制2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default q
