Brave
@47c132035ed7a1105a867946b99d67af 网络安全与大数据研究小组 公开
讨论 在 VirtualBox 中运行 OpenWrt:构建主权个人的专属虚拟路由器

在 VirtualBox 中运行 OpenWrt:构建主权个人的专属虚拟路由器

OpenWrt 作为一个高度可定制化的开源路由器固件,为网络爱好者和开发者提供了极大的灵活性。为了更方便地探索和学习 OpenWrt,我们可以利用虚拟化技术,在 VirtualBox 中创建一个虚拟的 OpenWrt 路由器环境。这种方式不仅成本低廉、风险可控,还能让你在不影响现有网络的情况下自由实验各种网络配置方案。


一、环境准备与镜像下载

1.1 VirtualBox 安装

本教程使用 Linux 系统进行操作,在进行如下操作前,请提前下载并安装 VirtualBox。从 VirtualBox 官方网站 下载对应操作系统的版本并安装。也可以按需下载并安装 VirtualBox 扩展包(Extension Pack)。扩展包提供了 USB 2.0/3.0 支持、磁盘加密、NVMe 和 PXE 引导等拓展功能。

⚠️ 版本兼容性提示:

本教程基于 VirtualBox 7.x 版本编写。如果你使用的是旧版本(如 6.x),部分界面和操作路径可能略有差异。建议升级到最新的稳定版本以获得最佳兼容性和安全更新。

1.2 下载 OpenWrt 镜像

📥 访问 OpenWrt 官方下载页面,下载最新的 x86/64 架构的镜像文件。

🆕 当前版本信息(截至 2026 年 2 月):

版本类型版本号发布日期说明
稳定版(Stable)24.10.52025 年 12 月 18 日推荐用于生产环境
候选版(RC)25.12.0-rc42026 年 1 月 29 日新版本测试中,包含最新特性

具体下载路径示例:

https://downloads.openwrt.org/releases/24.10.5/targets/x86/64/

1.3 镜像类型选择 🔍

x86/64 位架构的 OpenWrt 镜像主要有两种类型,选择合适的镜像对后续使用体验至关重要:

特性combined-squashfs.img.gzcombined-ext4.img.gz
📁 文件系统SquashFS(只读)+ JFFS2(读写overlay)Ext4(完全读写)
💾 存储空间有限,overlay 分区存储配置和软件包可自由扩展
🔄 恢复出厂✅ 支持(清除 overlay 即可)❌ 不支持原生恢复
🔧 分区扩展❌ 不支持✅ 支持
📦 软件安装空间受限,大量安装后可能空间不足空间充裕
🖥️ 管理方式OpenWrt 传统方式类似标准 Linux
🎯 适用场景嵌入式设备、需要恢复功能的场景虚拟机、x86 设备

📌 深入理解两种文件系统:

SquashFS 的工作原理:

SquashFS 是一种高度压缩的只读文件系统,使用 LZMA 算法压缩数据,可比 JFFS2 节省 20-30% 的存储空间。由于根文件系统只读,所有修改(配置变更、安装的软件包)都存储在独立的 overlay 分区中。这种设计允许通过简单清除 overlay 分区来实现"恢复出厂设置"。但缺点是每次修改系统文件时,实际上是在 overlay 分区创建了一份副本,这会导致空间的额外消耗。

Ext4 的优势:

Ext4 是 Linux 标准的日志文件系统,与常规 Linux 发行版的管理方式完全一致。对于虚拟机环境而言,Ext4 的最大优势在于可以轻松扩展磁盘空间——你可以随时根据需要增大虚拟磁盘容量,而无需重新安装系统。此外,软件包管理工具 opkg 能够准确报告剩余空间,避免因空间计算错误导致的安装失败。

🎯 本教程推荐选择:

为了方便后续操作和扩展存储空间,本教程推荐 generic-ext4-combined.img.gz 镜像。该镜像使用 ext4 文件系统,不仅支持完整的读写操作和分区扩展,还能像管理普通 Linux 系统一样管理 OpenWrt,非常适合学习和实验环境。

