Ubuntu实现修改局域网IP地址(Netplan)
作者:黑风风
在服务器或虚拟机环境中,我们通常需要为 Ubuntu 设置固定的局域网 IP,例如从 192.168.100.142 调整为 192.168.100.151,以便用于 Docker、NAS、数据库、反向代理等长期运行的服务。
一、Ubuntu 当前使用的网络配置体系
从 Ubuntu 18.04 开始,系统默认使用 Netplan 作为网络配置抽象层:
配置文件位于:/etc/netplan/*.yaml
Netplan 会生成底层的:
systemd-networkd或NetworkManager配置
只要你看到 .yaml 文件,说明你使用的就是 Netplan。
ls /etc/netplan
常见文件名例如:
00-installer-config.yaml 50-cloud-init.yaml
二、确认当前网卡名称(非常重要)
在修改 IP 之前,必须确认真实的网卡名:
ip addr
你会看到类似输出:
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 192.168.100.142/24
本文示例统一使用 ens18,请以你的实际网卡名为准。
三、传统写法的问题:gateway4 已被废弃
很多旧教程仍然使用:
gateway4: 192.168.100.1
在较新的 Netplan 版本中,这一写法会出现警告:
gateway4 is deprecated
为什么会被废弃?
原因并不是“不能用”,而是 设计升级:
gateway4 只能描述“一个默认网关”
无法支持:
- 多路由
- 策略路由
- IPv4 / IPv6 统一建模
Netplan 正在统一使用 显式路由模型。
四、正确、推荐、无警告的写法(重点)
下面是 官方推荐、未来长期有效 的配置方式。
示例:将 IP 改为192.168.100.151
network:
version: 2
ethernets:
ens18:
dhcp4: false
addresses:
- 192.168.100.151/24
routes:
- to: default
via: 192.168.100.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114关键字段说明
addresses
/24等价于255.255.255.0
routes
to: default表示默认路由via表示下一跳(路由器 IP)
nameservers
- 只影响 DNS,不影响局域网通信
五、远程 SSH 环境下的安全应用方式
如果你是通过 SSH 连接服务器,不要直接 netplan apply。
推荐使用
sudo netplan try
特性:
- 配置生效后会进入确认倒计时
- 如果网络断开,自动回滚
- 非常适合远程修改 IP
确认网络正常后,按提示回车即可。
六、验证是否配置成功
查看 IP
ip addr show ens18
查看默认路由
ip route
应看到:
default via 192.168.100.1 dev ens18
七、常见踩坑点汇总
1. IP 冲突
修改前请确认目标 IP 未被占用:
ping 192.168.100.151
2. YAML 缩进错误
- 只能使用空格
routes下的- to与via缩进必须一致
3. cloud-init 覆盖配置
如果存在 50-cloud-init.yaml,需确认 cloud-init 是否会在重启时重写网络配置。
参考资料:
1.Netplan 官方文档(Canonical)
- Netplan 的设计理念、配置语法以及推荐实践。
- https://netplan.readthedocs.io/en/stable/
2.Netplan 路由配置说明(Default Route / routes)
- 官方对
routes:、to: default、via:的说明。 - https://netplan.readthedocs.io/en/stable/netplan-yaml/#routes
3.Ubuntu Server 网络配置文档
- Ubuntu 官方对 Server 环境下网络配置方式的说明,明确 Netplan 为默认方案。
- https://ubuntu.com/server/docs/network-configuration
4.systemd-networkd 文档(Netplan 底层实现之一)
- Netplan 在 Server 环境下通常生成 systemd-networkd 配置,理解这一层有助于排错。
- https://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html
5.cloud-init 网络配置说明
- 云主机或虚拟机环境中,Netplan 配置被重写的根源,排查
50-cloud-init.yaml时非常有用。 - https://cloudinit.readthedocs.io/en/latest/topics/network-config.html
九、总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
