Linux修改IP相关问题
情景
在使用Ubuntu 22.04的CLL版本的时候,通过/etc/netplan/50-cloud-init.yaml来修改ip等信息, sudo netplan apply 应用后可以修改ip,但是重启后又恢复到了修改前的状态
原理分析
- cloud-init 默认管理网络
- Ubuntu Server / Cloud images 安装时,网络由 cloud-init 控制
- 任何直接改
/etc/netplan/50-cloud-init.yaml都会被重启覆盖
- netplan 是最终应用层
- 修改 netplan 配置生效后才会影响系统
- 但 cloud-init 优先级更高,如果不禁用,它会生成 DHCP IP
- 文件权限要求
- netplan 配置文件如果权限太宽(如 0644 或 0666),netplan 会警告
- 需要 600 才是标准运维规范
解决方法
1.禁用 cloud-init 管理网络
echo "network: {config: disabled}" | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
2.写 netplan 静态 IP 文件
sudo tee /etc/netplan/01-static-ip.yaml <<EOF
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [192.168.20.150/24]
routes:
- to: default
via: 192.168.20.2
nameservers:
addresses: [114.114.114.114,8.8.8.8]
EOF
3.修改权限
sudo chmod 600 /etc/netplan/01-static-ip.yaml
4.应用 netplan
sudo netplan apply
5.清理残留 DHCP IP(如果有)
sudo ip addr del 192.168.20.128/24 dev ens33
整个过程看起来多,但关键点只有两步:禁用 cloud-init + netplan 配置静态 IP。 文件权限和删除 DHCP IP 只是“收尾”,确保运维规范和 SSH 可用。
拓展
在部分基于 CentOS 的 GUI 系统(如湖南麒麟)中,网卡配置的优先级通常为:
NetworkManager > /etc/sysconfig/network-scripts/ifcfg-<interface>
在实际运维场景中,这会导致以下问题:
- 当机器未插网线时,修改
/etc/sysconfig/network-scripts/ifcfg-ens33配置静态 IP - 由于 NetworkManager 优先管理接口,会尝试激活未连接的网卡
- 导致配置报错或无法应用静态 IP
解决方法
在无需 NetworkManager 动态管理的服务器或静态 IP 场景下,可通过禁用 NetworkManager 来避免报错:
# 停止 NetworkManager 服务
sudo systemctl stop NetworkManager
# 禁用开机自启
sudo systemctl disable NetworkManager
# 修改网络配置文件
sudo vi /etc/sysconfig/network-scripts/ifcfg-<interface>
# 重启网络服务应用配置
sudo systemctl restart network
注意:禁用 NetworkManager 后,系统将完全依赖
/etc/sysconfig/network-scripts/ifcfg-<interface>配置网卡,接口状态不再受 NM 动态管理影响。