VMware Ubuntu 22.04 虚拟机设置桥接模式 并指定固定ip
- vicentz
- 0
- Posted on
一、在 VMware 中设置虚拟机的网络连接为桥接模式
步骤:
- 关闭 Ubuntu 虚拟机(如果正在运行)。
- 打开 VMware Workstation / VMware Player。
- 在左侧虚拟机列表中,右键点击你的 Ubuntu 22.04 虚拟机,选择 “设置”(Settings)。
- 在弹出的窗口中,选择 “网络适配器”(Network Adapter)。
- 在右侧的 “网络连接”(Network connection) 部分,选择:✅ 桥接模式(Bridged)
- 如果有选项 “复制物理网络连接状态”(Replicate physical connection state),可以勾选也可以不勾选,一般不影响。
- 点击 “确定” 保存设置。
桥接模式的作用:虚拟机会像局域网中的一台独立物理设备一样,直接连接到你的物理网络(和你的主机在同一个网段),可以从路由器获取 IP 或手动设置固定 IP。
二、在 Ubuntu 22.04 中配置固定 IP(桥接模式下)
Ubuntu 22.04 默认使用 Netplan 来管理网络配置,我们需要编辑 Netplan 的配置文件来设置固定 IP。
步骤:
1. 首先确定你的网络接口名称
打开终端,运行:
ip a
或者:
ifconfig
找到你的网络接口名称,通常是类似:
ens33enp0s3eth0(较少见,在较新版本中一般不用)
📌 记下这个名称,比如我们假设它是
ens33
2. 找到并编辑 Netplan 配置文件
Netplan 的配置文件通常位于 /etc/netplan/目录下,文件名可能是:
00-installer-config.yaml01-network-manager-all.yaml- 或者类似的
.yaml文件
运行以下命令查看有哪些配置文件:
ls /etc/netplan/
注意如果文件为:50-cloud-init.yaml 则需要手动创建00-installer-config.yaml文件
说明:
在 Ubuntu 22.04 中,尤其是使用 官方镜像(如 Ubuntu Server 或 Desktop ISO 安装) 时,系统可能默认启用了 cloud-init 工具。
⭐ 什么是 cloud-init?
• cloud-init是 Ubuntu(尤其在云环境、虚拟机镜像中)用来 自动化初始化系统配置 的工具。
• 它会在 系统首次启动或每次启动时,根据某些配置来源(比如网络元数据、内置配置、ISO 镜像默认设置等)自动配置网络、用户、SSH 密钥等。
• 在很多 Ubuntu 官方云镜像 / 虚拟机镜像 中,cloud-init默认会 接管网络配置,并且将网络配置写回到 /etc/netplan/50-cloud-init.yaml文件。
❗ 所以问题出在这里:
• 你手动修改了 /etc/netplan/50-cloud-init.yaml文件,设置了静态 IP 或桥接模式相关配置;
• 但是 cloud-init在系统启动时再次运行,检测到它应该管理网络,于是覆盖了你手动修改的内容;
• 导致你每次重启后,你的 Netplan 配置又被还原成 cloud-init的默认配置(比如又变成 DHCP);
继续:
假设文件是:/etc/netplan/00-installer-config.yaml
使用 nano(或其他编辑器)编辑它:
sudo nano /etc/netplan/00-installer-config.yaml
3. 修改配置文件以使用桥接模式并设置固定 IP
注意: 桥接模式下,虚拟机和物理机在同一局域网,因此你需要:
- 设置一个和你的局域网同网段的 静态 IP
- 设置正确的 子网掩码(CIDR,如 /24)
- 设置正确的 网关(通常是路由器的 IP,如 192.168.1.1)
- 设置正确的 DNS(如 8.8.8.8, 114.114.114.114 或你路由器的 IP)
下面是一个示例配置(请根据自己的网络环境修改):
network:
version: 2
renderer: networkd # 或者 NetworkManager(如果使用 GUI,通常用 NetworkManager)
ethernets:
ens33: # 你的网卡名称,根据 ip a 命令结果填写
dhcp4: no # 关闭 DHCP
addresses:
- 192.168.1.100/24 # 设置你的固定 IP,/24 表示子网掩码 255.255.255.0
routes:
- to: default
via: 192.168.1.1 # 你的网关,通常是路由器的 IP
nameservers:
addresses:
- 8.8.8.8 # Google DNS
- 114.114.114.114 # 国内常用 DNS
# 或者使用你路由器的IP,如 192.168.1.1
🎯 请务必根据你实际的局域网情况修改如下内容:
ens33→ 你的实际网卡名192.168.1.100→ 你想设置的固定 IP(确保该 IP 没有被其他设备占用)192.168.1.1→ 你的网关(通常是路由器管理地址)255.255.255.0(即/24)→ 子网掩码
4. 应用 Netplan 配置
保存文件后(在 nano 中按 Ctrl + O保存,Ctrl + X退出),运行以下命令使配置生效:
操需提前要对文件授权
chmod 600 /etc/netplan/*.yaml
注意: 如果文件权限过大也会报错
sudo netplan apply
出现如下警告可以忽略:
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
如果出现错误,可以尝试:
sudo netplan --debug apply
或者先测试配置:
sudo netplan try
(按回车确认,若网络中断会在 120 秒后恢复原配置)
5. 验证 IP 是否设置成功
运行以下命令查看 IP 地址:
ip a
你应该能在 ens33(或你设置的网络接口)上看到你设置的固定 IP,如 192.168.1.100
测试网络连通性:
ping 192.168.1.1 # 网关
ping 8.8.8.8 # Google DNS
ping www.baidu.com # 测试 DNS 解析
如果 ping www.baidu.com不通,可能是 DNS 配置有问题,请检查 Netplan 中的 nameservers部分。
重启后会提示提示 A start job is running for wait for netword to be configured
需要修改网络检测的超时时间
编辑 systemd 的配置,缩短或禁用 “等待网络在线” 的超时时间
sudo systemctl edit systemd-networkd-wait-online.service
你遇到的问题是:
在 VMware 中为 Ubuntu 22.04 虚拟机设置了 桥接模式(Bridged) 后,可以正常联网,但 重启系统后卡在以下提示:
A start job is running for Wait for Network to be Configured并且可能要等很久(比如 1 分 30 秒 或更久),然后才能进入系统。
🧩 问题原因分析
这个提示:
A start job is running for Wait for Network to be Configured
是由 systemd 的一个服务 触发的,它的目的是:
等待网络配置完成(通常是获取到 IP 地址,尤其是通过 DHCP)后,再继续启动系统。
在 Ubuntu 22.04 中,这个服务是:
systemd-networkd-wait-online.service 或者与 NetworkManager 相关的等待服务
它通常会在以下情况下触发等待:
- 你的 Netplan 配置中 启用了 DHCP(dhcp4: yes),并且系统等待一个 有效的 IP 地址分配(比如来自路由器)
- 或者你设置了
renderer: networkd,并且 网络接口没有在 systemd 等待的时间内成功获取 IP - 或者你使用的是 桥接模式,但 虚拟机启动时,物理网络尚未就绪(比如宿主机网络还没连接 / 路由器还没启动)
- 或者你的网络配置 依赖外部 DHCP 服务器,但获取超时
✅ 解决方法
禁用 “等待网络配置” 的启动等待(推荐,如果你不需要依赖网络启动)
这是 最常见、最推荐的解决方法,特别是对于 单机虚拟机、不需要开机就连外网、或者桥接网络可能延迟启动的场景。
步骤:
编辑 systemd 的配置,缩短或禁用 “等待网络在线” 的超时时间
运行以下命令编辑配置:
sudo systemctl edit systemd-networkd-wait-online.service
如果你用的是 NetworkManager 而不是
networkd,则服务名可能是:NetworkManager-wait-online.service可以同样方式禁用或调整。
在打开的编辑器中(比如 nano),输入以下内容:
[Service]
ExecStart=
ExecStart=/lib/systemd/systemd-networkd-wait-online --timeout=10
📌 这里我们把默认的等待时间(通常是 2 分钟左右)缩短为 10 秒,如果 10 秒内网络没就绪,也不再阻塞启动,系统会继续启动。
如果你 完全不想等待网络,可以直接禁用该服务:
sudo systemctl mask systemd-networkd-wait-online.service
重新加载 systemd 配置并重启服务
sudo systemctl daemon-reload
即可解决
三、补充说明
1. 关于桥接模式的网络要求
- 桥接模式下,虚拟机直接接入你的物理网络,因此:
- 它会从路由器获取 IP(如果用 DHCP)
- 或者你可以手动设置一个 与局域网同网段 的固定 IP
- 要保证该 IP 没有被其他设备占用
- 网关和 DNS 一般与你的主机一致(通常是路由器的 IP,如
192.168.1.1)
2. 如果你希望使用 DHCP 自动获取 IP(非固定)
那只需要在 Netplan 中设置 dhcp4: yes即可,无需指定 IP。
3. ping 时候提示 -bash: ping: command not found
如果在 Ubuntu 22.04 终端中输入 ping命令时提示:
-bash: ping: command not found
这意味着 ping命令没有安装或者路径未包含在环境变量中,不过在 Ubuntu 22.04 默认情况下,ping应该是预装了的。如果提示找不到,通常是:
原因:
iputils-ping包未安装(可能被精简版系统或最小化安装移除了)
✅ 解决方法:安装 iputils-ping包
请按以下步骤操作:
1. 使用 sudo权限安装 iputils-ping
打开终端,运行:
sudo apt update
sudo apt install iputils-ping
📌 这个包提供了
ping、ping6等网络测试工具。
2. 安装完成后,再次尝试 ping
比如测试网关是否可达:
ping 192.168.1.1
或者测试外网:
ping 8.8.8.8
如果想测试域名解析 + 网络连通性,可以运行:
ping www.baidu.com
🎯 如果
ping www.baidu.com提示找不到域名,可能是 DNS 配置有问题,可以检查/etc/resolv.conf或 Netplan 中的nameservers配置。
🔍 附加说明
为什么 Ubuntu 里没有默认提供 ping?
• 但在标准的 Ubuntu Desktop 或 Server 安装中,iputils-ping一般是默认安装的。如果你的 Ubuntu 是通过某些精简脚本或自定义镜像安装的,有可能被移除了。
• 从安全策略角度,某些最小化安装的 Linux 发行版(或 Docker 最小镜像等)可能不包含 ping,因为它需要 CAP_NET_RAW 权限,且有可能被滥用。