Ubuntu26.04 DHCP 与静态 IP 切换完整教程
本教程覆盖两种切换方向及其完整操作流程。
一、核心概念
| 模式 | 配置特点 | 适用场景 |
|---|---|---|
| DHCP | dhcp4: yes,IP 由路由器自动分配 |
临时环境、办公网络 |
| 静态 IP | dhcp4: no,手动指定 IP/网关/DNS |
服务器、需要固定访问的设备 |
切换的本质就是修改 netplan 配置文件中 dhcp4 字段和对应的 addresses / routes / nameservers 段。
二、切换前准备
2.1 查看当前模式
bash
# 查看当前生效的 IP
ip -4 addr show ens32
# 查看当前 netplan 配置
cat /etc/netplan/00-installer-config.yaml
- 输出含
inet 192.168.x.x/24 ...→ 已分配 IP - 配置中
dhcp4: yes→ 当前为 DHCP - 配置中
dhcp4: no且有addresses→ 当前为静态
2.2 备份配置文件
bash
sudo cp /etc/netplan/00-installer-config.yaml \
/etc/netplan/00-installer-config.yaml.bak
三、DHCP → 静态 IP
3.1 收集必要信息
bash
ip route show # 默认网关
ip -4 addr show ens32 # 当前 IP / 子网长度
cat /etc/resolv.conf # 当前 DNS(参考用)
例如得到:
- 网卡:
ens32 - 当前 IP/掩码:
192.168.10.11/24 - 网关:
192.168.10.2 - DNS:
192.168.10.2
3.2 重写配置文件
bash
sudo tee /etc/netplan/00-installer-config.yaml > /dev/null << 'EOF'
network:
version: 2
renderer: networkd
ethernets:
ens32:
dhcp4: no
addresses:
- 192.168.10.101/24
routes:
- to: default
via: 192.168.10.2
nameservers:
addresses:
- 192.168.10.2
EOF
bash
sudo chmod 600 /etc/netplan/00-installer-config.yaml
关键变化:
dhcp4: yes→dhcp4: no- 移除
dhcp4-overrides之类选项 - 新增
addresses、routes、nameservers段
3.3 安全应用(推荐)
bash
sudo netplan try
- 倒计时 120 秒内按 回车 确认
- 不按回车 → 自动回滚,避免远程断连
3.4 直接生效
bash
sudo netplan apply
3.5 验证
bash
ip -4 addr show ens32 # IP 是否为预期值
ip route show default # 网关是否正确
ping -c 3 192.168.10.2 # 网关连通
ping -c 3 8.8.8.8 # 外网连通
nslookup baidu.com # DNS 解析
四、静态 IP → DHCP
4.1 重写配置为 DHCP 模式
bash
sudo tee /etc/netplan/00-installer-config.yaml > /dev/null << 'EOF'
network:
version: 2
renderer: networkd
ethernets:
ens32:
dhcp4: yes
dhcp6: no
EOF
bash
sudo chmod 600 /etc/netplan/00-installer-config.yaml
说明:
dhcp4: yes启用 IPv4 DHCP- 可选
dhcp6: yes/no控制 IPv6 - 删除
addresses、routes、nameservers,让 DHCP 自动获取
4.2 应用配置
bash
sudo netplan try # 安全模式
# 或
sudo netplan apply # 直接生效
4.3 验证
bash
ip -4 addr show ens32 # 显示 dhcp 分配的 IP
ip route show default # 显示 dhcp 分配的网关
cat /etc/resolv.conf # 显示 dhcp 分配的 DNS
DHCP 模式下,valid_lft 不再是 forever,而是显示租约剩余时间,例如:
inet 192.168.10.102/24 brd 192.168.10.255 scope global dynamic ens32
valid_lft 86395sec preferred_lft 86395sec
dynamic 关键字表示该 IP 由 DHCP 分配。
五、双模式兼容写法(推荐)
如果你希望既能自动获取又能固定 IP,可使用 DHCP 回退:
yaml
network:
version: 2
renderer: networkd
ethernets:
ens32:
dhcp4: yes # 优先 DHCP
dhcp6: no
dhcp4-overrides: # 仅在 DHCP 失败时使用的回退
route-metric: 100
optional: true # 启动时不阻塞(无 DHCP 服务器也能开机)
或在 DHCP 基础上保留静态 fallback(需 optional: true):
yaml
network:
version: 2
renderer: networkd
ethernets:
ens32:
dhcp4: true
addresses: # 仅 DHCP 失败时生效
- 192.168.10.101/24
routes:
- to: default
via: 192.168.10.2
nameservers:
addresses: [192.168.10.2]
optional: true
六、DHCP 模式下的特殊配置
6.1 自定义 DHCP 主机名
yaml
ens32:
dhcp4: yes
dhcp4-overrides:
hostname: myserver
send-hostname: yes
6.2 DHCP 模式下额外静态路由
yaml
ens32:
dhcp4: yes
routes:
- to: 10.0.0.0/8
via: 192.168.10.1
6.3 DHCP 模式下固定 DNS
yaml
ens32:
dhcp4: yes
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
七、常见问题
7.1 切换后 IP 没变
bash
sudo netplan --debug apply # 查看详细日志
systemctl restart systemd-networkd
7.2 应用后断网
bash
sudo cp /etc/netplan/00-installer-config.yaml.bak \
/etc/netplan/00-installer-config.yaml
sudo netplan apply
7.3 NetworkManager 与 networkd 冲突
bash
systemctl status NetworkManager
# 若启用了 NetworkManager,二选一:
sudo systemctl disable --now NetworkManager
# 或
# 在 netplan 配置中改用 renderer: NetworkManager
7.4 YAML 语法错误
bash
sudo netplan --debug generate # 输出错误位置
常见错误:
- 用 Tab 缩进 → 必须用空格
- 冒号后缺空格
- 列表项
-写成了-
八、速查对照表
| 操作 | 关键字段 | 配置文件片段 |
|---|---|---|
| 静态 IP | dhcp4: no |
addresses + routes + nameservers |
| DHCP | dhcp4: yes |
仅 dhcp4 一行 |
| DHCP + 静态 DNS | dhcp4: yes |
保留 nameservers |
| DHCP + 备份地址 | dhcp4: yes + optional: true |
同时配 addresses |
| 关闭 IPv6 | dhcp6: no |
/ |
九、完整操作流程(一图流)
收集信息 → 备份配置 → 编辑 yaml → netplan try → 验证 → 完成
↑ ↓
└──────────── 回滚 (.bak) ←──────────────┘
执行顺序:
ip addr/ip route收集信息cp ... .bak备份sudo tee ... << EOF写入新配置sudo netplan try(120s 内回车确认)ip addr+ping验证- 失败则
cp .bak ...+netplan apply回滚
完成以上流程后,即可在 DHCP 与静态 IP 之间自由切换。