Linux修改IP相关问题

Jan 于 2026-01-22 发布 浏览量

Linux修改IP相关问题

情景

在使用Ubuntu 22.04的CLL版本的时候,通过/etc/netplan/50-cloud-init.yaml来修改ip等信息, sudo netplan apply 应用后可以修改ip,但是重启后又恢复到了修改前的状态

原理分析

  1. cloud-init 默认管理网络
    • Ubuntu Server / Cloud images 安装时,网络由 cloud-init 控制
    • 任何直接改 /etc/netplan/50-cloud-init.yaml 都会被重启覆盖
  2. netplan 是最终应用层
    • 修改 netplan 配置生效后才会影响系统
    • 但 cloud-init 优先级更高,如果不禁用,它会生成 DHCP IP
  3. 文件权限要求
    • 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>

在实际运维场景中,这会导致以下问题:


解决方法

在无需 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 动态管理影响。