Ubuntu netplan 修改 IP 地址详细指南

一、Ubuntu 网络配置版本差异

# Ubuntu 版本与网络管理工具
# -----------------------------------------------
# Ubuntu 16.04 之前: ifupdown (/etc/network/interfaces)
# Ubuntu 17.10 开始: netplan (推荐)
# Ubuntu 18.04+    : netplan (默认)
# Ubuntu 20.04+    : netplan (默认并强烈推荐)

二、Netplan 配置文件结构

1. 配置文件位置

# Netplan 配置文件存放位置
/etc/netplan/
├── 00-installer-config.yaml  # 安装时生成
├── 01-network-manager-all.yaml
└── 50-cloud-init.yaml        # 云服务器常见

# 查看所有配置文件
ls -la /etc/netplan/

# 查看当前配置
cat /etc/netplan/*.yaml

2. 配置文件命名规则

# 配置文件按字典序加载
# 建议命名:01-xxx.yaml, 02-xxx.yaml, 50-xxx.yaml

三、修改 IP 地址的详细步骤

方法1:临时修改(重启失效)

# 1. 临时设置IP地址
sudo ip addr add 192.168.1.100/24 dev ens33
# 或
sudo ifconfig ens33 192.168.1.100 netmask 255.255.255.0

# 2. 临时修改网关
sudo ip route add default via 192.168.1.1

# 3. 临时修改DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf

方法2:永久修改(推荐)

步骤1:备份当前配置

# 备份当前网络配置
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.backup.$(date +%Y%m%d)
# 或
sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.backup

步骤2:编辑 netplan 配置文件

# 使用你喜欢的编辑器
sudo nano /etc/netplan/00-installer-config.yaml
# 或
sudo vim /etc/netplan/01-network-manager-all.yaml
# 或
sudo vi /etc/netplan/50-cloud-init.yaml

四、不同场景的配置示例

场景1:静态 IP 地址配置

# /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    ens33:  # 网卡名称,用 ip a 命令查看
      addresses:
        - 192.168.1.100/24  # IP地址/子网掩码
      routes:
        - to: 0.0.0.0/0
          via: 192.168.1.1  # 网关
      nameservers:
        addresses:
          - 8.8.8.8         # DNS服务器1
          - 8.8.4.4         # DNS服务器2
          - 114.114.114.114 # 国内DNS
      dhcp4: no             # 禁用DHCP
      optional: true

场景2:DHCP 自动获取

# /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    ens33:
      dhcp4: true      # 启用DHCPv4
      dhcp6: false     # 禁用DHCPv6
      optional: true

场景3:多个 IP 地址

# /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    ens33:
      addresses:
        - 192.168.1.100/24   # 主IP
        - 192.168.1.101/24   # 附加IP1
        - 192.168.1.102/24   # 附加IP2
        - 10.0.0.10/24       # 另一个网段
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

场景4:多个网卡配置

# /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    ens33:  # 内网网卡
      addresses:
        - 192.168.1.100/24
      dhcp4: no
      optional: true

    ens34:  # 外网网卡
      addresses:
        - 203.0.113.50/24
      gateway4: 203.0.113.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      dhcp4: no
      optional: true

场景5:VLAN 配置

# /etc/netplan/00-installer-config.yaml
network:
  version: 2
  vlans:
    vlan100:
      id: 100
      link: ens33
      addresses:
        - 192.168.100.10/24
      dhcp4: no

    vlan200:
      id: 200
      link: ens33
      addresses:
        - 192.168.200.10/24
      dhcp4: no

场景6:绑定(Bonding)配置

# /etc/netplan/00-installer-config.yaml
network:
  version: 2
  bonds:
    bond0:
      interfaces: [ens33, ens34]
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      parameters:
        mode: 802.3ad
        lacp-rate: fast
        mii-monitor-interval: 100
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

五、应用和测试配置

步骤1:检查配置文件语法

# 检查YAML语法
sudo netplan generate

# 如果遇到错误,会有提示
# 常见错误:缩进问题、冒号后缺少空格

步骤2:应用新配置

# 应用配置(不重启网络服务)
sudo netplan apply

# 调试模式(查看详细过程)
sudo netplan --debug apply

# 如果需要重启网络服务
sudo systemctl restart systemd-networkd
# 或(如果使用NetworkManager)
sudo systemctl restart NetworkManager

步骤3:验证配置

# 1. 查看IP地址
ip addr show
# 或
ip a
# 或
hostname -I

# 2. 查看路由
ip route show
# 或
route -n

# 3. 查看DNS
cat /etc/resolv.conf
systemd-resolve --status

# 4. 测试网络连通性
ping -c 4 8.8.8.8
ping -c 4 google.com

# 5. 测试网关
ping -c 4 192.168.1.1

# 6. 查看网卡信息
lshw -class network
ethtool ens33

六、故障排除

常见问题1:配置文件语法错误

# 检查YAML语法
yamllint /etc/netplan/*.yaml

# 常见错误:
# 1. 缩进使用tab(必须用空格)
# 2. 冒号后缺少空格
# 3. 错误的缩进级别

# 可以使用在线YAML验证器检查

常见问题2:配置未生效

# 1. 查看netplan日志
journalctl -u systemd-networkd
journalctl -u NetworkManager

# 2. 查看应用状态
sudo netplan try
# 按Enter确认,或按Ctrl+C取消

# 3. 检查配置是否正确加载
networkctl status

常见问题3:网卡名称不对

# 查看当前网卡名称
ip link show
# 输出类似:
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 ...
# 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...

# 如果网卡名称是eth0、eth1等旧式命名
# 可能需要修改配置文件中的网卡名称

常见问题4:DHCP和静态IP冲突

# 确保dhcp4设置为no
# 错误的配置:
#   dhcp4: true
#   addresses: [192.168.1.100/24]

# 正确的静态IP配置:
#   dhcp4: no
#   addresses: [192.168.1.100/24]

七、实用命令和脚本

1. 一键修改IP脚本

#!/bin/bash
# change_ip.sh
# 用法:sudo ./change_ip.sh 192.168.1.100 24 192.168.1.1

IP_ADDR=$1
PREFIX=$2
GATEWAY=$3
INTERFACE="ens33"  # 修改为你的网卡名

# 备份
BACKUP_FILE="/etc/netplan/00-installer-config.yaml.backup.$(date +%Y%m%d_%H%M%S)"
sudo cp /etc/netplan/00-installer-config.yaml $BACKUP_FILE

# 创建新配置
cat << EOF | sudo tee /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    $INTERFACE:
      addresses:
        - $IP_ADDR/$PREFIX
      gateway4: $GATEWAY
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4, 114.114.114.114]
      dhcp4: no
      optional: true
EOF

# 应用配置
sudo netplan apply

# 验证
echo "新IP配置:"
ip addr show $INTERFACE
echo -e "\n测试连接:"
ping -c 2 $GATEWAY

2. 网络诊断脚本

#!/bin/bash
# network_diag.sh

echo "=== 网络诊断报告 ==="
echo "生成时间: $(date)"
echo ""

echo "1. 网卡信息:"
echo "----------------"
ip addr show
echo ""

echo "2. 路由表:"
echo "----------------"
ip route show
echo ""

echo "3. DNS配置:"
echo "----------------"
cat /etc/resolv.conf
echo ""

echo "4. Netplan配置:"
echo "----------------"
cat /etc/netplan/*.yaml 2>/dev/null || echo "无netplan配置"
echo ""

echo "5. 网络连接测试:"
echo "----------------"
ping -c 2 8.8.8.8 && echo "外网连接: 正常" || echo "外网连接: 失败"
ping -c 2 $(ip route | grep default | awk '{print $3}') && echo "网关连接: 正常" || echo "网关连接: 失败"

3. 重置为DHCP

#!/bin/bash
# reset_to_dhcp.sh

cat << EOF | sudo tee /etc/netplan/00-installer-config.yaml
network:
  version: 2
  ethernets:
    ens33:
      dhcp4: true
      dhcp6: false
      optional: true
EOF

sudo netplan apply
echo "已重置为DHCP模式"

八、高级配置

1. MTU 设置

network:
  version: 2
  ethernets:
    ens33:
      addresses: [192.168.1.100/24]
      gateway4: 192.168.1.1
      mtu: 9000  # 设置Jumbo Frame
      dhcp4: no

2. MAC 地址配置

network:
  version: 2
  ethernets:
    ens33:
      match:
        macaddress: "00:11:22:33:44:55"
      set-name: lan0
      addresses: [192.168.1.100/24]
      dhcp4: no

3. IPv6 配置

network:
  version: 2
  ethernets:
    ens33:
      addresses:
        - 192.168.1.100/24
        - 2001:db8::1/64  # IPv6地址
      gateway4: 192.168.1.1
      gateway6: 2001:db8::1
      nameservers:
        addresses: [8.8.8.8, 2001:4860:4860::8888]
      dhcp4: no
      dhcp6: no

九、云服务器特殊配置

AWS EC2:

# /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    ens5:
      dhcp4: true
      match:
        macaddress: "0e:8a:5e:7b:1e:0c"
      set-name: ens5
      dhcp4-overrides:
        route-metric: 100
      nameservers:
        addresses:
          - 169.254.169.253

Azure:

# /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      dhcp4-overrides:
        route-metric: 100
      dhcp6: false

十、从 ifupdown 迁移到 netplan

如果原来使用 /etc/network/interfaces

# 旧配置示例 (/etc/network/interfaces)
# auto eth0
# iface eth0 inet static
#     address 192.168.1.100
#     netmask 255.255.255.0
#     gateway 192.168.1.1
#     dns-nameservers 8.8.8.8

# 对应的netplan配置 (/etc/netplan/01-netcfg.yaml)
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8]
      dhcp4: no

十一、最佳实践

  1. 始终备份:修改前备份配置文件
  2. 使用版本号version: 2
  3. 使用CIDR表示法192.168.1.100/24 而不是 192.168.1.100/255.255.255.0
  4. 测试配置:先用 sudo netplan try 测试
  5. 一次修改一处:避免同时修改多个设置
  6. 重启验证:重启后检查网络是否正常
  7. 记录变更:记录IP地址分配

快速参考命令卡

# 查看当前IP
ip a
hostname -I

# 查看网卡名
ip link show
ls /sys/class/net

# 编辑配置
sudo nano /etc/netplan/00-installer-config.yaml

# 检查语法
sudo netplan generate

# 应用配置
sudo netplan apply

# 测试配置(120秒内可回滚)
sudo netplan try

# 查看日志
journalctl -u systemd-networkd -f

# 重启网络
sudo systemctl restart systemd-networkd

按照这个指南,你应该能够成功修改 Ubuntu 的 IP 地址。如果遇到具体问题,请提供你的当前配置和想要修改的目标配置。

作者:严锋  创建时间:2025-11-01 13:51
最后编辑:严锋  更新时间:2025-12-25 10:39