VirtualBox自学笔记

一、为什么会有“虚拟化”(Virtualization)

在上世纪 1960s,IBM 等厂商面对的是昂贵稀缺的物理机(Physical Machine):一台大型机(Mainframe)需要同时服务成百上千名用户。为了把昂贵硬件的利用率榨到最高,又要让不同用户彼此隔离、互不干扰,工程师先发明了分时(Time-Sharing),再进一步把整套硬件抽象成多台“看起来独立”的计算机,这就是虚拟机(Virtual Machine, VM)。每台虚拟机都像拥有自己的 CPU、内存、磁盘和网卡,谁崩了也不会拖垮其他人;迁移、快照、回滚都可以像“搬动一个文件”那么灵活。这套把真实硬件抽象并调度的底座,叫虚拟机监控器(Hypervisor)。它有两类:直接跑在硬件上的 Type-1(如 VMware ESXi、Microsoft Hyper-V Server),和安装在普通操作系统之上的 Type-2(如 Oracle VirtualBox、VMware Workstation、Parallels)。VirtualBox 属于后者:你先有一台宿主机(Host Machine, Host),比如 Windows 笔电;在上面装 VirtualBox,再创建若干来宾系统(Guest OS, Guest),例如 Ubuntu 或 Windows Server。

现代 CPU 的硬件虚拟化支持(Intel VT-x / AMD-V)进一步把代价降到很低:大部分 guest 指令可直接在硬件上跑,只有少量“敏感”操作交给 Hypervisor 截获与协调。和“模拟/仿真(Emulation)”不同,虚拟化不需要把一种指令集翻译成另一种,所以性能更接近真机。

二、Host、Guest 与 VirtualBox 之间到底是什么关系

把宿主机理解成一套公寓,Hypervisor 是管家,来宾系统是不同住户。Host 提供真实 CPU/内存/磁盘/网卡;Hypervisor 把这些资源切片并“伪装”成若干套“虚拟硬件”;Guest 以为自己拿到了独占机器。你可以对任一 Guest 做快照(Snapshot),像定格保存现场;可以 克隆(Clone) 出一台一模一样的副本;可以 回滚(Rollback) 到某个稳定点继续尝试而不怕“装坏系统”。这就是虚拟化的生产力与容错力。

三、三种常见网络模式:为什么有、各自像什么、何时用

虚拟机想“上网”或“被访问”,核心在于它的虚拟网卡(Virtual Network Interface Card - Virtual NIC,常写作 vNIC)如何接入世界。VirtualBox 提供的三种模式可以用“公寓门牌号”的比喻理解。

NAT(Network Address Translation,网络地址转换) 像“公寓共用一个对外门牌”。外界只看见宿主机,来访者不知道公寓里的每个房间。好处是 Guest 能方便上网,同时默认外界进不来,安全边界更紧。若你确实要让外界访问 VM 上的某个服务,可在 NAT 里做端口转发(Port Forwarding):把“敲宿主机 8080 门”的请求转送进“Guest 的 80 端口”。适合个人开发、实验环境。

Bridged Adapter(桥接模式) 像“每个房间都领了独立门牌号”。Guest 直接接入你所在的局域网(LAN, Local Area Network),能被同网段设备发现和访问,非常适合做“在内网里跑服务端”的实验,例如让同办公室的同学直接访问你 VM 上的 Web/API。代价是它暴露面更大,要遵守内网安全策略、及时打补丁。

Host-Only(仅主机模式) 像“公寓内部专线”。Guest 只能和 Host 互通,对外完全隔离。常见做法是给 VM 配两块网卡:一块 NAT 负责上网下载包,另一块 Host-Only 作为宿主↔来宾的私有通道,便于调试和传文件,同时不外泄。


四、什么是 LAN、为什么 NetBEUI 只能在“同一片网里”说话

