GARJE-01/Mini-Enterprise-Network
GitHub: GARJE-01/Mini-Enterprise-Network
一套模拟小型企业网络的综合实验方案,通过Cisco模拟器设计拓扑并利用虚拟机部署Linux核心服务与防火墙策略。
Stars: 0 | Forks: 0
# 🏢 带有服务器基础设施的小型企业网络
**作者:** Mayur Garje
**日期:** 2026年5月
**状态:** ✅ 已完成并可供演示
## 📌 项目概述
本项目模拟了一个真实的小型企业网络环境——即网络工程师在入职第一天就会被要求设计和部署的那种网络。
它由两部分组成:
| 部分 | 工具 | 涵盖内容 |
| --------------------------- | ------------------------- | --------------------------------------------------------------- |
| **A — 网络设计** | Cisco Packet Tracer | VLAN、VLAN 间路由、ACL、NAT |
| **B — 实时基础设施** | VMware + Ubuntu + pfSense | DNS、DHCP、Web 服务器、文件服务器、防火墙、内容过滤 |
A 部分展示了 **Cisco CLI 和网络设计技能**——与 CCNA 考试直接对标。
B 部分展示了 **真实的服务器和防火墙部署技能**——在实际家庭网络中运行真实的软件。
## 🎯 解决的实际问题
| 问题 | 解决方案 |
| ----------------------------- | ------------------------------------------- |
| 没有集中的 IP 管理 | Ubuntu 上的 ISC-DHCP 服务器 + pfSense DHCP |
| 没有内部域名解析 | 带有自定义区域 (company.local) 的 BIND9 DNS |
| 没有内部网站 | Apache2 Web 服务器——企业内网页面 |
| 没有安全的文件共享 | Samba 文件服务器——可从 Windows 访问 |
| 没有网络层面的安全性 | 带有 NAT 和 ACL 规则的 pfSense 防火墙 |
| 不受限制的互联网访问 | pfBlockerNG DNSBL——拦截了 17,000+ 个域名 |
| 用户绕过 DNS | DNS 强制——端口 53 防火墙规则 |
## 🗺️ 网络拓扑
### A 部分 — Cisco Packet Tracer

```
[ Internet / ISP ]
|
[ R1 — 2911 ]
Inter-VLAN routing + NAT + ACL
|
[ SW1 — 2960 ]
802.1Q Trunk
/ | | \
VLAN10 VLAN20 VLAN30 VLAN40
Office Server Guest Mgmt
```
### B 部分 — VMware (实时)
```
[ Windows 11 Host PC ]
|
[ VMware NAT ]
192.168.211.2
/ \
[ pfSense VM ] [ Ubuntu Server VM ]
WAN: 192.168.211.134 IP: 192.168.20.101
LAN: 192.168.20.1
DHCP | DNS | Firewall DNS | DHCP | Apache | Samba
pfBlockerNG DNSBL
```
## 📋 VLAN 设计(A 部分)
| VLAN | 名称 | 子网 | 网关 | 用途 |
| ---- | ---------- | --------------- | ------------ | ------------------------- |
| 10 | Office | 192.168.10.0/24 | 192.168.10.1 | 员工工作站 |
| 20 | Server | 192.168.20.0/24 | 192.168.20.1 | 内部服务器 |
| 30 | Guest | 192.168.30.0/24 | 192.168.30.1 | 仅互联网访问 |
| 40 | Management | 192.168.40.0/24 | 192.168.40.1 | 网络设备管理 |
## 🖥️ 部署的服务(B 部分)
### Ubuntu Server 虚拟机 — 192.168.20.101
| 服务 | 软件包 | 端口 | 作用 |
| ------- | -------- | ---- | -------------------------------------------------- |
| DNS | BIND9 | 53 | 解析 company.local——转发外部查询 |
| DHCP | ISC-DHCP | 67 | 自动为局域网设备分配 IP |
| Web | Apache2 | 80 | 托管公司内网页面 |
| Files | Samba | 445 | 可从 Windows 访问的共享文件夹 |
| Remote | OpenSSH | 22 | 远程终端访问 |
### pfSense 防火墙虚拟机 — 192.168.20.1
| 功能 | 详细信息 |
| ----------------- | ---------------------------------------------- |
| 防火墙 | 7 条规则——状态数据包检查 |
| NAT | LAN → WAN 转换以提供互联网访问 |
| DHCP | 192.168.20.100 – 192.168.20.199 地址池 |
| DNS 解析器 | 具有转发模式 + 域名覆盖的 Unbound |
| DNS 强制 | 规则 2+3——阻止外部 DNS 绕过 |
| 内容过滤 | pfBlockerNG DNSBL——拦截了 17,004 个域名 |
## 🔥 pfSense 防火墙规则
| # | 状态 | 协议 | 来源 | 目标 | 端口 | 用途 |
| --- | ------ | -------- | ------ | ------------ | ------- | ------------------------------------ |
| 1 | ✅ | Any | Any | LAN Address | 80, 443 | 防锁定——GUI 始终可访问 |
| 2 | ✅ | TCP | Any | 192.168.20.1 | 53 | 允许 DNS 指向 pfSense |
| 3 | ❌\* | TCP/UDP | Any | Any | 53 | 阻止外部 DNS——无法绕过 |
| 4 | 🔶 | IPv4 | Any | pfB_PRI1_v4 | Any | pfBlockerNG IP 拦截 (自动) |
| 5 | ❌ | TCP/UDP | Any | BLOCK_SITES | Any | 拦截社交媒体 (已禁用) |
| 6 | ✅ | IPv4 | LAN | Any | Any | 默认允许局域网到互联网 |
| 7 | ✅ | IPv6 | LAN | Any | Any | 默认允许局域网 IPv6 |
\*规则 3 是 DNS 强制规则——启用后,客户端将无法通过将其 DNS 更改为 8.8.8.8 来绕过 pfBlockerNG。
## 🚫 内容过滤 — pfBlockerNG
### 工作原理
```
Client: what is youtube.com?
→ pfSense DNS (192.168.20.1:53)
→ pfBlockerNG DNSBL intercepts
→ Returns: 10.10.10.1 (sinkhole)
→ Client connects to 10.10.10.1 → nothing there
→ YouTube inaccessible ✅
```
### 激活的拦截列表
| Feed | 域名 | 更新 |
| --------------------- | ----------- | ------- |
| StevenBlack_ADs | 16,998 | 每日 |
| Custom_List (YouTube) | 6 | 手动 |
| **总计** | **17,004+** | — |
### 被拦截的 YouTube 域名
```
youtube.com
www.youtube.com
m.youtube.com
ytimg.com
googlevideo.com
youtu.be
```
### 验证 — YouTube 已被拦截

```
C:\Users\MAYUR> nslookup youtube.com
Server: pfSense.lab.local
Address: 192.168.20.1
Name: youtube.com
Address: 10.10.10.1 ← sinkhole IP — blocked ✅
```
### 实时拦截警报

pfBlockerNG 积极拦截来自 Windows PC 的广告和跟踪域名的实时证明。
## 📸 关键截图
### 网络拓扑

_Cisco Packet Tracer 中的 4-VLAN 企业拓扑_
### DNS 验证

_Windows 正在 ping myserver.local——DNS 正确解析_

_外部 DNS 转发正常——google.com 通过 Ubuntu BIND9 解析_
### Samba 文件服务器

_Windows 文件资源管理器正在访问 Linux 服务器上的 CompanyShare_
### Apache Web 服务器

_通过 IP 访问的公司内网页面_

_通过域名访问的公司内网页面——完整的 DNS 链正常工作_
### pfSense 仪表板

_pfSense 仪表板显示两个接口均已 UP_
### pfSense DHCP

