云计算实验笔记(一):IaaS 与虚拟化全景 ------ 从 VirtualBox 到云上 EC2 的完整映射
关键词:云计算、IaaS、虚拟化、VirtualBox、Debian、NAT、桥接网络、Host-only、快照、OVA、VDI
本文是云计算系列实验的第一篇,聚焦 IaaS(Infrastructure as a Service) 层。我们通过 VirtualBox + Debian 把"一台真实服务器"在本地复刻一遍,把虚拟化里最容易混淆的几个概念(ISO/OVA/VDI、五种网络模式、快照机制)彻底理清楚,并最终把这些本地概念逐一对应到 AWS / Azure / GCP 的真实云服务上。
目录
- [一、为什么要学 IaaS 与虚拟化](#一、为什么要学 IaaS 与虚拟化)
- [二、环境准备:VirtualBox + Debian](#二、环境准备:VirtualBox + Debian)
- [三、三种镜像格式:ISO vs VDI vs OVA](#三、三种镜像格式:ISO vs VDI vs OVA)
- 四、五种网络模式深度解析
- 五、混合网络组网实战
- 六、快照(Snapshot)机制
- [七、
/etc/network/interfaces静态网络配置](#七、/etc/network/interfaces 静态网络配置) - [八、安全视角:从虚拟化网络到云端 VPC](#八、安全视角:从虚拟化网络到云端 VPC)
- [九、VirtualBox 概念 ↔ 主流云平台映射表](#九、VirtualBox 概念 ↔ 主流云平台映射表)
- 十、总结
一、为什么要学 IaaS 与虚拟化
云计算的服务模型通常分为三层:
| 层级 | 用户负责 | 厂商负责 | 典型产品 |
|---|---|---|---|
| IaaS | 操作系统、运行时、应用、数据 | 物理硬件、网络、虚拟化层 | AWS EC2、Azure VM、GCE |
| PaaS | 应用、数据 | 操作系统、运行时 | Heroku、App Engine、Cloud Run |
| SaaS | 数据(部分) | 一切 | Gmail、Office 365 |
IaaS 是云计算的"地基"。理解 IaaS,本质上就是理解 如何把一台物理机切成多台逻辑机 ,以及 它们之间如何安全地通信。这两个问题对应的技术分别是:
- 虚拟化(Virtualization):通过 Hypervisor(VMware ESXi、Xen、KVM、Hyper-V、VirtualBox 等)把 CPU、内存、磁盘抽象成可分配的资源单元。
- 虚拟网络(Virtual Networking):通过虚拟交换机、虚拟网卡和 NAT/桥接技术,在一台物理机上构造出多种网络拓扑。
VirtualBox 是一款桌面级 Type-2 Hypervisor(即跑在宿主操作系统之上),最适合作为入门工具,因为它把上面这两件事的复杂度暴露得恰到好处------既不像 VMware Workstation 那样过度封装,也不像 KVM 那样过度暴露内核细节。
二、环境准备:VirtualBox + Debian
2.1 软件下载
- VirtualBox:从 Oracle 官网下载最新版(约 200 MB),安装时同时安装 Extension Pack 可以解锁 USB 3.0、磁盘加密等高级功能。
- Debian ISO :从 debian.org 下载
debian-x.x.x-amd64-netinst.iso或完整版(约 700 MB / 4 GB)。本实验使用 netinst 即可。
2.2 创建第一台虚拟机 VM_Debian_1
| 配置项 | 推荐值 |
|---|---|
| 名称 | VM_Debian_1 |
| ISO image | 上一步下载的 Debian ISO |
| 用户名 / 密码 | alice / password |
| 主机名 | mydebian |
| 内存 | 1--2 GB |
| CPU | 1 vCPU |
| 硬盘 | 10--20 GB(VDI,动态分配) |
安装大约耗时 15 分钟。默认键盘布局是 QWERTY,如果你的物理键盘是 AZERTY 或 Dvorak,密码里包含特殊字符时一定要先确认输入法。
2.3 排错:alice 不在 sudo 组
Debian 默认安装时,如果你设置了 root 密码,普通用户 不会 自动加入 sudo 组。第一次执行 sudo apt update 你会看到:
alice is not in the sudoers file.
最快的修复方式是 GRUB 单用户救援模式(不需要 root 密码):
-
重启虚拟机。
-
在 GRUB 启动菜单按
e编辑启动项。 -
找到
linux ...那一行,行尾追加:init=/bin/bash -
按
Ctrl+X启动,进入一个 root shell(此时根文件系统是只读挂载的)。 -
把根文件系统重新挂载为读写:
bashmount -o remount,rw / -
把 alice 加入 sudo 组:
bashusermod -aG sudo alice -
让 systemd 接管启动流程:
bashexec /sbin/init
原理 :
init=/bin/bash告诉内核启动后不要去调用/sbin/init(systemd),而是直接 exec 一个 bash,绕过登录验证。这就是常见的"Linux 忘记 root 密码的救援姿势",掌握这一招对运维非常关键。
三、三种镜像格式:ISO vs VDI vs OVA
很多人混用这三个词,但它们其实是 完全不同维度 的概念:
| 格式 | 全称 | 本质 | 是否可启动 | 是否包含 VM 配置 | 典型用途 |
|---|---|---|---|---|---|
| ISO | ISO 9660 image | 光盘镜像 | ✅(作为安装介质) | ❌ | OS 安装、LiveCD |
| VDI | Virtual Disk Image | 虚拟磁盘 | ❌(需挂载到 VM) | ❌ | 单一磁盘文件,VirtualBox 原生格式 |
| OVA | Open Virtualization Appliance | 整套 VM 模板(OVF + 磁盘 + 元数据打包成 tar) | ✅(连同 VM 一起导入) | ✅ | 跨 Hypervisor 分发完整 VM |
一句话总结:
ISO 是"光盘",VDI 是"硬盘",OVA 是"打包好的整台电脑"。
3.1 导出为 OVA
VirtualBox > File > Export Appliance...
格式选 OVF 1.0/2.0 (生成 .ova,或拆成 .ovf + .vmdk + .mf)。输出文件命名为 VM_Debian_2.ova,导出约耗时 15 分钟。
3.2 导出为 VDI(直接拷贝)
VirtualBox > 右键 VM > 在资源管理器中显示
找到 VM_Debian_1.vdi,直接 Ctrl+C / Ctrl+V 复制为 VM_Debian_3.vdi。
⚠️ 致命陷阱:VDI 文件内嵌一个 UUID,VirtualBox 不允许两个 VDI 拥有相同 UUID。直接复制后必须修改 UUID:
cmd
cd C:\Program Files\Oracle\VirtualBox\
VBoxManage.exe internalcommands sethduuid "C:\Path\To\VM_Debian_3.vdi"
为什么需要 UUID:VirtualBox 内部用 UUID 而不是文件路径来追踪磁盘,这样即使你把磁盘文件移动到别处,配置也不会失效。但代价就是不能直接 cp 出一个"克隆磁盘"。
3.3 从 OVA / VDI 创建新 VM
- 从 OVA :
File > Import Appliance...选VM_Debian_2.ova,整台 VM 一键还原(CPU、内存、网卡配置一并恢复)。 - 从 VDI :
File > New...,硬盘选项里选Use an existing virtual hard disk file,指向VM_Debian_3.vdi。注意 VM 的其他配置需要重新填写(VDI 不含这些信息)。
3.4 改主机名以便区分
bash
sudo nano /etc/hostname
# 改成 camia-temperton-debian-1
sudo reboot
Debian 12+ 也可以直接用:
bashsudo hostnamectl set-hostname camia-temperton-debian-1这个命令同时修改
/etc/hostname和当前内核中的 hostname,无需重启。
四、五种网络模式深度解析
VirtualBox 的网络下拉框里有五个选项,对应五种完全不同的拓扑。理解它们的关键是问三个问题:
- VM 能不能上互联网?
- VM 和宿主机能不能互通?
- VM 和 VM 之间能不能互通?
4.1 调试用 Linux 命令速查
bash
ip a # 查看接口和 IP
ping <IP> # 测试连通性
sudo ip addr add 192.168.10.101/24 dev enp0s3 # DHCP 不工作时手动配 IP
ip route # 查看路由表
sudo dhclient enp0s3 # 重新申请 DHCP
4.2 NAT 模式(默认)
拓扑 :每台 VM 都被分配到自己 独立的 内部网络(10.0.2.0/24),VirtualBox 在背后充当路由器 + NAT 网关,把 VM 的出站流量伪装成宿主机的流量。
VM1 (10.0.2.15) ──┐
├── VBox NAT ── 宿主机网卡 ── Internet
VM2 (10.0.2.15) ──┘
| 连通性 | 结果 | 原因 |
|---|---|---|
| VM → Internet | ✅ | 通过 NAT 出站 |
| VM ↔ Host | 🔴 默认不行 | VM 在私有空间,宿主无路由 |
| VM ↔ VM | ❌ | 每个 VM 都有独立的 NAT,互相看不到 |
注意:默认情况下 两台都用 NAT 的 VM 居然拿到完全相同的 10.0.2.15------因为它们各自在自己的隔离世界里,没有冲突。
适用场景:
- VM 只是用来上网装包、学东西,不需要被任何人连接。
- 笔记本切换 Wi-Fi、连热点、出差换网络环境的时候,NAT 完全无感切换(这是 NAT 相对桥接最大的优势)。
对应云端 :相当于在私有子网里跑一台只能出站、不能入站的实例(出站通过 NAT Gateway)。
4.3 NAT Network 模式
拓扑 :和 NAT 类似,但 同一个 NAT Network 里的 VM 共享一个网段,可以互相访问。
在 File > Tools > Network Manager > NAT Networks 里创建:
NatNetwork_1:10.0.1.0/24NatNetwork_2:10.0.2.0/24
把 VM1, VM2 接到 NatNetwork_1,VM3 接到 NatNetwork_2。
⚠️ 关键陷阱 :从 OVA / VDI 克隆出来的 VM 会带 相同的 MAC 地址,接到同一个 NAT Network 后会拿到相同 IP,互相通信失败。务必:
右键 VM > Settings > Network > MAC Address > 🔄
| 连通性 | 结果 |
|---|---|
| VM → Internet | ✅ |
| VM ↔ Host | 🔴 默认不行(除非配端口转发) |
| 同 NAT Network 内 VM ↔ VM | ✅ |
| 跨 NAT Network VM ↔ VM | ❌ |
适用场景:搭建一个隔离的多 VM 实验环境,比如 Kubernetes 集群、Hadoop 集群,既能集群内通信又能集体出网。
对应云端:私有子网 + NAT Gateway(AWS)、私有 VNet + NAT Gateway(Azure)、Cloud NAT(GCP)。
4.4 Internal Network 模式
拓扑 :纯粹的虚拟二层网络,完全没有 NAT,也没有 DHCP 。除了同网络内的 VM,谁都看不到、也看不见外面。
要让它工作,你必须 手动配 IP。
bash
sudo ip addr add 192.168.10.1/24 dev enp0s3 # VM1
sudo ip addr add 192.168.10.2/24 dev enp0s3 # VM2
一台 VM 可以同时挂在多个 Internal Network 上(最多 4 个网卡),从而扮演"路由器"角色。例如题目要求的:
[VM1]──┤Internal A 192.168.10.0/24├──[VM2]──┤Internal B 192.168.20.0/24├──[VM3]
192.168.10.1 .10.2 .20.2 .20.3
此时 VM1 ping VM3 还需要在 VM2 上 打开 IP 转发:
bash
sudo sysctl -w net.ipv4.ip_forward=1
| 连通性 | 结果 |
|---|---|
| VM → Internet | ❌ |
| VM ↔ Host | ❌ |
| 同 Internal 内 VM ↔ VM | ✅(同网段才行) |
适用场景:
- 安全实验(病毒分析、渗透演练),需要完全隔离的环境。
- 模拟企业内网拓扑、做路由实验。
- 高保密的离线开发环境。
对应云端:隔离的私有子网,不带 NAT Gateway、不带 Internet Gateway。
4.5 Host-only Network 模式
拓扑 :VirtualBox 在宿主机上创建一块虚拟网卡 VirtualBox Host-Only Ethernet Adapter,VM 都接到这块网卡上。宿主机和 VM 之间是直接 L2 互通的 ,但这个网络 不连接外面。
| 连通性 | 结果 |
|---|---|
| VM → Internet | ❌ |
| VM ↔ Host | ✅(可能需要在 Windows Defender Firewall 里允许 ICMP) |
| 同 Host-only 内 VM ↔ VM | ✅ |
适用场景:
- 在宿主机上用浏览器访问 VM 里跑的 Web 服务(最常见)。
- 在宿主机上用 SSH/SCP 管理 VM。
- 不希望 VM 出网时的开发环境。
对应云端:跳板机(Bastion Host)/ 管理子网。
4.6 Bridged Network 模式
拓扑 :VM 的虚拟网卡 直接接到宿主机所在的物理 LAN ,从外部看 VM 就是局域网里 一台独立的物理机,能拿到路由器分配的 IP(比如 192.168.1.x)。
| 连通性 | 结果 |
|---|---|
| VM → Internet | ✅ |
| VM ↔ Host | ✅ |
| VM ↔ VM | ✅ |
| 同 LAN 内其他物理机 → VM | ✅(VM 真的"暴露"在 LAN 上) |
适用场景:
- 部署服务给办公网络里的其他同事访问。
- 模拟真实服务器,让外部设备能直接连。
⚠️ Wi-Fi 桥接的两大限制:
- 网卡限制 :大部分 Wi-Fi 网卡和驱动 不支持同一个连接上多个 MAC 地址。VM 自己有 MAC,物理网卡只能"代发",但很多企业级 Wi-Fi 会拒绝。
- AP / 路由器限制:企业 Wi-Fi 通常按 MAC 地址做认证,看见一个客户端突然冒出第二个 MAC 会直接 ban 掉。
实际开发中,桥接 + 有线 Ethernet 才稳定,桥接 + Wi-Fi 经常拿不到 IP,这时改用 NAT + Host-only 组合是更可靠的方案。
对应云端:公网子网 + 公网 IP(弹性公网 IP)。
4.7 连通性总表
| 网络模式 | VM↔Internet | VM↔Host | VM↔VM | 是否需要手动配 IP | 备注 |
|---|---|---|---|---|---|
| NAT | ✅ | ❌ | ❌ | 否(自动 DHCP) | 默认模式,最简单 |
| NAT Network | ✅ | ❌ | ✅(同网内) | 否 | 多 VM 互通 + 出网 |
| Internal | ❌ | ❌ | ✅(同网内) | 是 | 完全隔离 |
| Host-only | ❌ | ✅ | ✅ | 否(DHCP) | 宿主+VM 通信 |
| Bridged | ✅ | ✅ | ✅ | 否(看 LAN DHCP) | VM 是 LAN 一等公民 |
五、混合网络组网实战
每台 VM 最多可以挂 4 块网卡,于是可以组合出非常灵活的拓扑。下面给三个推荐场景:
场景 1:经典"DMZ + 内网"模型
| VM | Adapter 1 | Adapter 2 |
|---|---|---|
| VM1(Web 服务器) | NAT(出网) | Internal "lan1" |
| VM2(数据库) | --- | Internal "lan1" |
- VM1 既能上网装包,又能在内网保护数据库 VM2。
- 外部攻击者看不到 VM2,必须先攻破 VM1 才能横向移动。
- 这就是云上 公有子网 + 私有子网 的本地版。
场景 2:跳板机模型
| VM | Adapter 1 | Adapter 2 |
|---|---|---|
| VM1(跳板) | Host-only(宿主管理) | Internal "lan2" |
| VM2(生产) | --- | Internal "lan2" |
- 宿主机只能通过 SSH 跳板进 VM1,再从 VM1 跳到 VM2。
- 对应云上的 Bastion Host 架构。
场景 3:双向可达的开发环境
| VM | Adapter 1 | Adapter 2 |
|---|---|---|
| VM1 | NAT(出网装包) | Host-only(宿主调试) |
| VM2 | NAT | Host-only |
- VM 能上网装东西,宿主能调试 VM 里的服务,VM 互相也能通。
- 这是日常开发最舒服的组合,强烈推荐。
六、快照(Snapshot)机制
6.1 什么是快照
快照 = 某一时刻 VM 完整状态的"存档点",包括:
- 磁盘(通过 写时复制 COW 实现:新写入落入差分盘,原盘保持只读)。
- 内存(如果是热快照)。
- 设备状态(CPU 寄存器、网卡状态等)。
6.2 三个核心操作
| 操作 | 路径 | 效果 |
|---|---|---|
| 创建 | Snapshots 面板 → 📷 Take | 当前状态写入新差分盘 |
| 恢复 | 选中快照 → Restore | VM 状态回滚 |
| 删除 | 选中快照 → Delete | 不是丢弃,而是把差分合并回父盘 |
删除快照 ≠ 丢弃改动,这点很反直觉。删除其实是"把这层差分盘 merge 到上一层",所以删除一个很老的快照可能要等很久。
6.3 三个推荐演练场景
- 升级前保险 :装某个不熟悉的软件前
pre-install快照 → 装完出问题 → 一键 Restore 回到干净状态。 - 多分支配置:把同一台 VM 配成"开发态/测试态/演示态"三个快照,按需切换。
- 教学演示:每个演示步骤都打一个快照,方便重复回放。
6.4 最佳实践
- 命名要带日期和目的,例如
2026-06-03_before_docker_install。 - 不要长期保留超过 5 个快照,每个差分盘都会产生 I/O 开销。
- 长期备份请用 导出 OVA,而不是依赖快照。
七、/etc/network/interfaces 静态网络配置
Internal Network 模式下没有 DHCP,每次重启都要手动 ip addr add 太累,应当写入持久化配置:
bash
sudo nano /etc/network/interfaces
ini
# Loopback
auto lo
iface lo inet loopback
# 主网卡,静态 IP
auto enp0s3
iface enp0s3 inet static
address 192.168.10.1
netmask 255.255.255.0
gateway 192.168.10.254
逐行解释:
| 关键字 | 含义 |
|---|---|
auto enp0s3 |
系统启动时自动 up 这个接口 |
iface enp0s3 inet static |
该接口使用 IPv4 + 静态地址 |
address |
静态 IP 地址 |
netmask |
子网掩码(也可写 /24 在 address 行末尾) |
gateway |
默认网关(出本网段的下一跳) |
应用:
bash
sudo systemctl restart networking.service
ip a # 验证
⚠️ 删旧配置 :如果之前有过同接口的 iface 块,要先注释掉旧的,否则会冲突。
现代 Debian / Ubuntu 提示 :Debian 12 仍然支持
/etc/network/interfaces,但 Ubuntu 17.10+ 默认改用 Netplan (/etc/netplan/*.yaml),底层调 systemd-networkd 或 NetworkManager。如果你的发行版没有ifupdown,就要写 Netplan 而不是上面这个文件。
八、安全视角:从虚拟化网络到云端 VPC
实验里的五种网络模式,其实是云架构最朴素的"原型机"。云上的安全设计完全沿用了相同的思想:
| 本地概念 | 云端实现 | 安全收益 |
|---|---|---|
| Internal Network | Private Subnet | 默认无法被外部访问 |
| Bridged Network | Public Subnet + EIP | 暴露面最大,需严格安全组 |
| Host-only | Management Subnet / Bastion | 仅运维入口可达 |
| 网卡多挂 | Multi-NIC EC2 + VPC Peering | 跨子网拓扑灵活 |
| 快照 | EBS Snapshot | 灾备 / 回滚 |
由此引出几个重要的云安全设计模式:
- 网络分段(Network Segmentation):把 Web 层、应用层、数据层放在不同子网,配合 NACL + Security Group 控制流量方向。
- DMZ(隔离区):对外提供服务的实例放在 DMZ,与内网严格隔离。
- Bastion Host(跳板机):所有 SSH 入站只允许打到跳板机,其他实例都不开 22 端口。
- Zero Trust:不再相信"内网"这个概念,每一次访问都要经过身份认证 + 授权。
掌握了 VirtualBox 这五种网络模式,再去看 AWS VPC / Azure VNet 的概念,会发现 它们几乎一一对应。
九、VirtualBox 概念 ↔ 主流云平台映射表
| VirtualBox 概念 | AWS | Azure | GCP | 说明 |
|---|---|---|---|---|
| Virtual Machine | EC2 Instance | Azure VM | Compute Engine VM | 运行 OS + 应用的虚拟实例 |
| Hypervisor | Nitro / Xen | Hyper-V | KVM | 底层虚拟化技术 |
| VDI(虚拟磁盘) | EBS Volume | Managed Disk | Persistent Disk | 挂载到 VM 的块存储 |
| ISO File | AMI 源镜像 / 自定义介质 | Custom Image / ISO | Custom Image | OS 安装镜像 |
| OVA Appliance | AMI | VM Image / Shared Image Gallery | Machine Image | 整台 VM 的可复用模板 |
| Snapshot | EBS Snapshot | Disk Snapshot | Persistent Disk Snapshot | 磁盘的时间点备份 |
| NAT | NAT Gateway | NAT Gateway | Cloud NAT | 私有 VM 出网 |
| NAT Network | 私有子网 + NAT GW | 私有子网 + NAT GW | 私有子网 + Cloud NAT | 多 VM 共享出网 |
| Internal Network | 隔离 VPC / 私有子网 | 私有 VNet 子网 | 私有 VPC 子网 | 完全隔离的内部网络 |
| Host-only Network | Bastion / 管理子网 | 管理子网 | 管理子网 | 仅管理可达 |
| Bridged Network | 公有子网 + EIP | 公有子网 + 公网 IP | External IP | VM 暴露在公网 |
十、总结
这一篇我们从最朴素的 ISO 安装一路走到云端 VPC,几个最重要的认知点:
- ISO / VDI / OVA 是三个维度的概念:安装介质 / 磁盘 / 整台机器,混用会出大错。
- 网络模式的本质是"出网 / 到宿主 / 到同伴" 三个连通性维度的组合,五种模式只是常见组合的简称。
- 多网卡 + 多网络模式 才是真正的工程做法,所谓"DMZ"、"跳板机"、"私有子网"都靠这个实现。
- 快照是 COW 差分盘,不是真备份,长期备份用 OVA 导出。
- 本地虚拟化的所有概念在云端都有 1:1 对应,这就是为什么 VirtualBox 是学云计算最好的入门工具。
下一篇我们会从 IaaS 向上走一层,进入 PaaS 与容器化 的世界------把"虚拟一台机器"换成"虚拟一个进程",看看 Docker 是怎么把虚拟化的开销再压低一个数量级的。
如果这篇笔记对你有帮助,欢迎点赞、收藏、转发 🙌