局域网(LAN) 强调的是“逻辑上在同一个二层广播域(Broadcast Domain)”,而非“物理上必须挨得近”。在早期,NetBEUI(NetBIOS Extended User Interface) 是一种非路由型协议(Non-routable Protocol),只会在广播域里“吆喝”,跨路由器/跨子网就到不了对方。因此,两台机器只要接在同一个交换机/路由器、拿到同一个子网(例如都长得像 192.168.1.x),它们就能用这类协议互通;一旦分属 192.168.1.x 和 192.168.2.x 且中间有路由分隔,NetBEUI 就不行。今天,几乎所有共享与服务都跑在TCP/IP之上,因为它可路由、可跨互联网;如果地理上相隔很远,但又想“逻辑上一张网”,会用VPN(Virtual Private Network) 把远端设备“虚拟地并到同一子网”,再谈 SMB/NFS 等共享。


五、共享目录与权限:从“把门钥匙给谁”开始

VirtualBox 的共享文件夹(Shared Folders) 是“最短路径”:把 Host 的某个目录挂载进 Guest,赋予只读(Read-only)读写(Read/Write) 权限,就像把某扇门的钥匙交给来宾,且只开这一扇门。另一条路是完全走网络协议:在 Windows 端用 SMB/CIFS(Server Message Block) 发布共享,在 Linux/Unix 端用 NFS(Network File System) 导出目录,然后在 Guest 里像“挂网盘”一样挂上。前者简单、适合个人机;后者贴近真实网络,便于理解身份(Identity)访问控制(Access Control)审计(Auditing)

共享真正的难点不在“能不能看到”,而在“怎么避免互相覆盖”。没有版本控制(Version Control) 时,两台机器同时编辑同一文件,通常后保存的覆盖先保存的。解决思路有两类:其一,用 Git/SVN 这种“带历史的文件系统”,记录“谁在何时改了什么”,出错也能回滚;其二,用 Google Docs / Microsoft 365 之类“服务端协调并发”的协作编辑工具,天然带修订历史与冲突合并。


六、从“插上线就能访问”到“零信任”:认证与安全的演进

早期的小型 LAN 常常是“只要接进来就能看”,既没有强认证(Strong Authentication) 也没有细权限(Fine-grained Authorization) 。现代做法强调“最小权限原则(Principle of Least Privilege) ”: 只给任务完成所需的最低权限;所有越权访问都应被拒绝并留痕(Logging)

开发者连接服务器常用 SSH(Secure Shell):在客户端生成密钥对(Key Pair),把公钥(Public Key) 放到服务器的 ~/.ssh/authorized_keys私钥(Private Key) 留在本机,之后就能免口令登录

企业 Windows 环境普遍用 KerberosLDAP / Active Directory单点登录(SSO, Single-Sign-On),这解释了“我在公司电脑登录过,访问共享时有时无需再次输密码”的现象。回到三种网络模式:NAT 默认“外界进不来”更保守;桥接需遵守内网策略与补丁节奏;Host-Only 把实验关在“家里”,适合系统级调试。若必须从外部访问 NAT 背后的服务,请只开放必要端口,并配合防火墙(Firewall)入侵检测(IDS) 观察流量。


七、动手路径:最小可行的“服务器—客户端”练习

先给出你要用到的四个命令。

ping 是“打个招呼还会不会回”的连通性测试。Windows、macOS、Linux 都有。在终端输入 ping 8.8.8.8 会持续发包并显示往返时间;在 Windows 默认发 4 次自动结束;在 macOS/Linux 想停止按 Ctrl+C。如果本机和某个地址互 ping 都不通,先排查网络模式/防火墙/地址是否同网段。

ipconfig / ifconfig / ip 是“我到底拿到了什么网卡和地址”。Windows 用 ipconfig;Linux 旧派用 ifconfig(可能需安装 net-tools),现代推荐 ip addr show(简写 ip a);macOS 用 ifconfig。看见形如 192.168.1.57 的 IPv4 地址,就知道它在 192.168.1.0/24 这个网段里。

curl 是“用命令行发一个 HTTP 请求”,等价于“浏览器去访问但不渲染页面”。Windows 10+、macOS、Linux 默认都带。curl http://127.0.0.1/ 会把服务器返回的 HTML 打印出来;curl -I http://… 只看响应头,确认服务活着。

ssh 是“安全地登录到另一台机器”。格式是 ssh user@host,带密钥时 ssh -i /path/to/key user@host,首次连接会提示接受主机指纹。

