很多人第一次在 Ubuntu 上改网络配置,基本都会经历一次“至暗时刻”:ssh 远程登到一台服务器上,照着网上流传多年的老教程去改 /etc/network/interfaces,改了 IP、网关、DNS,顺手 reboot,然后连接就永久消失了。不是 DNS 不通,是整个网络栈都没起来,只能跑去机房或者用带外管理口救急。这个场景在 Ubuntu 17.10 之后几乎每天都会在各大技术社区上演——因为从那个版本开始,Ubuntu 默认的网络管理架构已经换成了 Netplan,配置文件从 interfaces 变成了 YAML 格式。现在聊 Ubuntu 的网络管理,核心就是三块:Netplan、路由和防火墙。
这篇是“跟韩工学 Ubuntu”第 5 章的第一篇,我们把网络管理里最基础也最容易翻车的三件事讲透:Netplan 到底怎么配、路由怎么加才不丢、防火墙怎么开才不会把自己锁在门外。
1. 为什么 Ubuntu 要跟“老方法”说再见:Netplan 的诞生背景
1.1 从 interfaces 到 Netplan:一次并不突兀的替换
很多老管理员对 /etc/network/interfaces 是有感情的。那个文件格式简单,auto eth0、iface eth0 inet static、address、netmask、gateway 一套下来,十几行就能搞定一张网卡。但这种配置方式的问题也很明显:它是针对“单机物理网卡”设计的,遇到网桥、VLAN、bond、Wi-Fi 这种复杂组合时,写法开始变得别扭;遇到云环境里动态创建和销毁接口的场景,基本无能为力。
Netplan 要解决的核心问题,是把网络配置抽象成“你想要的最终状态”,至于底层用 systemd-networkd 还是 NetworkManager 去实现,Netplan 不管。你只需要写一份 YAML 声明式配置,Netplan 负责把它翻译成后端的原生配置。这套思路在云原生大行其道的今天,是非常顺理成章的——你在声明配置,而不是在写一堆命令去“凑”出一个网络状态。
这里要澄清一个常见的误会:Netplan 不是网络服务,它本身不负责收发包。它更像一个翻译官和配置生成器。你执行 netplan apply 的时候,它根据 YAML 文件生成对应的 networkd 或 NetworkManager 配置,然后让后端服务重新加载。理解了这一层,很多“改了配置文件但没生效”“生成的配置和我写的不一样”的问题就都能想通了。
1.2 两个 renderer 到底怎么选
Netplan 支持两种后端渲染器:networkd 和 NetworkManager。这个选择直接影响你后续排查问题的方向。
networkd:systemd 体系下的网络管理服务,轻量、稳定、适合服务器。Ubuntu Server 默认走这个。NetworkManager:桌面环境常用的网络管理服务,更适合笔记本这种需要频繁切换 WiFi、插拔网线的场景。Ubuntu Desktop 默认走这个。
判断当前系统用哪个后端,可以直接看 /etc/netplan/ 下的 YAML 文件开头几行,一般会写 renderer: NetworkManager 或者 renderer: networkd。没有明确写 renderer 的情况下,Netplan 会按配置文件里的 network.version 和发行版默认值去判断。如果你的配置里既有网桥又用了 NetworkManager,注意 NetworkManager 对 bridge 的支持和 networkd 略有差异,部分高级路由策略(比如策略路由)建议直接走 networkd,后面的路由章节我会再细说。
这里还有一个乌班图新手特别容易踩的坑:/etc/netplan/ 目录下可能不止一个 YAML 文件,Netplan 会按文件名顺序合并它们。比如 00-installer-config.yaml、01-network-manager-all.yaml 可能在桌面版里同时存在,或者你自己又新建了一个 99-custom.yaml。文件多了之后,同名键后面的会覆盖前面的,所以如果你改了配置不生效,先确认是不是被另一个文件覆盖了。我的习惯是只保留一个文件,其他全部删掉或改名备份,避免这种隐性问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Netplan YAML 配置逐字段拆解:从零写一份能用的配置
2.1 最小可用配置:单网卡 DHCP
先看一个最简单的配置,Ubuntu Server 安装完默认生成的文件大概长这样:
yaml复制network:
version: 2
ethernets:
eth0:
dhcp4: true
这个配置的意思是:网络栈版本是 2,网卡 eth0 通过 DHCP 获取 IPv4 地址。保存后执行 sudo netplan apply 就能生效。
这里有几个 YAML 语法上的硬性注意事项:
- 缩进必须一致,用空格不用 tab,Netplan 对缩进的敏感程度比 Python 还夸张。
- 键名是大小写敏感的,
dhcp4不能写成DHCP4。 - 布尔值写
true/false,不要写yes/no。 - IP 地址必须带掩码长度,比如
192.168.1.10/24,不能只写192.168.1.10。
如果你是在远程服务器上操作,改完配置千万别直接 netplan apply,先用 sudo netplan try。这个命令会先试应用配置,如果 120 秒内你没有按回车确认,它会自动回滚到之前的配置。这是 Netplan 给远程维护留的一条命,后面排错章节我
