一、什么是 Netplan
从 Ubuntu 17.10 起,系统默认使用 Netplan 作为网络配置工具。它采用 声明式 YAML 描述网络需求,再由后端渲染成具体实现:
- networkd:服务器版默认后端(systemd-networkd),适合无图形界面环境;
- NetworkManager:桌面版默认后端,带图形界面,适合笔记本/工作站。
也就是说,你只需要写一份 YAML 把”我想要什么 IP、什么 DNS”描述清楚,Netplan 会自动帮你生成底层的 networkd 或 NetworkManager 配置,省去直接改 /etc/network/interfaces 或手写 .network 文件的麻烦。
二、配置文件在哪里
Netplan 的配置目录是 /etc/netplan/,文件必须以 .yaml 结尾。常见文件名如:
00-installer-config.yaml(服务器安装时自动生成)50-cloud-init.yaml(云镜像常见,由 cloud-init 写入)01-netcfg.yaml(自定义命名均可)
系统会按文件名字母顺序依次读取并合并,后读的文件覆盖先读文件中同网卡的配置。建议把自己的配置放在 99-custom.yaml 之类靠后的名字,避免被其他文件覆盖。
三、动手前:先看清当前网络
在改配置之前,先确认网卡名称和当前地址,避免配错设备导致断网:
# 查看所有网卡及当前 IP
ip addr
# 或更聚焦一点,只看已启用的网卡
ip -brief addr
# 查看当前 DNS 解析情况(Ubuntu 18.04+ 用 systemd-resolved)
resolvectl status
# 查看 Netplan 当前生效配置(渲染结果)
networkctl status
记下你要配置的网卡名(如 ens33、enp0s3、eth0),下面的示例都以 ens33 为例,请替换成你自己的。
四、配置静态 IP 地址
新建或编辑 /etc/netplan/99-static.yaml:
network:
version: 2
renderer: networkd
ethernets:
ens33: # 替换为你的网卡名
dhcp4: no # 关闭 IPv4 DHCP
dhcp6: no # 关闭 IPv6 DHCP(如不需要)
addresses:
- 192.168.1.100/24 # 静态 IPv4 地址/掩码
# - 2001:db8::100/64 # 如需 IPv6 可加这一行
routes:
- to: default
via: 192.168.1.1 # 网关
nameservers:
addresses: [8.8.8.8, 1.1.1.1] # DNS 服务器
search: [example.com] # 可选:默认搜索域
说明:
addresses用 CIDR 写法,/24表示 255.255.255.0 掩码;routes里的to: default+via: 网关是现代写法;旧写法gateway4: 192.168.1.1仍可用但新版本会提示弃用,推荐用routes;renderer桌面环境可改NetworkManager。
五、只配 DNS(保留 DHCP 拿 IP)
如果只是想换 DNS、但 IP 仍然走 DHCP,可以只覆盖 nameservers:
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: yes
nameservers:
addresses: [223.5.5.5, 119.29.29.29] # 阿里/腾讯公共 DNS
注意:开启 dhcp4: yes 时,DHCP 下发的 DNS 与你在 nameservers 里写的会合并;若想只用自定义 DNS、丢弃 DHCP 下发的,改用 dhcp4-overrides:
dhcp4: yes
dhcp4-overrides:
use-dns: no # 不使用 DHCP 下发的 DNS
nameservers:
addresses: [223.5.5.5, 119.29.29.29]
六、应用配置
语法检查无误后,有两种应用方式:
# 方式一:try 模式(推荐先试)
# 它会临时应用,并等待你 120 秒内确认;超时未确认自动回滚,断网也不怕
sudo netplan try
# 方式二:直接应用
sudo netplan apply
# 如只改了某个文件想重新生成
sudo netplan generate
| 命令 | 特点 | 适用场景 |
|---|---|---|
netplan try |
应用后需人工确认,超时自动回滚 | 远程 SSH 操作时最安全 |
netplan apply |
立即生效,无回滚 | 本地控制台或已确认无误 |
netplan generate |
只生成后端配置不应用 | 调试配置是否被正确处理 |
七、验证配置是否生效
# 看 IP 是否已变成静态地址
ip addr show ens33
# 看 DNS 是否生效
resolvectl status ens33
# 或直接查询
resolvectl query example.com
# 测试网络连通与 DNS 解析
ping -c 4 192.168.1.1 # 网关通不通
ping -c 4 8.8.8.8 # 外网通不通
ping -c 4 www.baidu.com # DNS 解析通不通
八、常见错误与排错
YAML 对缩进极其敏感,必须用空格(不要用 Tab),同级必须对齐。Netplan 报错多半是缩进或冒号后缺空格。
- 报错 “Invalid YAML”:用
sudo netplan --debug apply看详细位置;检查是否混用了 Tab、冒号后没空格、列表项少了-。 - 改完断网无法连接:如果用了
netplan try,等 2 分钟会自动回滚;如果用了apply且是远程,需到机器本地控制台修复。 - cloud-init 覆盖配置:云服务器上的
50-cloud-init.yaml可能由 cloud-init 重新生成。若要固定配置,编辑/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg写入network: {config: disabled}后再用自己的 Netplan 文件。 - DNS 没生效:确认
systemd-resolved在运行(systemctl status systemd-resolved),且 /etc/resolv.conf 是指向../run/systemd/resolve/stub-resolv.conf的软链接,而非被写死的旧文件。
九、完整示例:服务器静态 IP + 双 DNS
# /etc/netplan/99-static.yaml
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [223.5.5.5, 119.29.29.29]
search: [lan]
保存后执行 sudo netplan try,确认网络正常后在提示里输入回车确认,配置即永久生效。重启后配置依旧保留。
十、小结
- Netplan 用 YAML 声明网络,后端交给 networkd / NetworkManager;
- 配置文件在
/etc/netplan/*.yaml,注意文件名顺序与缩进(空格、对齐); - 静态 IP 关键字段:
dhcp4: no、addresses、routes、nameservers; - 远程修改务必用
netplan try防断网; - DNS 想抛弃 DHCP 下发的,用
dhcp4-overrides: {use-dns: no}。















暂无评论内容