现在把它们串起来做一次完整体验。先在 VirtualBox 创建一台 Ubuntu Server。为了稳妥,你可以给它两块网卡:第一块设为 NAT(出网装软件),第二块设为桥接(让同网段设备能访问它)。开机后在 guest 里执行:

# 更新软件索引并安装 Nginx(一个常见的 Web 服务器) 
sudo apt update && sudo apt install -y nginx  

# 查看网卡与地址,记下桥接那块的IPv4(例如 192.168.1.57) 
ip addr show  

# 在本机测试它是否活着(在 guest 自己上运行) 
curl -I http://127.0.0.1/ 
# 预期看到 HTTP/1.1 200 OK 或 301/403 等非 5xx 响应

在同一局域网的另一台电脑上打开浏览器访问 http://刚才那段 IPv4/,应该能看到 Nginx 欢迎页。如果你把 VM 的网络改成只有 NAT,也想从外面访问它,就在 VirtualBox 里给这台 VM 配置端口转发:把宿主机 8080 -> 来宾 80。随后在外部机器访问 http://宿主机的IP:8080/,你会感受到“门卫转送”的 NAT 体验。最后,用 ping 在多台设备之间测试连通性;不通时,先看它们是否真的处于同一网段(ipconfig / ip a),再看是否被防火墙或安全组挡住。


八、把“历史词条”落到今天能操作的场景

MS-DOS 不再作为内核存在,但 Windows 的 命令提示符(Command Prompt, cmd.exe) 延续了很多 DOS 命令。你可以装一个 DOSBox,运行老程序,理解“操作系统如何把硬件抽象给应用”的来龙去脉,然后回到 PowerShell 或 Bash,把这些抽象用现代工具落地。NetBEUI 属于“博物馆级协议”,它帮你建立对“广播域/子网/可路由与不可路由”的直觉;在真实工程里,用 TCP/IP 上的 SMB/NFS/HTTP/SSH/VPN 替代它,享受可路由与跨地域协作的红利。VirtualBox 则是一块安全的“沙盒操场”,让你练习系统安装、网络编排、服务部署、权限划界与审计留痕,而不影响日常工作环境。


九、常见名词小词典(短段落版)

物理机(Physical Machine / Bare Metal):真实硬件那台电脑。你摸得到。
宿主机(Host):安装了 Hypervisor、用来承载虚拟机的那台物理机。
来宾系统(Guest OS / VM):运行在虚拟硬件上的操作系统实例。
虚拟机监控器(Hypervisor):负责抽象硬件与调度资源的层。
NAT / 桥接 / Host-Only:三种把 VM 接入世界的“门牌制度”。
广播域(Broadcast Domain):二层网络里“一喊大家都能听到”的范围。
子网(Subnet):IP 地址划分出来的“同一片地盘”,如 192.168.1.0/24。
VPN:让异地设备“逻辑上在同一子网”,像把两栋楼用专线连起来。
SMB / NFS:分别偏 Windows 与 Unix 的文件共享协议。
最小权限原则(PoLP):能看就别给改,能改一处就别给全局。
审计(Audit / Logging):把“谁、在何时、对什么做了什么”写进日志以便追溯。


十、下一步你可以做什么(循序增强的练习路线)

先用 NAT + Host-Only 的双网卡模式在本机完成“安装—启动—访问”的闭环;再切换到桥接,让同网段设备访问你的服务;最后回到 NAT,配置端口转发并只开放必要端口,体会三种模式的边界差异。把共享文件夹既用 VirtualBox 的“挂载”方式做一遍,也用 SMB/NFS 的“网络发布”方式再做一遍,刻意制造“两端同时编辑”的冲突,再用 Git 或协作文档把冲突化解。每走一步,都用 ipconfig / ip a 确认地址归属,用 ping 验证连通性,用 curl -I 确认服务在端口上活着;不通时,按“地址—路由—防火墙”的顺序排查。

Last modified on 2025-09-03 • Suggest an edit of this page
← Prev: 德行培训和无根性
Next: 俱乐部病友 →