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
十一、最佳实践
- 始终备份:修改前备份配置文件
- 使用版本号:
version: 2 - 使用CIDR表示法:
192.168.1.100/24而不是192.168.1.100/255.255.255.0 - 测试配置:先用
sudo netplan try测试 - 一次修改一处:避免同时修改多个设置
- 重启验证:重启后检查网络是否正常
- 记录变更:记录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
最后编辑:严锋 更新时间:2025-12-25 10:39