📝 其他选项说明:

当然,你也可以编译自己的自定义镜像,通过 OpenWrt 的 Image Builder 或完整的源码编译来定制专属固件。请 DYOR(Do Your Own Research),本文就不展开讨论了。


二、镜像格式转换与优化

下载完成后,我们需要将 .img.gz 镜像文件解压缩,并转换为 VirtualBox 支持的 .vdi 格式。

2.1 解压镜像文件

使用以下命令解压缩镜像文件:

gzip -d openwrt-*-x86-64-generic-ext4-combined.img.gz

💡 命令说明:

  • gzip -d:解压 gzip 压缩文件
  • 解压后将得到 openwrt-x86-64-generic-ext4-combined.img 原始镜像文件
  • ⚠️ 解压后原始 .gz 文件会被删除,如需保留可使用 gzip -dk 参数

2.2 转换为 VDI 格式

使用 VirtualBox 自带的 VBoxManage 工具将 .img 文件转换为 .vdi 格式:

VBoxManage convertfromraw --format VDI openwrt-*-x86-64-generic-ext4-combined.img openwrt.vdi

💡 命令说明:

  • convertfromraw:从原始磁盘镜像转换
  • --format VDI:指定输出格式为 VirtualBox 原生格式
  • 转换完成后将创建 openwrt.vdi 虚拟磁盘文件

🔧 格式对比知识拓展:

格式全称特点
VDIVirtual Disk ImageVirtualBox 原生格式,支持动态扩展和快照
VMDKVirtual Machine DiskVMware 格式,VirtualBox 也支持
VHDVirtual Hard DiskHyper-V 格式,跨平台兼容
RAWRaw Disk Image无格式原始数据,体积最大

2.3 扩展虚拟磁盘容量

🔑 这一步非常重要! 默认的 OpenWrt 镜像只有约 120MB,对于安装额外软件包来说远远不够。

VBoxManage modifymedium openwrt.vdi --resize 4096

💡 命令说明:

  • modifymedium:修改虚拟介质属性
  • --resize 4096:将磁盘容量扩展到 4096MB(4GB)
  • 💾 你可以根据实际需求调整这个数值,建议不少于 1024MB(1GB)

⚠️ 重要提醒:

此命令仅扩展了虚拟磁盘的容量上限,实际分区并未自动扩展。系统启动后,你需要在 OpenWrt 内部使用分区工具(如 fdiskparted)来扩展分区,然后使用 resize2fs 命令扩展文件系统。具体操作将在后续章节详细说明。


三、创建 VirtualBox 虚拟机

3.1 新建虚拟机

