一、目标

将 Ubuntu 主机原来的固定 IP,改成由路由器自动分配 IP,也就是 DHCP 自动获取


一、目标

将 Ubuntu 主机原来手动设置的固定 IP,改成由路由器自动分配 IP,也就是 DHCP 自动获取 IP


二、两种常见情况

Ubuntu 里常见有两种网络管理方式:

1. Netplan + networkd

常见于 Ubuntu Server。

判断特征:

  • netplan 配置里通常没有 renderer: NetworkManager
  • 应用后常从 ip a 里看到 dynamic
  • ip route 里可能看到 proto dhcp

2. Netplan + NetworkManager

常见于 Ubuntu Desktop。

判断特征:

  • netplan 配置里有:
renderer: NetworkManager
  • 实际网络连接由 nmcli 管理
  • 是否 DHCP 要结合 nmcliip route 一起判断

第一部分:OpenClaw 那台 Ubuntu 的操作过程

三、原始固定 IP 配置

原来的配置是:

network:
  version: 2
  ethernets:
    enp4s0:
      dhcp4: no
      addresses:
        - 192.168.2.65/24
      gateway4: 192.168.2.3
      nameservers:
        addresses:
          - 8.8.8.8

这表示:

  • dhcp4: no:关闭自动获取 IP
  • addresses:手动固定 IP
  • gateway4:手动固定网关
  • nameservers:手动固定 DNS

四、改为 DHCP 的正确配置

将配置改成:

network:
  version: 2
  ethernets:
    enp4s0:
      dhcp4: yes

含义:

  • dhcp4: yes:开启 IPv4 DHCP 自动获取
  • 不再手动写 addresses
  • 不再手动写 gateway4
  • 不再手动写 nameservers

五、编辑配置文件

先查看 netplan 文件:

ls /etc/netplan/

编辑对应文件:

sudo nano /etc/netplan/00-installer-config.yaml

把内容改成:

network:
  version: 2
  ethernets:
    enp4s0:
      dhcp4: yes

六、应用配置

先试运行:

sudo netplan try

系统会提示:

Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration

这时必须按 Enter 回车 确认。
如果没有按回车,系统会在倒计时结束后自动回滚。

确认后可正式应用:

sudo netplan apply

七、第一次遇到的问题

第一次执行 sudo netplan try 时,没有及时按回车,出现了:

Changes will revert in 1 seconds
Reverting.

这说明:

  • 配置本身没有错
  • 只是没有在超时前确认
  • 所以系统自动回滚了

八、最终成功标志

重新执行并及时按回车后,再检查:

ip a
ip route

得到关键结果:

inet 192.168.2.65/24 ... scope global dynamic enp4s0
default via 192.168.2.1 dev enp4s0 proto dhcp

其中:

  • dynamic:IP 是动态分配的
  • proto dhcp:默认路由由 DHCP 下发

结论

这台 OpenClaw 主机已经成功从固定 IP 改为自动获取 IP。


第二部分:Z390-UD 这台 Ubuntu Desktop 的操作过程

九、发现 netplan 使用的是 NetworkManager

配置文件内容为:

network:
  version: 2
  renderer: NetworkManager

这说明:

  • netplan 仍然存在
  • 但实际网络由 NetworkManager 管理
  • 所以仅改 netplan 文件不一定够,还需要检查 NetworkManager 当前连接

十、补充 DHCP 配置

将 netplan 文件改为:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp4s0:
      dhcp4: yes

编辑命令:

sudo nano /etc/netplan/01-network-manager-all.yaml

十一、修复 netplan 配置文件权限

执行 sudo netplan trysudo netplan apply 时出现警告:

Permissions for /etc/netplan/01-network-manager-all.yaml are too open.

意思是:

  • netplan 配置文件权限太宽
  • 其他用户可能也能读
  • 需要把权限收紧

修复命令:

sudo chown root:root /etc/netplan/01-network-manager-all.yaml
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml

检查权限:

ls -l /etc/netplan/01-network-manager-all.yaml

正常结果:

-rw------- 1 root root ...

含义:

  • 只有 root 可以读写
  • 满足 netplan 的安全要求

然后重新应用:

sudo netplan apply

无报错无警告即表示正常。


十二、为什么 netplan 写对了,还是像静态 IP?

虽然 netplan 文件里写了:

dhcp4: yes

但检查结果里仍看到:

default via 192.168.2.3 dev enp4s0 proto static

这说明:

  • netplan 文件写法是对的
  • 但当前真正启用的连接仍是 NetworkManager 里的旧连接
  • 旧连接还保留着手动静态 IPv4 配置

