xbc4000/homelab-network
GitHub: xbc4000/homelab-network
一个基于 MikroTik RB3011 的完整家庭实验室网络配置仓库,包含多 VLAN 隔离、Pi-hole 递归 DNS、WireGuard VPN 和企业级安全加固。
Stars: 0 | Forks: 0
# RB3011 Home Lab — RouterOS 7.22.1
```
╔══════════════════════════════════════════════════════════════════╗
║ RB3011-GW · RouterOS 7.22.1 · MikroTik RB3011UiAS ║
║ 6 VLANs · CAPsMAN · Pi-hole v6 · WireGuard VPN ║
╚══════════════════════════════════════════════════════════════════╝
```
MikroTik RB3011UiAS Home Lab 路由器的完整配置 —
已加固、文档齐全,并可直接从出厂重置中恢复。
## 硬件
| 设备 | 型号 | 角色 |
|--------|-------|------|
| Router | RB3011UiAS | 核心路由器,CAPsMAN 控制器,容器主机 |
| Storage | USB SSD 256 GB | 容器存储,Dude DB,备份 |
| AP1 | mAP2nD-1 | 2.4 GHz WiFi ch1,CAPsMAN CAP |
| AP2 | wAP2nD-1 | 2.4 GHz WiFi ch11,CAPsMAN CAP(通过 mAP 菊花链连接) |
| Server1 | Dell PER730XD | VLAN10 — 工作站(Fedora,日常主力机,游戏) |
| Server2 | Dell PER630 | VLAN20 — Ubuntu Server + AMP 游戏面板 |
| RPi | Raspberry Pi 4 | VLAN40 — DietPi,Portainer,Grafana,指标导出器,Raspotify |
## 网络概览
```
Internet (PPPoE CGNAT)
│
ether1-WAN
│
RB3011-GW (10.x.x.1 gateway for all VLANs)
├── ether2/3 VLAN10 10.10.10.0/24 Server1 (bond0)
├── ether4/5 VLAN20 10.20.20.0/24 Server2 + AMP
├── ether6/7 VLAN30 10.30.30.0/24 iDRAC OOB (no WAN)
├── ether8 VLAN40 10.40.40.0/24 Raspberry Pi
├── ether9 VLAN50 10.50.50.0/24 AV / Blu-ray
├── ether10 VLAN60 10.60.60.0/24 WiFi + CAPsMAN APs
├── veth 172.17.0.0/24 Pi-hole container
└── wireguard back-to-home-vpn WireGuard / all VLANs
```
### VLAN 表
| VLAN | 子网 | 用途 | WAN | VLAN 间 |
|------|--------|---------|-----|------------|
| 10 | 10.10.10.0/24 | Server1 (PER730XD) | Yes | ↔ VLAN20, VLAN30, VLAN60 (AP mgmt) |
| 20 | 10.20.20.0/24 | Server2 + AMP (PER630) | Yes | ↔ VLAN10, VLAN30, VLAN60 (AP mgmt) |
| 30 | 10.30.30.0/24 | iDRAC OOB | No | → VLAN10, VLAN20, VLAN40 (metrics) |
| 40 | 10.40.40.0/24 | Raspberry Pi | Yes | 隔离 |
| 50 | 10.50.50.0/24 | AV / 蓝光播放机 | Yes | 隔离 |
| 60 | 10.60.60.0/24 | WiFi 客户端 + APs | Yes | 仅 DNS 到 Pi-hole |
| — | 172.17.0.0/24 | Pi-hole 容器 (veth) | — | 路由器内部 |
## 功能特性
### 网络
- **6 个隔离的 VLAN**,具有严格的 VLAN 间防火墙,并在所有链上显式默认丢弃
- **802.1Q VLAN 过滤** 在 bridge-main 上启用 — 硬件加速,无软件网桥变通方案
- **IGMP Snooping** 已启用,用于高效组播
- **PPPoE WAN** 通过 ether1 — 当前为 CGNAT,公共 IP 规则已准备就绪可随时激活
- **Back to Home VPN** — 由 MikroTik Cloud 管理的 WireGuard,端口 65504 UDP
### DNS
- **Pi-hole v6 + Unbound + Hyperlocal** — 完全递归 DNS,从根域名服务器解析,无需上游解析器
- **DNS 自动故障转移** — 当 Pi-hole 宕机时,netwatch 在 15 秒内切换至 Google DNS
- **本地 `.home` DNS** — 所有基础设施设备在路由器上都有静态 A 记录
### WiFi (CAPsMAN)
- **两个 AP** — mAP2nD-1 (ch1) 和 wAP2nD-1 (ch11),通过 ether10 菊花链连接
- **漫游** — 信号低于 −80 dBm 时强制客户端断开
- **客户端到客户端转发** — mDNS, Roku, Chromecast, Spotify Connect 均可正常工作
- **特定设备 WiFi 提示音** — 已知手机获取独特的 DHCP 租约旋律
### 安全
- **SSH 暴力破解阶梯** — 4 次尝试 → 10 天黑名单(3 阶段地址列表链)
- **端口扫描检测** — PSD 21/3s → 2 周黑名单
- **DDoS 防护** — ICMP 速率限制,DNS/NTP/SSDP 放大丢弃
- **RAW 链** — 路由前丢弃 bogon, RFC1918, CGNAT 源地址
- **TCP 标志扫描** — 在 input + forward 上丢弃 NULL 扫描和 FIN-no-ACK
- **服务加固** — FTP, Telnet, WWW, API-SSL, reverse-proxy 均已禁用
- **Winbox/SSH/API** 仅限 VLAN10 和 VLAN30
- **高强度 SSH 加密** — 仅 AES-CTR,禁用 SHA1
- **IPv6 防火墙** — 8 规则防御集(ISP 为 CGNAT,无全局 IPv6)
### 监控栈 (Raspberry Pi 4 — 10.40.40.2)
- **Grafana** — 所有基础设施指标和日志的仪表板
- **Prometheus** — 指标 TSDB;抓取 idrac-exporter (Redfish), SNMP exporter, mktxp, node_exporter
- **InfluxDB** — 通过 Telegraf 获取的 iDRAC SNMP/IPMI 遥测数据的时间序列存储
- **Loki + promtail** — 日志聚合;接收 MikroTik syslog (UDP 5514) 和 iDRAC syslog (UDP 514)
- **idrac-exporter** — 通过 Redfish HTTP 轮询两个 iDRAC,获取 CPU, 内存, 驱动器, 网络, PSU, 传感器信息
- **两个 Grafana 仪表板**(`config/` 中可导入的 JSON):
- **Dell iDRAC 双主机指挥中心** — PER730XD(青色)和 PER630(洋红色)的并排实时硬件遥测:电源,温度,风扇,状态,磁盘,RAID,NIC,内存模块,SEL 事件日志,以及实时 Loki syslog 流
- **Homelab 日志智能** — 结合所有 MikroTik Loki 面板(防火墙,DHCP,错误,模式搜索)与 iDRAC Loki 面板(按主机流,审计,配置更改)的统一日志分析仪表板
### 监控与告警
- **Netwatch** — 监控 10 台主机,up/down 时蜂鸣器报警
- **以太网监控** — 链接 up/down 时蜂鸣(3s 轮询)
- **WiFi 监控** — 连接/断开时蜂鸣(5s 轮询)
- **攻击监控** — 任何黑名单计数增加时蜂鸣(10s 轮询)
- **登录监控** — 新的活动路由器会话时蜂鸣(5s 轮询)
- **SSH 探测监控** — ssh-stage1 列表增长时蜂鸣(10s 轮询)
- **温度监控** — 60°C 时报警(1m 轮询)
- **DHCP 池监控** — WiFi 池可用 IP 低于 10 个时报警(5m)
- **USB 挂载监控** — 若 USB SSD 未挂载则深度报警(5m)
### 启动音乐系统
- **11 首循环音乐** 在 WAN + USB 就绪后每次启动播放一次
- 循环播放:Tetris, Star Trek, Close Encounters, Imperial March, Doctor Who, Morse SOS, Big Ben, Nokia, Jeopardy, Mission Impossible, Reveille
- 索引持久存储在脚本注释字段中 — 可在重启后保留
- 使用双调度器模式以绕过 RouterOS 7.22 的 `:beep` 顶层限制
### 其他
- **超级马里奥兄弟主题曲** — 按需运行 `/system script run super-mario`
- **LCD 触摸屏** — 统计信息幻灯片放映,5s 轮换,PIN 锁定,只读模式
- **The Dude** — USB SSD 上的网络监控数据库
- **Syslog** 转发至 Pi-hole(info, firewall, warning, error)
- **SNMP** — 仅限 VLAN10/VLAN20,已重命名团体字符串
- **接口图表** — pppoe-wan, vlan10–vlan60
- **每周 RouterOS 自动更新** — 加密备份后安装,AP 固件 20 分钟后推送
### 备份
- **每日 RSC 导出** — 明文,仅 USB SSD,每天 03:00
- **每周加密二进制** — AES-SHA256,USB SSD,每周 02:00
- **更新前备份** — 在任何 RouterOS 升级前自动获取
## 仓库结构
```
homelab-network/
├── config/
│ ├── rb3011-config.rsc # Complete router config (credentials redacted)
│ ├── grafana-idrac-command-center.json # iDRAC Dual Host Command Center dashboard
│ └── grafana-homelab-log-intelligence.json # Combined log intelligence dashboard (Router + iDRAC)
├── aps/
│ ├── mAP2nD-1.rsc # mAP2nD-1 one-shot setup script
│ └── wAP2nD-1.rsc # wAP2nD-1 one-shot setup script
├── docs/
│ ├── network-layout.md # VLANs, IPs, port mapping, isolation rules
│ ├── services.md # Pi-hole, VPN, AMP, Dude, backups, SNMP
│ ├── security.md # Firewall chains, DDoS, SSH ladder, hardening
│ ├── beeper-alerts.md # All alert scripts, schedulers, boot fanfare system
│ ├── servers.md # Server NIC bonding and network config (PER730XD, PER630)
│ ├── monitoring.md # Full monitoring stack — Prometheus, Loki, Grafana dashboards
│ └── troubleshooting.md # Common issues, RouterOS 7.22 syntax notes
├── servers/
│ ├── server1-network.sh # NetworkManager bond setup for Server1 (PER730XD)
│ └── server2-network.sh # Template bond setup for Server2 (PER630, pending)
├── scripts/
│ ├── auto-update.rsc # Weekly RouterOS update — backup then install
│ ├── ap-upgrade.rsc # Push firmware to CAPsMAN APs after router update
│ ├── usb-check.rsc # Startup USB SSD mount check — reboots up to 3×
│ ├── manual-backup.rsc # Trigger immediate RSC + encrypted binary backup
│ ├── clear-blacklists.rsc # Clear all DDoS/SSH/scanner blacklists
│ ├── pihole-restart.rsc # Restart Pi-hole container cleanly
│ ├── security-lockdown.rsc # Re-apply full security lockdown
│ └── syslog-setup.rsc # Configure syslog forwarding to Pi-hole
└── README.md
```
## 快速参考
### 路由器访问
| 方法 | 地址 | 限制 |
|--------|---------|-------------|
| Winbox | 10.10.10.1 端口 8291 | 仅限 VLAN10 / VLAN30 |
| SSH | 10.10.10.1 端口 2222 | 仅限 VLAN10 / VLAN30 |
| Serial | RJ45 console port | 115200 baud 8N1 |
### DNS 名称
| 主机名 | IP |
|---------|----|
| router.home | 10.10.10.1 |
| server1.home | 10.10.10.2 |
| server1-nic2.home | 10.10.10.3 |
| server2.home | 10.20.20.2 |
| amp.home | 10.20.20.3 |
| idrac1.home | 10.30.30.10 |
| idrac2.home | 10.30.30.11 |
| rpi.home | 10.40.40.2 |
| pihole.home | 172.17.0.2 |
| ap1.home | 10.60.60.200 |
| ap2.home | 10.60.60.201 |
### 服务端口
| 服务 | 端口 | 协议 | 可访问来源 |
|---------|------|----------|----------------|
| Pi-hole web UI | 80 / 443 | TCP | pihole-admin-wifi 列表,Server1 |
| Grafana | 3000 | TCP | Server1, WiFi → 10.40.40.2 |
| Portainer | 9002 / 9442 | TCP | Server1, WiFi → 10.40.40.2 |
| The Dude | 2210 | TCP | VLAN10 |
| Back to Home VPN | 65504 | UDP | WAN |
| Minecraft Java | 25565 | TCP | WAN → 10.20.20.3 |
| Minecraft Bedrock | 19132 | UDP | WAN → 10.20.20.3 |
| Garry's Mod | 27015 | UDP/TCP | WAN → 10.20.20.3 |
| TeamSpeak 6 Voice | 9987 | UDP | WAN → 10.20.20.3 |
| TeamSpeak 6 Files | 30033 | TCP | WAN → 10.20.20.3 |
## AP 设置
两个 AP 均通过导入脚本配置 — 一次性完成,导入期间无中断。
```
# AP 恢复出厂设置并在 VLAN60 上后,从路由器终端执行:
/import aps/mAP2nD-1.rsc
/import aps/wAP2nD-1.rsc
# 然后 SSH 登录设置密码:
/system ssh address=10.60.60.200 port=2222 user=YOUR-ADMIN-USER
/system ssh address=10.60.60.201 port=2222 user=YOUR-ADMIN-USER
```
脚本处理:网桥设置,静态 IP,NTP,时区,服务加固,
DNS allow-remote-requests 已禁用,MAC 服务器锁定,CAP 模式。
**AP 链**:Router ether10 → mAP2nD-1 ether1 → mAP2nD-1 ether2 → wAP2nD-1 ether1
## 从出厂重置恢复
1. 导入配置:`System → Files → Upload rb3011-config.rsc` 然后从终端执行
`/import rb3011-config.rsc`
2. 设置 PPPoE 用户名:`/interface pppoe-client set pppoe-wan user=YOURUSERNAME`
3. 在容器环境变量中设置 Pi-hole API 密码
4. 设置 LCD PIN:`/lcd pin set pin-number=YOURPIN`
5. 设置 SNMP community:`/snmp community set [find default=yes] name=YOURSTRING`
6. 设置 WiFi 密码:`/caps-man security set [find name=wifi-sec] passphrase=YOURPASS`
7. 启用 usb-check 调度器:`/system scheduler enable usb-check`
8. 如有需要,从 USB 备份恢复 Pi-hole 数据
## 重要说明
- WiFi 密码 — 存储在路由器的 `/caps-man security` 中,不在仓库中
- Pi-hole API 密码 — 存储在 `/container envs` 中,不在仓库中
- SNMP community 字符串 — 在路由器上,不在仓库中
- LCD PIN — 在路由器上,不在仓库中
- PPPoE 用户名 — 在路由器上,不在仓库中
- WireGuard 私钥 — 不由 RouterOS 导出
- 每周加密备份密码 — 请妥善保管,不存储在此仓库的任何地方
- 每日 RSC 备份为文(PPPoE 用户名可见) — 仅存储在 USB SSD 上
- ISP 当前为 CGNAT (`10.71.x.x`) — 游戏服务器端口转发规则已就位,但在 ISP 提供公共 IP 之前处于非活动状态
- RouterOS 版本:**7.22.1** (稳定版, 2026-03-23)
## 文档
| 文档 | 内容 |
|-----|---------|
| [network-layout.md](docs/network-layout.md) | 物理端口,VLAN,IP,DHCP 池,VLAN 间规则,WiFi,WAN |
| [services.md](docs/services.md) | Pi-hole, Back to Home VPN, AMP, The Dude, USB 结构, 备份, SNMP |
| [security.md](docs/security.md) | 防火墙链,DDoS,SSH 暴力破解阶梯,端口扫描检测,加固 |
| [monitoring.md](docs/monitoring.md) | Prometheus, Loki, Grafana 仪表板,日志管道,InfluxDB schema |
| [beeper-alerts.md](docs/beeper-alerts.md) | 所有告警脚本,调度器,netwatch 表,启动音乐系统 |
| [servers.md](docs/servers.md) | 服务器 NIC 绑定,NetworkManager 设置,iDRAC 配置,故障转移测试 |
| [troubleshooting.md](docs/troubleshooting.md) | 常见问题,CAPsMAN 技巧,RouterOS 7.22 语法说明,蜂鸣器注意事项 |
标签:CAPsMAN, CGNAT, CISA项目, Dell PowerEdge, DNS广告拦截, Docker容器, Fedora, Grafana监控, Home Lab, idrac, IP 地址批量处理, Linux服务器, MikroTik, PE 加载器, Pi-hole, Portainer, PPPoE, Raspberry Pi, RB3011UiAS, RouterOS, Unbound, VLAN, VPN, WiFi控制器, WireGuard, 内存执行, 存储服务器, 家庭实验室, 插件系统, 攻击面发现, 游戏服务器, 系统加固, 网络分段, 网络安全, 网络安全, 网络架构, 自定义请求头, 虚拟局域网, 请求拦截, 路由器配置, 运维, 防火墙, 隐私保护, 隐私保护