juancveg/technova-vlan-lab
GitHub: juancveg/technova-vlan-lab
基于 Cisco Packet Tracer 的分段企业网络实验项目,通过 VLAN、Inter-VLAN 路由、DHCP、DNS、Port Security 和 ACL 构建并验证了一个多部门企业内网拓扑。
Stars: 0 | Forks: 0
# TechNova S.A.S. — 基于 VLAN、Inter-VLAN Routing 和安全策略的分段企业网络
这是一个 Cisco Packet Tracer 实验项目,旨在设计并实现一家虚构的、拥有三个部门公司的内部网络。该项目应用了 VLAN 分段、Inter-VLAN Routing、DHCP、内部名称解析,以及二层和三层的安全控制策略。
## 项目目标
设计并实现一个包含 Inter-VLAN Routing 的 3-VLAN 网络,达成以下目标:
- **100%** 的连通性(在设计允许的所有流量流中)。
- **100% 经验证的阻断**(通过 ACL 阻断受限的流量流)。
- 使用 VLSM 进行 IP 编址,不浪费任何地址范围。
- 保护接入端口免受未经授权设备的访问 (Port Security)。
所有结果均通过了可复现的连通性测试验证(详见[测试与验证](#testing--verification))。
## 场景
TechNova S.A.S. 是一家拥有三个部门的小型公司,出于安全和组织管理的目的,需要进行流量隔离:
| VLAN | 部门 | 网络中的角色 |
|---|---|---|
| 20 | Sales | 终端用户工作站 |
| 10 | Administration | 终端用户工作站 |
| 99 | IT / Management | IT 工作站 + 内部服务器 (DNS/HTTP) |
## 拓扑结构
下图展示了初始的物理拓扑:6 台 PC(每个 VLAN 2 台)、一台交换机和一台路由器。

在项目的后期阶段,一个专用服务器 (`Server-TI`) 被添加到了 Management VLAN 中 —— 有关其角色的详细信息,请参见[内部服务器与 DNS 解析](#internal-server-and-dns-resolution)。下图的最终拓扑反映了这一新增内容:

- **Router** (2901):通过子接口实现 Inter-VLAN Routing (router-on-a-stick)。
- **Switch** (2960-24TT):二层交换、VLAN、802.1Q trunk 和 Port Security。
- **6 台 PC**(每个 VLAN 2 台):跨越三个 VLAN 的终端用户工作站。
- **Server-TI**(后期添加,VLAN 99):具有静态 IP 的内部服务器,提供 DNS 和 HTTP 服务 —— 详见下文。
## IP 编址设计 (VLSM)
设计从 `192.168.10.0/24` 网段开始,采用了 **VLSM (Variable Length Subnet Masking)** 而非固定大小的子网划分。这一决定避免了地址浪费:每个部门有不同的主机需求(Sales 20 台,Administration 10 台,Management 5 台),如果对所有三个部门使用单一前缀,必然会导致较小的子网被过度分配。
**应用的方法论:**
1. 对于每个 VLAN,使用 `2^(32-prefix) - 2` 计算出满足其主机需求的*最小*前缀。
2. 在 `/24` 网段内**从大到小**分配子网,以避免地址碎片化和重叠。
| VLAN | 部门 | 子网 | 掩码 | 主机范围 | 广播地址 | 可用主机数 |
|---|---|---|---|---|---|---|
| 20 | Sales | `192.168.10.0/27` | `255.255.255.224` | `.1` – `.30` | `.31` | 30 |
| 10 | Administration | `192.168.10.32/28` | `255.255.255.240` | `.33` – `.46` | `.47` | 14 |
| 99 | IT/Management | `192.168.10.48/29` | `255.255.255.248` | `.49` – `.54` | `.55` | 6 |
在每个子网中,第一个可用 IP 被保留作为*网关*(路由器子接口)。
## 交换机分段(VLAN + Trunk)
- 创建了 VLAN 10、20 和 99,每个都带有描述性名称。
- 接入端口被分配到 `access` 模式下对应的 VLAN 中。
- 连接到路由器的上行链路 (`Fa0/7`) 被配置为带有 **802.1Q** 封装的 **trunk**,允许单一物理链路承载来自所有 3 个 VLAN 的带标签流量。


## Inter-VLAN 路由 (Router-on-a-Stick)
由于路由器只有一个连接到交换机的物理接口,因此实现了 **router-on-a-stick**:将 `GigabitEthernet0/0` 划分为多个逻辑子接口(每个 VLAN 一个),每个子接口都有自己的 802.1Q 封装和网关 IP。
| 子接口 | VLAN | 封装 | IP (网关) |
|---|---|---|---|
| `Gi0/0.20` | 20 | dot1Q 20 | `192.168.10.1/27` |
| `Gi0/0.10` | 10 | dot1Q 10 | `192.168.10.33/28` |
| `Gi0/0.99` | 99 | dot1Q 99 | `192.168.10.49/29` |
物理接口 `Gi0/0` 保持未分配 IP (`unassigned`) 的状态,因为在这种方案中,它不处理任何特定 VLAN 的流量;它只需要保持活动状态 (`no shutdown`) 即可作为子接口的物理承载介质。

## 每个 VLAN 的 DHCP
配置了三个 DHCP 池(每个 VLAN 一个),每个池都明确排除了已保留的地址(网关和静态分配的设备),从而防止了分配冲突。
| 池 | 服务的子网 | 下发的网关 | 下发的 DNS |
|---|---|---|---|
| `POOL_VENTAS` | `192.168.10.0/27` | `192.168.10.1` | `8.8.8.8` |
| `POOL_ADMIN` | `192.168.10.32/28` | `192.168.10.33` | `8.8.8.8` |
| `POOL_GESTION` | `192.168.10.48/29` | `192.168.10.49` | `192.168.10.50` (内部 DNS) |

## 内部服务器与 DNS 解析
为了反映真实的企业环境,一个具有**静态 IP** 的服务器 (`Server-TI`) 被添加到了 Management VLAN 中 —— 这与通过 DHCP 获取配置的工作站不同。这遵循了标准做法:对于地址必须保持不变以便其他网络服务能够可靠定位的设备,不为其分配动态地址。
该服务器提供 **DNS** 和 **HTTP** 服务,其 A 记录将内部域名 `intranet.technova.local` 解析为 `192.168.10.50`。


## 二层安全:Port Security
交换机上的每个接入端口都配置了 **Port Security**,将每个端口限制为**单一 MAC 地址**(通过 `sticky` 自动学习),并设置 `shutdown` 违规动作。这保护了网络免受在物理接入点连接未经授权设备的威胁。
```
switchport port-security
switchport port-security maximum 1
switchport port-security mac-address sticky
switchport port-security violation shutdown
```
一旦从每个连接的设备产生流量,交换机就会学习并固定每个端口的一个 MAC 地址,如下方确认所示:


**安全违规测试:** 断开合法设备,并在同一端口连接未经授权的设备。交换机检测到了新的 MAC 地址,并立即将端口置于 `err-disable` 状态。

在恢复合法设备后,通过对受影响的接口执行 `shutdown` / `no shutdown` 进行了端口恢复:

**技术说明 — 模拟器中的违规计数器行为。** 在测试期间观察到,在 Cisco Packet Tracer 中,当对处于 `err-disable` 状态的接口执行 `shutdown` / `no shutdown` 时,`Security Violation Count` 计数器会自动重置。这与真实 Cisco 硬件上记录的行为不同,在真实硬件中,此计数器会作为历史记录保留,并且需要使用显式的 `clear port-security counters` 命令才能重置。这在文档中被记录为已知的模拟器局限性,对所实施安全配置的功能有效性没有影响。
## 三层安全:Inter-VLAN ACLs
基于真实的业务需求定义了访问策略:
- Sales 和 Administration **不得**访问 IT/Management VLAN(以保护服务器和网络管理设备)。
- IT/Management **可以**发起与 Sales 和 Administration 的通信(用于支持任务)。
- Sales 和 Administration 可以相互自由通信。
扩展 ACL 被应用在子接口 `Gi0/0.99` 上的 **`out`** 方向 —— 这是来自任何其他 VLAN 的流量离开路由器前往 IT 网络的汇聚点。在尽可能靠近受保护资源的单一节点上应用该策略,被证明比在每个源子接口上复制它更为高效。
```
access-list 100 deny ip 192.168.10.0 0.0.0.31 192.168.10.48 0.0.0.7
access-list 100 deny ip 192.168.10.32 0.0.0.15 192.168.10.48 0.0.0.7
access-list 100 permit ip any any
interface GigabitEthernet0/0.99
ip access-group 100 out
```
最后的 `permit ip any any` 规则是必不可少的:每一个 Cisco IOS ACL 都以隐式的 `deny ip any any` 结尾,因此如果没有这条显式配置,进出 IT/Management 的合法流量也将被阻断。

## 测试与验证
| # | 测试 | 源 → 目标 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 1 | Intra-VLAN 连通性 | PC-Ventas1 → PC-Ventas2 | 成功 | ✅ 4/4 个数据包,0% 丢包率 |
| 2 | 网关连通性 | PC-Ventas1 → `192.168.10.1` | 成功 | ✅ 4/4 个数据包,0% 丢包率 |
| 3 | 允许的 Inter-VLAN 连通性 | PC-Ventas1 → PC-Admin1 | 成功 | ✅ 4/4 个数据包,0% 丢包率 |
| 4 | 内部 DNS 解析 | `ping intranet.technova.local` | 解析为 `192.168.10.50` | ✅ 4/4 个数据包,0% 丢包率 |
| 5 | ACL — Sales → IT | PC-Ventas1 → `192.168.10.50` | 阻断 | ✅ 100% 丢包率 (`Destination host unreachable`) |
| 6 | ACL — Administration → IT | PC-Admin1 → `192.168.10.50` | 阻断 | ✅ 100% 丢包率 (`Destination host unreachable`) |
| 7 | Port Security — 未经授权的设备 | 在接入端口连接新设备 | 端口进入 `err-disable` 状态 | ✅ 已确认,见截图 |





## 仓库结构
```
technova-vlan-lab/
├── README.md ← This document
├── docs/
│ └── diagrams/ ← Topology and verification screenshots
├── configs/
│ ├── switch-config.txt ← Final switch configuration
│ └── router-config.txt ← Final router configuration
└── technova-vlan-lab.pkt ← Packet Tracer project file
```
## 展示的技能
- 将子网划分和 VLSM 应用于每个网段具有不同主机需求的真实案例。
- 使用 VLAN 和 802.1Q trunk 链路进行网络分段。
- 通过 router-on-a-stick 实现 Inter-VLAN Routing。
- DHCP 配置(包含排除项),以及基于设备角色的 DHCP/静态 IP 混合设计。
- 发布内部服务 (DNS + HTTP) 并验证名称解析。
- 二层 (Port Security) 和三层 (扩展 ACL) 安全加固,并具备可复现的验证测试。
## 使用的工具
Cisco Packet Tracer v9.0.0.0810.
标签:VLAN, 企业网络架构, 内核驱动, 思科Packet Tracer, 网络协议, 网络安全配置, 网络工程