Ubuntu 虚拟机只有一个网卡时,如何在固定 IP 和 DHCP(手机热点)之间切换

适用场景:

  • Ubuntu 20.04 / 22.04
  • 虚拟机(VMware / Hyper-V / VirtualBox)
  • 只有一个网卡(eth0 / ens / enx...)
  • 需要在 固定 IP(如 10.10.10.20)DHCP(如 192.168.x.x,手机热点) 之间切换

一、问题背景

在做 Kubernetes 主从验证时,我的环境是:

  • 一台 Ubuntu 物理服务器(Master)
  • 一台 Windows 上的 Ubuntu 虚拟机(Worker)
  • 虚拟机只有一个网卡

正常情况下我给虚拟机配置的是固定 IP:

复制代码
10.10.10.20/24

但在以下场景中经常会遇到问题:

  • 服务器没外网
  • 拉不到 K8s / Calico / CoreDNS 镜像
  • 临时需要用 手机 USB 热点

结果就是:

插上手机热点后,IP 变成了 192.168.42.x

重启后又变回 10.10.10.20

Kubernetes 通信直接炸掉 😅


二、核心原理(一定要懂)

1️⃣ 192.168.x.x 是怎么来的?

不是系统乱配的,而是 DHCP

  • 手机热点 = DHCP Server
  • Ubuntu = DHCP Client
  • 一插热点 → 自动分配 192.168.42.x

👉 这是临时 IP


2️⃣ 10.10.10.20 是什么?

这是你通过 netplan 手动配置的静态 IP

yaml 复制代码
dhcp4: no
addresses:
  - 10.10.10.20/24

👉 这是固定 IP


3️⃣ 为什么会"同时存在两个 IP"?

因为你做过其中一件事:

  • 开过 dhcp4: true
  • /etc/netplan 里有多个 .yaml
  • 没清理旧配置

于是结果变成:

text 复制代码
eth0:
  10.10.10.20   (静态)
  192.168.42.89 (DHCP)

⚠️ 对 Kubernetes 来说,这是灾难配置


三、正确的做法(强烈推荐)

原则一句话:

同一时间,只能用一种方式:要么 DHCP,要么静态 IP


四、方案一:切到手机热点(DHCP)

适合:

  • 拉镜像
  • 临时上网
  • 不跑 K8s

1️⃣ 删除所有旧 netplan 配置

bash 复制代码
sudo rm -f /etc/netplan/*.yaml

2️⃣ 新建 DHCP 配置(只有一个文件)

bash 复制代码
sudo tee /etc/netplan/01-dhcp.yaml <<EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true
EOF

⚠️ 如果网卡不是 eth0,用 ip -br a 查看实际名称


3️⃣ 修复权限(非常重要)

bash 复制代码
sudo chmod 600 /etc/netplan/01-dhcp.yaml

4️⃣ 应用配置

bash 复制代码
sudo netplan apply

5️⃣ 验证

bash 复制代码
ip a

你应该看到类似:

text 复制代码
inet 192.168.42.x/24

五、方案二:切回固定 IP(10.10.10.20)

适合:

  • Kubernetes 主从通信
  • 内网集群
  • 稳定运行

1️⃣ 删除 DHCP 配置

bash 复制代码
sudo rm -f /etc/netplan/01-dhcp.yaml

2️⃣ 写固定 IP 配置

bash 复制代码
sudo tee /etc/netplan/01-static.yaml <<EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 10.10.10.20/24
      gateway4: 10.10.10.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 114.114.114.114
EOF

3️⃣ 修复权限

bash 复制代码
sudo chmod 600 /etc/netplan/01-static.yaml

4️⃣ 应用配置

bash 复制代码
sudo netplan apply

5️⃣ 验证

bash 复制代码
ip a

应只看到:

text 复制代码
inet 10.10.10.20/24

六、常见坑总结(血泪经验)

❌ 同时存在多个 netplan 文件

bash 复制代码
ls /etc/netplan

👉 只保留一个


❌ 文件权限不对

text 复制代码
Permissions too open

解决:

bash 复制代码
sudo chmod 600 /etc/netplan/*.yaml

❌ 同时开启 DHCP + 静态 IP

👉 表面能用

👉 K8s 一定出问题


七、和 Kubernetes 的关系(重点)

场景 是否适合
192.168.x(热点) ❌ 不适合集群
10.10.10.x(静态) ✅ 强烈推荐
IP 变化 ❌ kubelet 会反复重连
固定 IP ✅ Node 稳定 Ready

八、最终结论

手机热点 IP 是临时的,不会持久
netplan 写死的 IP 才是"开机必定生效的"

只要你:

  • /etc/netplan 里只有一个文件
  • dhcp4: no
  • 写死 10.10.10.20

那么:

重启多少次,IP 都不会变


相关推荐
匆匆那年9678 小时前
llamafactory推理消除模型的随机性
linux·服务器·学习·ubuntu
wypywyp16 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
阿蒙Amon16 小时前
TypeScript学习-第10章:模块与命名空间
学习·ubuntu·typescript
No8g攻城狮17 小时前
【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤
linux·运维·ubuntu
森G20 小时前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
生活很暖很治愈1 天前
Linux——孤儿进程&进程调度&大O(1)调度
linux·服务器·ubuntu
getapi1 天前
注塑件的费用构成
linux·服务器·ubuntu
lucky-billy1 天前
Ubuntu 下一键部署 ROS2
linux·ubuntu·ros2
阿梦Anmory1 天前
Ubuntu配置代理最详细教程
linux·运维·ubuntu
getapi1 天前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu