一、背景与目标
想搭建一个网络攻防实验环境,通常有两种选择:
- Docker 容器方案:轻量、启动快、适合自动化,但网络隔离和内核共享需要额外注意。
- VirtualBox 虚拟机方案:更接近真实环境,网络模式灵活,但资源占用大、配置稍复杂。
本文分别用这两种方式搭建攻防拓扑,验证网络隔离、流量走向和连通性。
二、实验环境
- Ubuntu 22.04.5
- Docker 28.4.0
- VirtualBox
- 攻击机:Kali Rolling 2025.2
- 网关:Debian Buster
- 靶机:Kali / Windows XP SP3
实验一:基于 Docker 的网络攻防环境
1. 安装 Docker
使用 Docker 官方安装方式:
# 安装依赖sudoaptupdatesudoaptinstall-yca-certificatescurlgnupg# 添加 Docker 官方 GPG 密钥sudoinstall-m0755-d/etc/apt/keyringscurl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|\sudogpg--dearmor-o/etc/apt/keyrings/docker.gpg# 添加 Docker 源echo"deb [arch=$(dpkg --print-architecture)signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu$(./etc/os-release&&echo"$VERSION_CODENAME")stable"|\sudotee/etc/apt/sources.list.d/docker.list>/dev/null# 安装 Dockersudoaptupdatesudoaptinstall-ydocker-ce docker-ce-cli containerd.io docker-compose-plugin验证:
docker--versiondockercompose version2. 配置镜像加速器
在 Docker Desktop 的 Settings → Docker Engine 中,修改 JSON 配置:
{"registry-mirrors":["https://docker.1ms.run","https://docker.apiba.cn"]}点击 Apply & Restart,等待 Docker 重启完成。
3. 启动 CyberRangeSlim 服务
进入项目目录,使用docker compose启动:
dockercompose up-d查看容器状态:
dockerps4. 使用 docker-network-graph 可视化网络拓扑
安装依赖:
# 初始化子模块gitsubmodule update--init--recursive# 安装依赖环境cddocker-network-graph pyenvlocal3.9.14 pipenvinstall# 安装图形处理工具sudoaptupdatesudoaptinstall-ygraphviz生成拓扑图:
pipenv run python docker-net-graph.py|fdp-Tpng-oout.png生成的拓扑图如下:
从图中可以看到:
cyberrangeslim_victim-1-1:172.16.238.101cyberrangeslim_victim-2-1:172.16.238.102cyberrangeslim_gw-1:172.16.238.3 / 10.0.10.3cyberrangeslim_attacker-1:10.0.10.2- 内部网络:172.16.238.0/24
- 外部网络:10.0.10.0/24
5. 网络连通性测试
5.1 靶机可以直接访问攻击者主机
进入靶机容器:
dockerexec-it<victim_container_id>/bin/sh测试访问攻击者:
ping10.0.10.25.2 攻击者主机无法直接访问靶机
在攻击者容器中测试:
ping172.16.238.101ping172.16.238.102结果均为 100% packet loss,说明攻击者无法直接访问内网靶机。
5.3 网关可以直接访问攻击者主机和靶机
进入网关容器:
dockerexec-it<gw_container_id>/bin/sh测试:
ping10.0.10.2ping172.16.238.101ping172.16.238.102均能正常通信。
5.4 靶机所有上下行流量必须经过网关
在靶机上抓包:
tcpdump-iany-w1.pcap-n将抓包文件导出到宿主机后,用 Wireshark 分析。
可以看到,靶机访问外网或访问攻击者时,流量都先经过网关。
5.5 所有节点均可以访问互联网
分别进入网关、攻击者、victim-1、victim-2,执行:
curl-Ihttps://www.baidu.com说明网关的 NAT 转发配置生效,内网节点可以访问外网。
6. Docker 方案小结
优点:
- 启动快,资源占用低;
- 网络拓扑可用
docker-network-graph自动生成; - 适合自动化测试和批量部署。
注意点:
- 容器共享内核,隔离性不如虚拟机;
- 需要正确配置
iptablesNAT 和 DNS; - 抓包时注意选择正确的网卡。
实验二:基于 VirtualBox 的网络攻防环境
1. 实验目的
- 掌握 VirtualBox 虚拟机的安装与使用;
- 掌握 VirtualBox 的虚拟网络类型与按需配置;
- 掌握虚拟硬盘多重加载。
2. 网络配置表
| 虚拟机 | 网卡 | 网络模式 | IP 地址 |
|---|---|---|---|
| Kali Attacker | 网卡1 | NAT | 10.0.2.15 |
| Debian GW | 网卡1 | NAT | 10.0.2.4 |
| Debian GW | 网卡2 | Host-Only | 192.168.56.101 |
| Debian GW | 网卡3 | 内部网络 | 172.16.111.1 |
| Debian GW | 网卡4 | 内部网络 | 172.16.222.1 |
| Kali Victim1 | 网卡1 | 内部网络 | 172.16.111.122 |
| Kali Victim2 | 网卡1 | 内部网络 | 172.16.222.146 |
| XP-Victim1 | 网卡1 | 内部网络 | 172.16.111.106 |
| XP-Victim2 | 网卡1 | 内部网络 | 172.16.222.112 |
网络拓扑图:
3. 虚拟硬盘多重加载
将虚拟硬盘配置成多重加载,效果如下:
4. 连通性验证
4.1 靶机可以直接访问攻击者主机
在靶机中测试:
ping10.0.2.154.2 攻击者主机无法直接访问靶机
在 Kali Attacker 中测试:
ping172.16.111.106ping172.16.222.112均超时,说明攻击者无法直接访问内网靶机。
4.3 网关可以直接访问攻击者主机和靶机
在 Debian GW 中测试:
ping10.0.2.15ping172.16.111.106ping172.16.222.112均能正常通信。
4.4 靶机流量必须经过网关
在网关上抓包:
tcpdump-iany-w2025-09-15_2.pcap-n靶机访问攻击者:
ping10.0.2.15靶机访问外网:
pingwww.baidu.com用 Wireshark 分析抓包文件:
可以看到,流量先到网关,再由网关转发。
4.5 所有节点均可以访问互联网
在网关、攻击者、各靶机中分别访问百度:
5. VirtualBox 方案小结
- NAT 模式:虚拟机可以访问外网,但外部无法直接访问虚拟机,除非配置端口转发。
- Host-Only 模式:主机与虚拟机之间可以通信,适合管理网络。
- 内部网络模式:虚拟机之间互相通信,与外部隔离,适合模拟内网靶场。
三、两种方案对比
| 维度 | Docker 方案 | VirtualBox 方案 |
|---|---|---|
| 资源占用 | 低 | 高 |
| 启动速度 | 秒级 | 分钟级 |
| 隔离性 | 共享内核,较弱 | 完全虚拟化,较强 |
| 网络配置 | 需要手动配置 NAT、DNS、iptables | 图形界面,模式清晰 |
| 自动化 | 适合脚本、CI/CD | 适合手动实验 |
| 适用场景 | 快速搭建、批量测试 | 真实环境模拟、教学演示 |
四、总结
本文用 Docker 和 VirtualBox 分别搭建了网络攻防基础环境,验证了:
- 靶机可以访问攻击者,攻击者无法直接访问靶机;
- 网关可以同时访问攻击者和靶机;
- 靶机流量必须经过网关;
- 所有节点均可访问互联网。
两种方案各有优劣:Docker 轻量快速,适合自动化;VirtualBox 更接近真实环境,适合教学和复杂拓扑。