所以必须进一步处理 NetworkManager 当前连接。


十三、查看当前连接

执行:

nmcli con show

得到结果中关键项:

有线连接 1       ... ethernet  enp4s0
netplan-enp4s0   ... ethernet  --

说明:

  • 当前真正正在使用的是 有线连接 1
  • netplan-enp4s0 虽然存在,但没有启用

因此需要修改的是:

有线连接 1

十四、将当前连接改为自动获取 IPv4

执行:

sudo nmcli con mod "有线连接 1" ipv4.method auto
sudo nmcli con down "有线连接 1"
sudo nmcli con up "有线连接 1"

中间如果清空 gateway 时出现类似报错:

ipv4.gateway: 如果没有配置地址,网关会无法设置

通常只是修改顺序导致的小提示,不代表整体失败。

关键是后面如果出现:

成功停用连接
连接已成功激活

就说明连接已经重新启用。


十五、最终检查 DHCP 是否成功

执行:

ip route
nmcli con show "有线连接 1" | grep ipv4.method

最终得到:

default via 192.168.2.1 dev enp4s0 proto dhcp
ipv4.method:                            auto

这是最关键的两个判断依据。

含义

  • proto dhcp:默认网关由 DHCP 下发
  • ipv4.method: auto:连接方式是自动获取 IP

结论

这台 zhq-Z390-UD 也已经成功从固定 IP 改成 DHCP 自动获取。


十六、为什么 IP 数字没变也算成功?

例如最终仍然拿到:

192.168.2.175

这不代表还是固定 IP。
因为 DHCP 完全可能再次把同一个地址分给这台机器。

所以判断是否改成功,不要只看 IP 数字有没有变化,而要看:

  • ip route 里有没有 proto dhcp
  • nmcli 里是不是 ipv4.method: auto

十七、实操中最容易犯的错误

1. 没有按回车确认 netplan try

执行:

sudo netplan try

后,系统会等你确认。
如果没按回车,就会自动回滚。


2. 把“输出结果”当成“命令”输入

例如下面这些:

proto dhcp
default via 192.168.2.1 dev enp4s0 proto dhcp
ipv4.method: auto

这些都不是命令,而是命令执行后的输出结果

真正应该输入的是:

ip route
nmcli con show "有线连接 1" | grep ipv4.method

然后去看输出中有没有:

  • proto dhcp
  • ipv4.method: auto

3. cat 提示权限不够

当 netplan 配置文件权限被改成 600 以后,普通用户直接:

cat /etc/netplan/01-network-manager-all.yaml

会提示权限不够,这是正常的。

应改为:

sudo cat /etc/netplan/01-network-manager-all.yaml

十八、最终判断口诀

情况 1:Netplan / networkd

检查:

ip a
ip route

成功标志常见为:

  • dynamic
  • proto dhcp

情况 2:NetworkManager

检查:

ip route
nmcli con show "有线连接 1" | grep ipv4.method

成功标志为:

proto dhcp
ipv4.method: auto

十九、最终可复用模板

服务器常见模板

network:
  version: 2
  ethernets:
    enp4s0:
      dhcp4: yes

桌面版常见模板

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp4s0:
      dhcp4: yes

二十、最短实操流程总结

A. 如果是普通 Netplan

ip a
ls /etc/netplan/
sudo nano /etc/netplan/文件名.yaml

写入:

network:
  version: 2
  ethernets:
    enp4s0:
      dhcp4: yes

应用:

sudo netplan try
sudo netplan apply
ip a
ip route

B. 如果是 NetworkManager

编辑:

sudo nano /etc/netplan/01-network-manager-all.yaml

写入:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp4s0:
      dhcp4: yes

修权限:

sudo chown root:root /etc/netplan/01-network-manager-all.yaml
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml

应用:

sudo netplan apply

查看连接:

nmcli con show

将当前连接改为 DHCP:

sudo nmcli con mod "有线连接 1" ipv4.method auto
sudo nmcli con down "有线连接 1"
sudo nmcli con up "有线连接 1"

检查结果:

ip route
nmcli con show "有线连接 1" | grep ipv4.method

成功标志:

proto dhcp
ipv4.method: auto

二十一、最终总结

本次一共处理了两台 Ubuntu 主机:

1. OpenClaw 主机

  • 原来是静态固定 IP
  • 修改 netplan 后成功切换为 DHCP
  • 关键标志:dynamicproto dhcp

2. Z390-UD 主机

  • 使用 renderer: NetworkManager
  • 除了改 netplan 外,还需要改 NetworkManager 当前连接
  • 同时修复了 netplan 文件权限
  • 关键标志:proto dhcpipv4.method: auto
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