Ubuntu26.04 DHCP 与静态 IP 切换完整教程

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: yesdhcp4: no
  • 移除 dhcp4-overrides 之类选项
  • 新增 addressesroutesnameservers

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
  • 删除 addressesroutesnameservers,让 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) ←──────────────┘

执行顺序:

  1. ip addr / ip route 收集信息
  2. cp ... .bak 备份
  3. sudo tee ... << EOF 写入新配置
  4. sudo netplan try(120s 内回车确认)
  5. ip addr + ping 验证
  6. 失败则 cp .bak ... + netplan apply 回滚

完成以上流程后,即可在 DHCP 与静态 IP 之间自由切换。