启动 VirtualBox,通过以下步骤创建新虚拟机:

  1. 点击菜单栏 "控制" → "新建"(或使用快捷键 Ctrl+N
  2. 进入虚拟机创建向导

3.2 基本配置

按照以下参数配置虚拟机:

配置项推荐值说明
📛 名称OpenWrt自定义,便于识别
📁 文件夹默认或自定义路径虚拟机文件存储位置
🖥️ 类型Linux操作系统类型
📦 版本Linux 2.6 / 3.x / 4.x / 5.x (64-bit)OpenWrt 24.x 基于 Linux 5.15/6.x 内核

3.3 硬件配置

OpenWrt 对硬件资源需求极低,以下为推荐配置:

资源最低配置推荐配置说明
💾 内存128MB256MB - 512MB作为网关使用时 256MB 足够;如需运行容器或复杂服务可适当增加
⚡ CPU1 核心1-2 核心大多数场景 1 核心即可

📊 资源配置建议:

与原文提到的 1024MB 内存相比,实际上 OpenWrt 非常轻量,纯路由功能 128MB 就能流畅运行。但如果计划运行以下服务,建议适当增加内存:

  • 📦 Docker 容器:至少 512MB
  • 🔒 VPN 服务器(如 WireGuard、OpenVPN):256MB 以上
  • 📈 流量统计(vnStat、Netdata):256MB 以上
  • 🚫 广告过滤(AdGuard Home):512MB 以上

3.4 挂载虚拟硬盘

在硬盘配置步骤中:

  1. 选择 "使用现有的虚拟硬盘文件"
  2. 点击文件夹图标 📁 打开 "虚拟介质管理器"
  3. 点击 "添加" 按钮
  4. 选择之前创建的 openwrt.vdi 文件
  5. 点击 "选择" 确认

✅ 完成上述步骤后,点击"完成"创建虚拟机。


四、配置虚拟网络环境

网络配置是 VirtualBox 中运行 OpenWrt 最关键的环节。VirtualBox 提供了多种网络模式,合理配置可以让虚拟路由器发挥真正的作用。

4.1 VirtualBox 网络模式详解 📚

在配置之前,让我们先了解 VirtualBox 提供的各种网络模式:

模式访问互联网主机↔虚拟机虚拟机↔虚拟机外部访问虚拟机典型用途
🌐 NAT❌(需端口转发)简单上网
🔗 NAT 网络❌(需端口转发)多虚拟机共享上网
🌉 桥接网卡模拟物理设备
🏠 仅主机网络隔离测试环境
🔌 内部网络虚拟机间通信

4.2 推荐网络配置方案

⚠️ 关键提示:务必在首次启动虚拟机之前完成网络配置,否则 OpenWrt 可能无法正常联网!

为了模拟真实的路由器使用场景,我们采用 双网卡配置方案

📍 适配器 1:桥接网卡(LAN 口)

配置项设置值说明
连接方式桥接网卡直接连接物理网络
界面名称选择主机的物理网卡eth0enp3s0wlan0
高级 → 控制芯片Intel PRO/1000 MT 桌面兼容性最佳
高级 → 混杂模式根据需求选择"全部允许"可抓包分析,"拒绝"更安全

🔍 网卡类型深入说明:

VirtualBox 提供多种虚拟网卡类型,性能由高到低排列为:

  1. virtio-net(半虚拟化):性能最佳,但需要客户机操作系统支持
  2. Intel PRO/1000 系列:兼容性优秀,支持分段卸载和校验和卸载
  3. PCNet 系列:较老的网卡型号,兼容性最广但性能一般

OpenWrt 原生支持 virtio 驱动,如追求最佳网络性能可选择"半虚拟化网络(virtio-net)"。但考虑到兼容性和调试便利性,本教程推荐使用 Intel PRO/1000 MT 桌面型。

📍 适配器 2:NAT(WAN 口)

配置项设置值说明
连接方式网络地址转换 (NAT)通过主机访问互联网
高级 → 控制芯片Intel PRO/1000 MT 桌面与适配器 1 保持一致

📐 网络拓扑示意图:

                                    ┌─────────────────────┐
                                    │      互联网         │
                                    └──────────┬──────────┘
                                               │
                                    ┌──────────▼──────────┐
                                    │   VirtualBox NAT    │
                                    │   (10.0.2.0/24)     │
                                    └──────────┬──────────┘
                                               │ eth1 (WAN)
┌─────────────────┐              ┌─────────────▼─────────────┐
│   你的设备      │◄────────────►│     OpenWrt 虚拟机        │
│ (电脑/手机等)   │  桥接网络     │  eth0 (LAN): 192.168.1.1  │
└─────────────────┘              └───────────────────────────┘

4.3 替代方案:仅主机网络 + NAT

如果你的网络环境不允许使用桥接模式(如公司网络有 MAC 地址限制),可以采用以下替代方案:

📍 步骤 1:创建仅主机网络

VirtualBox 7.x 操作路径:

  1. 点击菜单 "文件" → "工具" → "网络管理器"
  2. 选择 "仅主机网络" 标签页
  3. 点击 "创建" 按钮
  4. 记录分配的网络地址(默认为 192.168.56.1/24
  5. 重要:在"DHCP 服务器"标签页中取消勾选"启用服务器",避免与 OpenWrt 的 DHCP 服务冲突

📍 步骤 2:配置虚拟机网络适配器

适配器连接方式用途
适配器 1仅主机(Host-Only)网络LAN 口,用于管理访问
适配器 2NATWAN 口,用于访问互联网

五、初始化 OpenWrt 系统

5.1 首次启动

完成网络配置后,在 VirtualBox 中选择 OpenWrt 虚拟机,点击 "启动" 按钮。

🖥️ 启动过程说明:

虚拟机将显示 Linux 内核启动信息,这个过程通常只需要几秒钟。当看到命令提示符 root@OpenWrt:/# 时,表示系统已成功启动。首次启动时,OpenWrt 会自动初始化网络配置,eth0 会被分配到 br-lan 网桥并设置 IP 为 192.168.1.1。

5.2 访问管理界面

OpenWrt 提供两种管理方式:

🌐 方式一:LuCI Web 界面(推荐新手)

  1. 确保你的设备与 OpenWrt 在同一网络(连接到桥接网络或仅主机网络)
  2. 如使用桥接模式,可能需要先将电脑 IP 设置为同一网段(如 192.168.1.x)
  3. 打开浏览器,访问:http://192.168.1.1
  4. 登录信息:
    • 👤 用户名:root
    • 🔑 密码:(留空,直接点击登录)

🖼️ LuCI 界面特点:

LuCI 是 OpenWrt 的官方 Web 管理界面,基于 Lua 语言开发,提供了直观的图形化配置界面。通过 LuCI,你可以完成绝大多数路由器配置工作,包括网络设置、防火墙规则、软件包管理等。界面支持多语言,可在 System → System → Language 中切换为中文。

⌨️ 方式二:SSH 命令行(推荐进阶用户)

ssh root@192.168.1.1

首次连接时,SSH 客户端会提示确认主机密钥指纹,输入 yes 继续。由于默认无密码,将直接登录到 shell。

5.3 安全配置(必做)🔐

⚠️ 安全警告:OpenWrt 默认无 root 密码,这在任何网络环境中都是极大的安全隐患!

📍 步骤 1:设置 root 密码

方式 A:通过 LuCI 界面

  1. 登录 LuCI
  2. 导航至 "系统" → "管理权限"
  3. "路由器密码" 区域输入新密码(两次)
  4. 点击 "保存并应用"

方式 B:通过命令行

passwd

🔒 密码安全建议:

  • 使用至少 12 个字符
  • 混合使用大小写字母、数字和特殊符号
  • 避免使用常见单词和个人信息
  • 建议每 90 天更换一次密码

📍 步骤 2:启用 HTTPS 访问(可选但推荐)

默认情况下,LuCI 使用未加密的 HTTP 协议,密码以明文传输。在不可信的网络环境中,强烈建议启用 HTTPS:

# 安装 HTTPS 支持
opkg update
opkg install luci-ssl

# 启用 HTTPS 重定向
uci set uhttpd.main.redirect_https=1
uci commit uhttpd
service uhttpd reload

配置完成后,访问 https://192.168.1.1(首次访问会提示证书警告,这是正常的,因为使用的是自签名证书)。

📍 步骤 3:配置 SSH 安全(可选)

为了进一步提升安全性,建议禁用密码登录,仅使用密钥认证:

# 1. 在你的电脑上生成 SSH 密钥对(如已有可跳过)
ssh-keygen -t ed25519 -C "your-email@example.com"

# 2. 将公钥复制到 OpenWrt
ssh-copy-id root@192.168.1.1

# 3. 在 OpenWrt 上禁用密码登录
uci set dropbear.@dropbear[0].PasswordAuth='0'
uci set dropbear.@dropbear[0].RootPasswordAuth='0'
uci commit dropbear
service dropbear restart

六、扩展文件系统(重要)💾

还记得我们在第二章中扩展了虚拟磁盘容量吗?现在需要在 OpenWrt 内部完成分区和文件系统的扩展。

6.1 检查当前磁盘状态

# 查看磁盘分区情况
fdisk -l /dev/sda

# 查看文件系统使用情况
df -h

你会发现虽然虚拟磁盘有 4GB,但 rootfs 分区可能只有约 100MB。

6.2 扩展分区

⚠️ 操作前请确保已备份重要数据!

# 安装分区工具
opkg update
opkg install fdisk

# 进入交互式分区工具
fdisk /dev/sda

在 fdisk 中执行以下操作:

  1. 输入 p 查看分区表,记录第 2 分区的起始扇区号
  2. 输入 d,然后选择 2 删除第 2 分区
  3. 输入 n 创建新分区,分区号选 2
  4. 起始扇区输入之前记录的数值(必须与原分区完全一致!
  5. 结束扇区直接回车使用默认值(使用全部剩余空间)
  6. 如提示是否移除文件系统签名,选择 N(保留)
  7. 输入 w 写入分区表并退出

6.3 扩展文件系统

# 重启系统使分区表生效
reboot

# 重启后扩展 ext4 文件系统
resize2fs /dev/sda2

# 验证扩展结果
df -h

✅ 成功后,你将看到 rootfs 分区已扩展到完整的磁盘容量。


七、网络深度配置

7.1 理解 OpenWrt 网络模型

在进行网络配置之前,理解 OpenWrt 的网络架构至关重要:

┌─────────────────────────────────────────────────────────────────┐
│                        OpenWrt 网络架构                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   物理接口          逻辑接口            网络区域(Zone)         │
│   ─────────        ─────────          ─────────────────        │
│   eth0  ────────►  br-lan  ────────►  lan (可信区域)           │
│   eth1  ────────►  wan     ────────►  wan (不可信区域)         │
│                    wan6    ────────►  wan (IPv6)               │
│                                                                 │
│   防火墙规则基于区域(Zone)运作,而非具体接口                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

📌 核心概念说明:

  • 物理接口(Physical Interface):对应真实或虚拟的网卡,如 eth0eth1
  • 逻辑接口(Logical Interface):协议配置层,定义 IP 地址、网关等
  • 网桥(Bridge):将多个接口合并,如 br-lan 桥接了 eth0 和无线接口
  • 区域(Zone):防火墙概念,定义安全边界和转发规则

7.2 配置 WAN 接口

默认情况下,OpenWrt 仅配置了 LAN 接口。我们需要手动添加 WAN 接口以访问互联网。

🌐 方式一:通过 LuCI 配置

  1. 导航至 "网络" → "接口"
  2. 点击 "添加新接口"
  3. 配置参数:
    • 名称:wan
    • 协议:DHCP 客户端(让 VirtualBox NAT 自动分配 IP)
    • 设备:eth1
  4. 点击 "创建接口"
  5. "防火墙设置" 标签页,将其分配到 wan 区域
  6. 保存并应用

⌨️ 方式二:通过命令行配置

# 创建 WAN 接口
uci set network.wan=interface
uci set network.wan.proto='dhcp'
uci set network.wan.device='eth1'

# 配置防火墙区域
uci add_list firewall.@zone[1].network='wan'

# 应用配置
uci commit network
uci commit firewall
service network restart
service firewall restart

7.3 修改 LAN 网段(可选)

如果默认的 192.168.1.0/24 网段与你的现有网络冲突,可以修改 LAN 地址:

# 修改 LAN IP 地址
uci set network.lan.ipaddr='10.0.0.1'

# 如使用仅主机网络,建议设置为该网段
# uci set network.lan.ipaddr='192.168.56.66'

uci commit network
service network restart

⚠️ 注意:修改后需要使用新 IP 地址访问管理界面!

7.4 验证网络连通性

# 测试 WAN 口是否获取到 IP
ifconfig eth1

# 测试互联网连通性
ping -c 4 8.8.8.8

# 测试 DNS 解析
ping -c 4 openwrt.org

八、软件包管理与功能扩展 📦

8.1 软件包管理基础

OpenWrt 使用 opkg 作为软件包管理器,类似于 Debian 的 apt 或 Alpine 的 apk

常用命令:

命令功能
opkg update更新软件源列表
opkg list列出所有可用软件包
opkg list-installed列出已安装的软件包
opkg install <pkg>安装软件包
opkg remove <pkg>卸载软件包
opkg info <pkg>查看软件包详情

8.2 推荐安装的软件包

🌐 网络工具:

opkg update
opkg install tcpdump      # 网络抓包工具
opkg install mtr          # 网络诊断工具(ping + traceroute)
opkg install iperf3       # 网络带宽测试
opkg install bind-dig     # DNS 查询工具

🔒 安全增强:

opkg install banip        # IP 黑名单防护
opkg install https-dns-proxy  # DoH (DNS over HTTPS) 代理

📊 监控与统计:

opkg install vnstat2      # 流量统计
opkg install htop         # 进程监控
opkg install luci-app-statistics  # LuCI 统计图表插件

🌍 中文支持:

opkg install luci-i18n-base-zh-cn  # LuCI 中文语言包

九、高级应用场景 🚀

完成以上步骤后,你就可以像操作真实的 OpenWrt 路由器一样,对虚拟机中的 OpenWrt 系统进行配置和管理。以下是一些进阶应用方向:

9.1 作为其他虚拟机的网关

你可以让 OpenWrt 虚拟机作为其他 VirtualBox 虚拟机的网关,模拟完整的企业网络环境:

  1. 创建一个"内部网络"(Internal Network),命名如 intnet
  2. 为 OpenWrt 添加第三个网络适配器,连接到 intnet
  3. 在 OpenWrt 中配置该接口并启用 DHCP
  4. 其他虚拟机的网络设置为同一 intnet,即可通过 OpenWrt 上网

9.2 网络安全实验

OpenWrt 是学习网络安全的绝佳平台:

  • 🔥 防火墙规则实验:配置 iptables/nftables 规则
  • 🕵️ 入侵检测:安装 Snort 或 Suricata
  • 🔒 VPN 网关:部署 WireGuard 或 OpenVPN
  • 🚫 广告过滤:安装 AdGuard Home 或 Pi-hole

9.3 物联网(IoT)网关

利用 OpenWrt 的扩展能力,可以打造智能家居网关:

  • MQTT Broker(Mosquitto)
  • Zigbee/Z-Wave 网关集成
  • Home Assistant 集成

十、故障排除 🔧

10.1 常见问题与解决方案

问题可能原因解决方案
无法访问 192.168.1.1IP 地址冲突或网络配置错误检查主机 IP 是否在同一网段;尝试通过 VirtualBox 控制台直接操作
WAN 口无法获取 IPNAT 网络配置问题确认适配器类型正确;检查 VirtualBox NAT 服务状态
软件包安装失败网络不通或空间不足先执行 opkg update;检查磁盘空间 df -h
启动后黑屏显示配置问题在虚拟机设置中尝试切换显卡类型为 VBoxVGA

10.2 重置系统

如需完全重新开始,最简单的方式是删除虚拟机并重复本教程步骤。如只需重置配置:

# 重置所有配置到默认值
firstboot -y && reboot

⚠️ 注意:此命令在 ext4 系统上会清除所有已安装的软件包和配置!


总结

通过 VirtualBox 运行 OpenWrt,主权个人可以方便地搭建一个虚拟的网络实验环境,深入学习和研究 OpenWrt 的各种功能,并探索其在网络安全、物联网等领域的应用。虚拟化环境的最大优势在于其可逆性——你可以大胆尝试各种配置而不必担心损坏真实设备,快照功能更是让你能够随时回滚到之前的状态。

📚 延伸学习资源: