Netplan 是 Ubuntu 18.04 及以上版本默认的网络配置工具,相比传统的 ifupdown 更简洁、易维护。本教程以 VMware 虚拟机(Ubuntu 系统)为例,手把手教你配置静态 IP,解决「有内网 IP 但无法联网」「配置冲突」等常见问题。
一、前置准备
1. 环境说明
- 宿主机:Windows/Linux/macOS(以 VMware Workstation 为例)
- 虚拟机系统:Ubuntu 20.04/22.04/24.04(其他版本通用)
- 网卡名称:
ens33(虚拟机默认网卡名,可通过ip a确认) - 目标:配置静态 IP
192.168.111.22/24,网关192.168.111.2
2. 关键前提
- 确认虚拟机网络模式(本教程以「NAT 模式」为例,桥接/仅主机模式配置逻辑一致,仅网段需匹配);
- 关闭冲突的网络管理工具(如 NetworkManager),避免和 Netplan 争抢网卡管理权;
- 确保配置文件权限合规(仅 root 可读写)。
二、步骤 1:查看网卡与当前配置
1. 查看网卡状态
打开虚拟机终端,执行以下命令确认网卡名称和状态:
bash
ip a
输出示例(重点关注 ens33 网卡):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:94:ef:9d brd ff:ff:ff:ff:ff:ff
altname enp2s1
- 若
ens33状态为DOWN,先执行sudo ip link set ens33 up启动网卡。
2. 查看现有 Netplan 配置
Netplan 配置文件默认存放在 /etc/netplan/ 目录,执行以下命令查看:
bash
ls -l /etc/netplan/
输出示例:
-rw------- 1 root root 428 12月 4 17:40 00-installer-config.yaml
-rw-r--r-- 1 root root 102 12月 3 10:00 01-network-manager-all.yaml # 冲突文件,需删除
三、步骤 2:清理冲突配置
若存在 01-network-manager-all.yaml 等指向 NetworkManager 的配置文件,会和 Netplan 冲突,需删除:
bash
# 删除冲突配置文件
sudo rm /etc/netplan/01-network-manager-all.yaml
# 验证删除结果
ls -l /etc/netplan/
四、步骤 3:编辑 Netplan 静态 IP 配置
1. 编辑配置文件
使用 nano 编辑主配置文件 00-installer-config.yaml(注意 YAML 严格缩进,禁止用 tab,仅用空格):
bash
sudo nano /etc/netplan/00-installer-config.yaml
写入以下内容(替换为你的 IP/网关/DNS):
yaml
network:
version: 2 # Netplan 版本,固定为 2
renderer: networkd # 明确用 networkd 管理,避免冲突
ethernets:
ens33: # 网卡名称,需和 ip a 输出一致
dhcp4: false # 关闭 DHCP,启用静态 IP
addresses:
- 192.168.111.22/24 # 静态 IP + 子网掩码
routes:
- to: default # 默认路由
via: 192.168.111.2 # 网关 IP(必须是虚拟机网段的真实网关)
nameservers:
addresses: [8.8.8.8, 8.8.4.4] # DNS 服务器(公共 DNS/内网 DNS)
2. 配置文件关键说明
| 字段 | 说明 |
|---|---|
renderer: networkd |
指定网络渲染器为 networkd,Ubuntu 服务器版默认推荐 |
dhcp4: false |
关闭 DHCPv4,若需 IPv6 静态配置,可添加 dhcp6: false |
addresses |
静态 IP 列表,格式为「IP/子网掩码」,支持配置多个 IP |
routes.to: default |
指向默认网关,所有外网流量走该路由 |
nameservers.addresses |
DNS 服务器列表,优先用公共 DNS(8.8.8.8/114.114.114.114) |
3. 修正配置文件权限
Netplan 要求配置文件仅 root 可读写(权限 600),执行以下命令修正:
bash
# 设置权限为 600(仅 root 可读可写)
sudo chmod 600 /etc/netplan/00-installer-config.yaml
# 设置归属为 root:root
sudo chown root:root /etc/netplan/00-installer-config.yaml
# 验证权限
ls -l /etc/netplan/00-installer-config.yaml
输出示例(权限正确):
-rw------- 1 root root 428 12月 4 17:40 /etc/netplan/00-installer-config.yaml
五、步骤 4:应用配置并验证
1. 测试配置(推荐)
先用 netplan try 测试配置(临时生效,超时自动回滚,按回车确认永久生效):
bash
sudo netplan try
输出说明:
- 若提示
WARNING:root:Cannot call Open vSwitch:忽略(未使用 OVS 交换机,不影响); - 看到
Do you want to keep these settings?时,按回车键确认保留配置。
2. 永久应用配置
测试无报错后,执行以下命令永久生效:
bash
# 生成配置
sudo netplan generate
# 应用配置
sudo netplan apply
# 重启网卡(可选)
sudo ip link set ens33 down && sudo ip link set ens33 up
3. 验证配置结果
(1)查看静态 IP 是否生效
bash
ip a
输出示例(ens33 已配置静态 IP 192.168.111.22):
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:94:ef:9d brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.111.22/24 brd 192.168.111.255 scope global ens33
valid_lft forever preferred_lft forever
(2)查看路由表
bash
ip route
输出示例(默认网关 192.168.111.2 已生效):
default via 192.168.111.2 dev ens33 proto static
192.168.111.0/24 dev ens33 proto kernel scope link src 192.168.111.22
(3)测试网络连通性
bash
# 测试内网连通性(ping 网关)
ping -c 3 192.168.111.2
# 测试外网 IP 连通性
ping -c 3 8.8.8.8
# 测试域名解析(验证 DNS)
ping -c 3 baidu.com
- 若能 ping 通网关但无法 ping 外网:检查 VMware NAT 模式网关是否匹配(参考文末「常见问题」);
- 若能 ping 外网 IP 但无法 ping 域名:检查 DNS 配置是否正确。
六、常见问题解决
1. 配置静态 IP 后无法访问外网
- 原因:VMware NAT 模式的真实网关和配置的
via不一致; - 解决:打开 VMware → 编辑 → 虚拟网络编辑器 → 选择 VMnet8(NAT 模式)→ NAT 设置 → 查看「网关 IP」,将 Netplan 中的
via改为该值。
2. YAML 配置语法错误
- 症状:
netplan apply报错Error in network definition; - 解决:
- 检查缩进(仅用 2 个空格,禁止 tab);
- 检查标点(冒号后需加空格,如
dhcp4: false而非dhcp4:false); - 用
sudo netplan try测试语法,会提示具体错误行。
3. 配置文件权限警告
- 症状:
netplan try提示Permissions for /etc/netplan/xxx.yaml are too open; - 解决:执行
sudo chmod 600 /etc/netplan/xxx.yaml修正权限。
4. 网卡状态始终 DOWN
- 解决:执行
sudo systemctl restart systemd-networkd重启网络服务,再执行sudo ip link set ens33 up启动网卡。
七、配置备份与恢复
1. 备份配置文件
bash
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak
2. 恢复配置(若出错)
bash
sudo cp /etc/netplan/00-installer-config.yaml.bak /etc/netplan/00-installer-config.yaml
sudo netplan apply
总结
Ubuntu 虚拟机配置静态 IP 的核心是:
- 清理 NetworkManager 冲突配置;
- 编写合规的 Netplan YAML 配置(注意缩进和权限);
- 匹配虚拟机网络模式的真实网关;
- 先测试再应用,避免配置失效。
按本教程配置后,虚拟机可稳定使用静态 IP,同时保证内网/外网连通性。