_已配置 DHCP 地址池 192.168.20.100 – 192.168.20.199_
### pfBlockerNG

_DNSBL 组——ADs_Basic 处于活动状态,包含 16,998 个域名_
### YouTube 已拦截

_YouTube 解析到接收域 10.10.10.1——已被拦截_
### 实时拦截警报

_实时 DNSBL 拦截日志——广告信标被自动拦截_
## 📁 文档
| 文档 | 内容 |
| ----------------------------------------------------------------- | --------------------------------------------------------- |
| [01-NETWORK-TOPOLOGY.md](docs/01-NETWORK-TOPOLOGY.md) | 完整的网络设计——VLAN、IP 寻址、流量走向 |
| [02-UBUNTU-SERVER-SETUP.md](docs/02-UBUNTU-SERVER-SETUP.md) | DNS、DHCP、Apache、Samba——完整设置指南 |
| [03-PFSENSE-SETUP.md](docs/03-PFSENSE-SETUP.md) | pfSense 安装、向导、DHCP、DNS 解析器、网关 |
| [04-PFSENSE-FIREWALL-RULES.md](docs/04-PFSENSE-FIREWALL-RULES.md) | 全部 7 条规则——DNS 强制架构说明 |
| [05-PFBLOCKERNG-SETUP.md](docs/05-PFBLOCKERNG-SETUP.md) | pfBlockerNG 安装、DNSBL、YouTube 拦截、报告 |
| [06-TROUBLESHOOTING.md](docs/06-TROUBLESHOOTING.md) | 遇到的 12 个真实错误——每个的根本原因和解决方法 |
## 🛠️ 工具与技术
| 工具 | 版本 | 用途 | 成本 |
| ---------------------- | ------------- | ------------------ | --------------- |
| Cisco Packet Tracer | 最新版 | 网络模拟 | 免费 (NetAcad) |
| VMware Workstation Pro | 最新版 | 虚拟机主机 | 免费 (个人版) |
| Ubuntu Server | 22.04 LTS | 服务器操作系统 | 免费 |
| BIND9 | 9.18 | DNS 服务器 | 免费 |
| ISC-DHCP | 4.4 | DHCP 服务器 | 免费 |
| Apache2 | 2.4 | Web 服务器 | 免费 |
| Samba | 4.x | 文件服务器 | 免费 |
| pfSense | 2.8.1-RELEASE | 防火墙 | 免费 |
| pfBlockerNG | 3.2.8 | 内容过滤 | 免费 |
| OpenSSH | 内置 | 远程访问 | 免费 |
**总成本:₹0**
## ⚠️ 已知局限性
**1. Packet Tracer 是模拟的——未连接到虚拟机**
Packet Tracer 在一个隔离的模拟环境中运行。它无法与 VMware 虚拟机或真实网络设备通信。A 部分展示 Cisco CLI 技能;B 部分展示实际部署技能。它们是刻意分开的。
**2. B 部分中没有 VLAN**
VMware 设置使用扁平的 192.168.20.0/24 网络。VLAN 分段在 A 部分中得到了充分展示。如果没有额外的硬件或 vSphere Enterprise,VMware Workstation Pro 不支持托管 VLAN 交换。
**3. SSH 加密是基础的**
Root 登录已被禁用 (`PermitRootLogin no`),但未实现基于密钥的身份验证。密码身份验证仍然启用。完整的 SSH 密钥加固计划作为下一阶段的改进。
**4. Samba 没有用户身份验证**
CompanyShare 配置为 `guest ok = yes`——无需密码。在生产环境中,将配置基于用户的 Samba 组身份验证。
**5. Apache 上没有 SSL**
内网页面运行在 HTTP(端口 80)上。未配置 SSL 证书。在生产环境中,将使用 Let's Encrypt 或内部 CA。
## 🔧 遇到并修复的错误
在此项目期间遇到了 12 个真实错误并已修复。
完整文档见 [06-TROUBLESHOOTING.md](docs/06-TROUBLESHOOTING.md)。
快速摘要:
| 错误 | 修复方法 |
| ----------------------------- | ------------------------------------------ |
| VMware 无法复制粘贴 | 安装了 open-vm-tools |
| bind9.service 别名被拒绝 | 使用了 named 而不是 bind9 |
| 从 Windows 发出的 DNS 超时 | 在 named.conf.options 中添加了 listen-on |
| DHCP 未分配 IP | 设置了 INTERFACESv4="ens33" |
| pfSense TTL 过期 | 将默认网关明确设置为 WAN_DHCP |
| pfBlockerNG 未拦截 | 保存后运行了 Force Reload → All |
| DNS 强制破坏了所有 DNS | 将允许规则移至阻止规则之前 |
## 🧠 我学到了什么
- VLAN 如何划分网络以及企业为何使用它们
- 使用 802.1Q 子接口的单臂路由器 VLAN 间路由
- NAT/PAT 如何将私有 IP 转换为单个公共 IP
- ACL 如何在网络段之间强制执行流量规则
- BIND9 DNS 服务器——正向区域、反向区域、转发器
ISC-DHCP 服务器——作用域、选项、接口绑定
- Apache2 Web 服务器——托管并通过主机名访问
- Samba 文件服务器——跨平台的 Linux/Windows 文件共享
- pfSense 防火墙——安装、NAT、DHCP、DNS 解析器
- 防火墙规则顺序——为什么特定规则必须在通用规则之前
- DNS 强制——允许 pfSense DNS,阻止所有外部 DNS
- pfBlockerNG DNSBL——DNS 接收域的工作原理
- 基于 IP 和基于 DNS 的内容过滤之间的区别
- FreeBSD 与 Linux 服务管理的差异
- 阅读系统日志——区分真实错误与干扰信息
- 真实的故障排除——12 个问题,12 个修复,0 次重置
## 📝 简历要点
```
• Designed a 4-VLAN enterprise network topology in Cisco Packet Tracer
with router-on-a-stick inter-VLAN routing, 802.1Q trunking, extended
ACLs and NAT/PAT — simulating a complete office network infrastructure.
• Deployed Ubuntu Server 22.04 on VMware with BIND9 DNS (forward/reverse
zones for company.local), ISC-DHCP server, Apache2 web server with
custom intranet page, and Samba file server accessible from Windows.
• Configured pfSense firewall with NAT, DHCP, DNS resolver with forwarding
mode and domain override — enforced DNS routing via firewall rules
preventing clients from bypassing internal DNS using external resolvers.
• Implemented pfBlockerNG DNSBL content filtering with StevenBlack_ADs
feed (16,998 blocked domains) and custom YouTube CDN block list —
verified blocking via nslookup returning sinkhole IP 10.10.10.1;
confirmed real-time alerts in pfBlockerNG Reports dashboard.
```
## 🎓 最后说明 _本项目完全在一台个人的 Windows 11 笔记本电脑上使用免费和开源工具构建。B 部分未使用任何物理 Cisco 硬件。_ **最后更新**:2026年5月2日 **版本**:1.0 (完整版)
📬 Contact
## 🎓 最后说明 _本项目完全在一台个人的 Windows 11 笔记本电脑上使用免费和开源工具构建。B 部分未使用任何物理 Cisco 硬件。_ **最后更新**:2026年5月2日 **版本**:1.0 (完整版)
标签:ACL, Apache, BIND9, CCNA实验, DHCP服务器, DNSBL, DNS服务器, Google搜索, Linux服务器管理, NAT, pfBlockerNG, pfSense防火墙, Samba, Ubuntu服务器, VLAN, VMware虚拟化, Web服务器, 中小企业网络, 企业网络架构, 内网搭建, 域名黑名单, 思科Packet Tracer, 文件服务器, 流量捕获, 系统运维, 网络安全, 网络工程, 网络拓扑, 网络服务部署, 隐私保护