云计算实验笔记(一):IaaS 与虚拟化全景 —— 从 VirtualBox 到云上 EC2 的完整映射

云计算实验笔记(一):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,本质上就是理解 如何把一台物理机切成多台逻辑机 ,以及 它们之间如何安全地通信。这两个问题对应的技术分别是:

  1. 虚拟化(Virtualization):通过 Hypervisor(VMware ESXi、Xen、KVM、Hyper-V、VirtualBox 等)把 CPU、内存、磁盘抽象成可分配的资源单元。
  2. 虚拟网络(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 密码):

  1. 重启虚拟机。

  2. 在 GRUB 启动菜单按 e 编辑启动项。

  3. 找到 linux ... 那一行,行尾追加:

    复制代码
    init=/bin/bash
  4. Ctrl+X 启动,进入一个 root shell(此时根文件系统是只读挂载的)。

  5. 把根文件系统重新挂载为读写:

    bash 复制代码
    mount -o remount,rw /
  6. 把 alice 加入 sudo 组:

    bash 复制代码
    usermod -aG sudo alice
  7. 让 systemd 接管启动流程:

    bash 复制代码
    exec /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

  • 从 OVAFile > Import Appliance...VM_Debian_2.ova整台 VM 一键还原(CPU、内存、网卡配置一并恢复)。
  • 从 VDIFile > 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+ 也可以直接用:

bash 复制代码
sudo hostnamectl set-hostname camia-temperton-debian-1

这个命令同时修改 /etc/hostname 和当前内核中的 hostname,无需重启。


四、五种网络模式深度解析

VirtualBox 的网络下拉框里有五个选项,对应五种完全不同的拓扑。理解它们的关键是问三个问题:

  1. VM 能不能上互联网?
  2. VM 和宿主机能不能互通?
  3. 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/24
  • NatNetwork_2:10.0.2.0/24

VM1, VM2 接到 NatNetwork_1VM3 接到 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 桥接的两大限制

  1. 网卡限制 :大部分 Wi-Fi 网卡和驱动 不支持同一个连接上多个 MAC 地址。VM 自己有 MAC,物理网卡只能"代发",但很多企业级 Wi-Fi 会拒绝。
  2. 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 三个推荐演练场景

  1. 升级前保险 :装某个不熟悉的软件前 pre-install 快照 → 装完出问题 → 一键 Restore 回到干净状态。
  2. 多分支配置:把同一台 VM 配成"开发态/测试态/演示态"三个快照,按需切换。
  3. 教学演示:每个演示步骤都打一个快照,方便重复回放。

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,几个最重要的认知点:

  1. ISO / VDI / OVA 是三个维度的概念:安装介质 / 磁盘 / 整台机器,混用会出大错。
  2. 网络模式的本质是"出网 / 到宿主 / 到同伴" 三个连通性维度的组合,五种模式只是常见组合的简称。
  3. 多网卡 + 多网络模式 才是真正的工程做法,所谓"DMZ"、"跳板机"、"私有子网"都靠这个实现。
  4. 快照是 COW 差分盘,不是真备份,长期备份用 OVA 导出。
  5. 本地虚拟化的所有概念在云端都有 1:1 对应,这就是为什么 VirtualBox 是学云计算最好的入门工具。

下一篇我们会从 IaaS 向上走一层,进入 PaaS 与容器化 的世界------把"虚拟一台机器"换成"虚拟一个进程",看看 Docker 是怎么把虚拟化的开销再压低一个数量级的。

如果这篇笔记对你有帮助,欢迎点赞、收藏、转发 🙌

相关推荐
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第二章 Item 13 - 16)
c语言·开发语言·网络·笔记·python·编辑器
Amarantine、沐风倩✨1 小时前
java -jar 命令-检查隐藏启动日志
笔记
路人蛃1 小时前
【深入理解计算机系统】第一章(计算机系统漫游)笔记
笔记
小满Autumn1 小时前
WPF 依赖属性速查手册
笔记·c#·wpf·上位机·mvvm
学计算机的计算基1 小时前
MySQL 锁体系全解:从 MDL 到间隙锁,一次讲透
java·数据库·笔记·python·mysql
Engineer邓祥浩1 小时前
宏观认知(4):AI与社会——吴恩达《AI for Everyone》Week4学习笔记
人工智能·笔记·学习
imDwAaY1 小时前
从非线性分类到多层神经网络 CS188 Note21 学习笔记
人工智能·笔记·python·神经网络·学习·机器学习·分类
李子琪。1 小时前
深入解析云计算三大关键技术综合实践检验
大数据·云计算·mapreduce
睡不醒男孩0308231 小时前
行业解决方案二:CLup打造企业级数据库私有云(DBaaS)平台解决方案
数据库·云计算·clup