VirtualBox NAT 网络实现三台虚拟机互联踩坑实录

VirtualBox NAT 网络实现三台虚拟机互联踩坑实录

摘要: 本文记录了在 VirtualBox 中使用 NAT 网络模式实现 Ubuntu 24、Windows 11、Windows Server 三台虚拟机互联的完整过程,重点分析了"网络地址转换(NAT)"与"NAT 网络"的区别,以及 Windows 虚拟机之间互 ping 不通的排查思路。


一、实验环境

组件 版本/型号
宿主机 Windows 10/11
虚拟机软件 VirtualBox 7.x
虚拟机1 Ubuntu 24.04 LTS
虚拟机2 Windows 11
虚拟机3 Windows Server 2025

二、需求分析

实验要求三台虚拟机能够互相通信,同时可以访问外网。VirtualBox 提供了多种网络模式,但不同模式的适用场景差异很大:

网络模式 虚拟机互访 访问外网 宿主机访问虚拟机
NAT(网络地址转换) ❌ 不能 ✅ 能 ❌ 默认不能
NAT 网络 ❌ 默认不能
桥接网卡 ✅ 能 ✅ 能 ✅ 能
内部网络 ✅ 能 ❌ 不能 ❌ 不能
仅主机(Host-Only) ❌ 不能 ❌ 不能 ✅ 能

关键区别: "网络地址转换(NAT)"是每台虚拟机独立的 NAT,虚拟机之间完全隔离;而"NAT 网络"是多台虚拟机共享同一个虚拟 NAT 路由器,处于同一局域网内,天然支持互访。


三、配置步骤

3.1 创建 NAT 网络

打开 VirtualBox 管理器 → 管理 → 网络 → NAT 网络 → 点击右侧 创建 按钮:

  • 网络名称NatNetwork(可自定义)
  • 网络 CIDR192.168.56.0/24
  • 启用 DHCP:✅ 必须勾选,让虚拟机自动获取 IP

NAT网络创建示意图

3.2 配置虚拟机网卡

对三台虚拟机分别执行:设置 → 网络 → 网卡 1

配置项
启用网络连接 ✅ 勾选
连接方式 NAT 网络(注意不是"网络地址转换(NAT)")
名称 NatNetwork
控制芯片 Intel PRO/1000 MT 桌面 (82540EM)
混杂模式 拒绝
接入网线 ✅ 勾选

⚠️ 重要 :修改完设置后必须完全关闭虚拟机(不是保存状态),再重新启动才能生效。

3.3 验证 IP 分配

启动三台虚拟机,检查是否获得 192.168.56.x 网段的 IP:

Ubuntu 24:

bash 复制代码
$ ip addr show | grep "inet 192.168.56"

Windows 11 / Server:

powershell 复制代码
> ipconfig | findstr "192.168.56"


三台虚拟机 IP 分别为:

  • Ubuntu:192.168.56.5
  • Windows 11:192.168.56.6
  • Windows Server:192.168.56.4

四、连通性测试与踩坑

4.1 第一轮测试:跨系统通信

Windows Server ping Ubuntu:

powershell 复制代码
> ping 192.168.56.5
正在 Ping 192.168.56.5 具有 32 字节的数据:
来自 192.168.56.5 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.56.5 的回复: 字节=32 时间=1ms TTL=64
# ... 4 次回复,0% 丢失

Windows 11 ping Ubuntu:

powershell 复制代码
> ping 192.168.56.5
Reply from 192.168.56.5: bytes=32 time=5ms TTL=64
Reply from 192.168.56.5: bytes=32 time=1ms TTL=64
# ... 正常

结论:Windows 与 Linux 之间通信正常,NAT 网络本身工作良好。

4.2 第二轮测试:Windows 之间互 ping(踩坑)

Windows Server ping Windows 11:

powershell 复制代码
> ping 192.168.56.6
正在 Ping 192.168.56.6 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
# 100% 丢失

Windows 11 ping Windows Server:

powershell 复制代码
> ping 192.168.56.4
Request timed out.
Request timed out.
Request timed out.
Request timed out.
# 100% loss

现象:Windows 虚拟机之间互相 ping 不通,但各自都能 ping 通 Ubuntu。

4.3 问题定位

这个"Windows 与 Linux 通,Windows 之间不通"的现象非常典型,说明 NAT 网络本身没有问题,问题出在 Windows 系统自身的安全机制 上。

