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 都不会变


相关推荐
daemon.qiang3 小时前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
orange....7 小时前
VMware 双网卡配置:宿主机切换网络时 Ubuntu 固定 IP 访问方案
网络·ubuntu·网络安全
园长的牧歌11 小时前
Ubuntu 打开应用在导航栏没有图标是个齿轮
linux·ubuntu
牢姐与蒯14 小时前
Linux进程间通信(一).进程间通信概念&&环境切换(着重强调vscode)
linux·运维·服务器·ubuntu
指尖的爷2 天前
【地狱级难度】ubuntu系统GOCV编译安装
linux·运维·ubuntu
j7~2 天前
【C++微服务项目开发脚手架】(环境篇)虚拟机 + Docker + MySQL/Redis/RabbitMQ/ES/etcd/FastDFS 全套配齐
linux·c++·ubuntu·docker·vmware·项目开发·微服务脚手架
可涵不会debug2 天前
公司外怎么连接管家婆?从 SQL Server 安装到 cpolar 固定 TCP 远程登录
linux·运维·ubuntu
云泽8082 天前
从零搭建 WSL2 + Ubuntu C/C++ 开发环境:原理、实践与底层架构解析
linux·c++·windows·ubuntu·wsl2
我本善良ab2 天前
PVE使用GRUB如何复位ubuntu的管理员密码?
ubuntu·忘记密码
ι:2 天前
NUC12 Pro 安装 Ubuntu 24.04 LTS 详细教程
linux·windows·ubuntu·nuc