即使关闭了 Windows 防火墙,Windows 仍可能因以下原因拦截 ICMP:

  1. 网络配置文件类型为"公用网络":公用网络有比专用网络更严格的隐性限制
  2. 防火墙规则未完全生效:图形界面的"关闭防火墙"可能未彻底关闭所有配置文件
  3. 高级安全 Windows Defender 防火墙 的入站规则仍拦截 ICMP 回显请求

4.4 解决方案

两台 Windows 虚拟机上都执行以下操作:

方法 1:彻底关闭防火墙(临时测试)

powershell 复制代码
# 管理员 PowerShell
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False

方法 2:允许 ICMP 回显请求(推荐)

powershell 复制代码
# 为所有配置文件添加 ICMPv4 入站规则
New-NetFirewallRule -DisplayName "Allow ICMPv4-In" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -Action Allow -Profile Any

方法 3:将网络改为专用网络

powershell 复制代码
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private

方法 4:图形界面操作

  1. 设置 → 网络和 Internet → 高级网络设置
  2. 点击当前网络 → 网络配置文件类型 → 专用网络
  3. Windows 安全中心 → 防火墙和网络保护 → 高级设置
  4. 入站规则 → 找到 "文件和打印机共享(回显请求 - ICMPv4-In)" → 右键启用

执行上述任一方法后,再次测试:

powershell 复制代码
> ping 192.168.56.4
来自 192.168.56.4 的回复: 字节=32 时间<1ms TTL=128
来自 192.168.56.4 的回复: 字节=32 时间<1ms TTL=128
# ... 0% 丢失 ✅

五、完整连通性验证

最终三台虚拟机互 ping 结果:

源 \ 目标 Ubuntu (56.5) Win11 (56.6) Server (56.4)
Ubuntu --- ✅ 通 ✅ 通
Win11 ✅ 通 --- ✅ 通
Server ✅ 通 ✅ 通 ---

六、踩坑总结

坑点 现象 解决方案
选错 NAT 模式 所有虚拟机无法互访 必须选"NAT 网络",不是"网络地址转换(NAT)"
虚拟机未完全重启 IP 未更新,配置不生效 关闭虚拟机(非保存状态)后重新启动
Windows 防火墙拦截 Windows 之间 ping 不通 关闭防火墙或添加 ICMP 入站规则
网络配置文件类型 即使关防火墙仍不通 将网络从"公用"改为"专用"
未启用 DHCP 虚拟机获取不到 IP 创建 NAT 网络时勾选"启用 DHCP"

七、核心思路提炼

本次实验的成功关键在于分层排查法

  1. 确认网络模式正确:NAT 网络 vs NAT 是本质区别,选错一切白搭
  2. 验证 IP 分配:确认三台机器都在同一网段(192.168.56.x)
  3. 跨系统测试:先测 Windows→Linux,隔离网络层问题
  4. 同系统测试:再测 Windows→Windows,定位系统级安全策略问题
  5. 精准修复:根据"跨系统通、同系统不通"的特征,锁定 Windows 防火墙/网络配置文件

这种从全局到局部、从通用到特殊的排查逻辑,是网络故障诊断的核心方法论。


如果这篇文章对你有帮助,欢迎点赞收藏!有问题欢迎在评论区交流。

相关推荐
犹豫的哑铃2 分钟前
WebSocket 协议
网络·websocket·网络协议
江华森22 分钟前
Python 编程快速上手:让繁琐工作自动化 —— 19章全实战笔记
笔记·python·自动化
薄荷椰果抹茶43 分钟前
计算机导论_第4章_笔记
服务器·网络·笔记
Chockmans1 小时前
春秋云境CVE-2021-42897(保姆级教学)
计算机网络·安全·web安全·网络安全·安全威胁分析·春秋云境·cve-2021-42897
lihao lihao1 小时前
Tcp Socket
网络·网络协议·tcp/ip
骑士雄师1 小时前
大模型:MessagesPlaceholder 是什么?
服务器·windows·microsoft
kgduu1 小时前
react-redux学习笔记
笔记·学习·react.js
2401_868534781 小时前
网络安全:信息加密、认证(鉴别)、数字签名(CA)、密钥安全分发
网络·网络协议
RainCityLucky1 小时前
Java Swing 自定义组件库分享(十三)
java·笔记·后端
一杯奶茶¥2 小时前
Ubuntu系统镜像各个版本下载Ubuntu镜像合集资源Linux系统镜像乌班图Linux系统镜像
linux·运维·ubuntu·镜像·;inux镜像·ubuntu镜像