zakhoriallen/Desktop-PC-Homelab-Foundation

GitHub: zakhoriallen/Desktop-PC-Homelab-Foundation

基于Docker的Ubuntu Server家庭实验室,用于学习和安全研究。

Stars: 0 | Forks: 0

# 桌面PC家庭实验室基础 基于Windows桌面,使用VirtualBox、Ubuntu Server、Docker Compose、Tailscale、UFW和自托管基础设施服务构建的本地优先家庭实验室。 本项目的目标是建立一个实用的基础,用于学习系统管理、网络、Docker、监控、DNS过滤、远程访问和备份基础知识。我首先专注于构建一个小型但完整的运行环境,然后清晰地记录下来,以便重用、故障排除和面试讨论。 ## 项目状态 - 第1阶段:完成 - 第2阶段:完成,除可选的后期加固外 - 第3阶段:GitHub/简历润色完成 ## 架构 ``` flowchart TB A["Windows Desktop Host"] --> B["VirtualBox"] B --> C["Ubuntu Server VM: homelab-ubuntu"] C --> D["Docker Engine + Docker Compose"] D --> E["Portainer"] D --> F["Uptime Kuma"] D --> G["AdGuard Home"] D --> H["Homepage Dashboard"] C --> I["UFW Firewall"] C --> J["Tailscale Private Access"] J --> K["Remote SSH + Browser Access"] ``` ## 硬件 - CPU:AMD Ryzen 7 3700X - 内存:32 GB - GPU:Intel Arc A770 16 GB - 存储: - SSD用于虚拟机和活动服务 - HDD计划用于备份、ISO、截图和文档 - 主机操作系统:Windows ## 虚拟机 - 平台:VirtualBox - 虚拟机名称:`homelab-ubuntu` - 操作系统:Ubuntu Server - 网络:桥接适配器 - SSH:已启用并从Windows测试 - Docker:已安装并测试 - Docker Compose:已安装并测试 - 远程访问:Tailscale 虚拟机可以通过本地网络上的私有LAN地址和远程私有Tailscale地址访问。不使用公共端口转发。 ## 服务 | 服务 | 目的 | 端口 | | --- | --- | --- | | Portainer | Docker和堆栈管理 | `9443` | | Uptime Kuma | Uptime监控 | `3001` | | AdGuard Home | DNS过滤 | `3000`,`53` | | Homepage | 中央仪表板 | `3002` | 所有服务都保持私有/本地。远程访问通过Tailscale而不是公共端口转发来处理。 ### 为什么存在这些服务 - Portainer提供了一种可视化的方式来检查容器、镜像、卷、网络和Compose堆栈。 - Uptime Kuma提供了一个仪表板,确认核心服务可访问且健康。 - AdGuard Home提供了一个安全的地方来学习DNS过滤,在更改路由器全局DNS之前。 - Homepage充当轻量级登录页面,用于家庭实验室链接和系统状态。 - Tailscale提供私有远程访问,而不直接将虚拟机暴露给互联网。 - UFW在SSH、DNS和服务仪表板周围提供了一个简单的防火墙基础。 ## 第1阶段总结 第1阶段专注于构建工作的家庭实验室基础。 完成: - 在VirtualBox中手动安装Ubuntu Server。 - 启用OpenSSH并从Windows确认SSH访问。 - 安装Docker Engine和Docker Compose。 - 使用`docker run hello-world`验证Docker。 - 创建了`~/homelab`文件夹结构。 - 使用Docker Compose部署了Portainer、Uptime Kuma、AdGuard Home和Homepage。 - 完成了核心服务的首次运行设置。 - 配置Uptime Kuma监控所有四个服务。 - 捕获了证明截图并记录了构建过程。 ## 第2阶段总结 第2阶段专注于安全私有访问、防火墙基础、监控证明和备份。 完成: - 在Ubuntu VM和Windows主机上安装了Tailscale。 - 确认了通过Tailscale的SSH和浏览器访问。 - 启用UFW并仅允许所需的服务端口。 - 允许Tailscale接口上的入站流量。 - 修复了Homepage主机验证,以支持LAN和Tailscale访问。 - 创建并测试了备份脚本。 - 验证了备份存档的内容。 - 保存了第2阶段的证明截图,包括Tailscale、UFW和备份。 ## 第4阶段:轻量级安全监控 第4阶段开始构建家庭实验室的蓝队层。Wazuh尚未安装。当前的焦点是学习如何审查来自Ubuntu、SSH和Docker的现有日志。 本阶段记录: - SSH服务状态检查。 - 过去24小时的SSH日志审查。 - 搜索失败的SSH登录和接受的SSH登录。 - Docker容器状态审查。 - Portainer、Uptime Kuma、AdGuard Home和Homepage的Docker日志。 - Uptime Kuma通过SMTP发送的电子邮件警报证明(省略了凭据)。 - 在安装更重的监控堆栈之前,Wazuh就绪资源检查。 - 正常与可疑活动示例。 - 基本安全监控实践的证据截图。 关键命令包括: ``` sudo systemctl status ssh --no-pager sudo journalctl -u ssh --since "24 hours ago" sudo journalctl -u ssh --since "24 hours ago" | grep -i "failed" sudo journalctl -u ssh --since "24 hours ago" | grep -i "accepted" docker ps docker logs --tail 50 portainer docker logs --tail 50 uptime-kuma docker logs --tail 50 adguard-home docker logs --tail 50 homepage free -h df -h docker stats --no-stream htop ``` 详细笔记可在[docs/security-monitoring.md](docs/security-monitoring.md)和[docs/phase-4-checklist.md](docs/phase-4-checklist.md)中找到。 警报证明完成: - Uptime Kuma通过SMTP发送的电子邮件通知已配置。 - 测试通知返回“发送成功”。 - 测试电子邮件已收到。 - 证据截图文件名:`docs/screenshots/14-uptime-kuma-notification-test.png`。 - 文档使用`EMAIL_ADDRESS`和`APP_PASSWORD_REDACTED`占位符代替凭据值。 Wazuh就绪说明: - Wazuh尚未安装。 - 在做出安装决定之前,记录了资源检查。 - 下一个决定是虚拟机是否有足够的CPU、RAM和磁盘来安装Wazuh,还是保持第4阶段轻量级。 - Wazuh被评估为未来的SIEM选项,但在资源规划后推迟了安装。 - 当前第4阶段的工作流程专注于轻量级SSH日志审查、Docker日志审查、Uptime Kuma警报和记录的就绪检查。 - 在Wazuh部署规划之前,完成了备份恢复测试。 Wazuh规划笔记可在[docs/wazuh-planning.md](docs/wazuh-planning.md)中找到。 ## AdGuard DNS过滤测试 在更改路由器全局DNS之前,AdGuard Home正在一台设备上进行测试。 - 手动`nslookup`测试确认AdGuard通过`LAN_VM_IP`解析正常域名。 - 手动`nslookup`测试确认AdGuard通过`LAN_VM_IP`阻止至少一个广告/跟踪器域名。 - 通过`TAILSCALE_VM_IP`的DNS访问返回连接被拒绝,并记录为未来的改进。 - Uptime Kuma现在包括一个专门的`AdGuard DNS`监控器,该监控器通过AdGuard DNS检查`google.com`的A记录。 - 一台设备的DNS过滤证据已完成。 - 路由器全局DNS有意推迟,直到一台设备的测试稳定。 测试笔记可在[docs/adguard-dns-testing.md](docs/adguard-dns-testing.md)中找到。 ## 截图 | 证明 | 截图 | | --- | --- | | Uptime Kuma监控所有服务 | ![Uptime Kuma所有服务正常](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/99086297ee102844.png) | | Portainer Compose堆栈 | ![Portainer堆栈列表](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f095118e8a102849.png) | | AdGuard Home仪表板 | ![AdGuard Home仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/22d45ad7d6102855.png) | | Homepage仪表板 | ![Homepage仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/f5a95b110c102902.png) | | 运行中的Docker容器 | ![Docker ps输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0c6d1d2b75102909.png) | | Tailscale设备 | ![Tailscale设备页面](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e46c3cf654102913.png) | | UFW防火墙规则 | ![UFW状态编号](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/64e54f41a2102919.png) | | 备份脚本输出 | ![备份脚本输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2e8fe53ec7102924.png) | | Uptime Kuma通知测试 | ![Uptime Kuma通知测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c991172748102929.png) | | Wazuh就绪资源检查 | ![Wazuh就绪资源检查](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/6c0f44c127102938.png) | | 备份恢复测试 | ![备份恢复测试](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/4b868a2b79102945.png) | | AdGuard查询日志DNS过滤证明 | ![AdGuard查询日志DNS过滤证明](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c8986c59e4102954.png) | ## 仓库布局 ``` . |-- README.md |-- docs/ | |-- architecture.md | |-- backups.md | |-- adguard-dns-testing.md | |-- lessons-learned.md | |-- network-notes.md | |-- phase-1-checklist.md | |-- phase-2-checklist.md | |-- security-networking.md | |-- services.md | |-- setup-log.md | |-- wazuh-planning.md | `-- screenshots/ |-- scripts/ | |-- backup-homelab.sh | |-- create-homelab-folders.sh | `-- install-docker.sh `-- stacks/ |-- adguard-home/ |-- homepage/ |-- portainer/ `-- uptime-kuma/ ``` ## 我学到的 - 在VirtualBox中构建和配置了Ubuntu Server虚拟机。 - 使用桥接网络使虚拟机作为一个正常的LAN设备可访问。 - 在不使用Ubuntu Docker snap的情况下安装了Docker Engine和Docker Compose。 - 将服务组织为单独的Compose堆栈。 - 使用Portainer检查和管理Docker堆栈。 - 使用Uptime Kuma监控服务健康并解决TLS行为。 - 在不提前更改路由器全局DNS的情况下配置了AdGuard Home。 - 使用Tailscale进行私有远程访问,而不暴露公共端口。 - 启用UFW并仅允许实验室所需的服务端口。 - 编写并测试了用于家庭实验室配置和文档的备份脚本。 - 记录了证明截图、端口、故障排除笔记和所学课程。 ## 故障排除亮点 - VirtualBox NAT提供了互联网访问,但桥接适配器使SSH和仪表板更容易从Windows访问。 - Portainer使用自签名的HTTPS证书;Uptime Kuma可能需要忽略该监控器的TLS验证。 - Homepage需要`HOMEPAGE_ALLOWED_HOSTS`包括LAN和Tailscale主机名/IP。 - 在更改路由器全局DNS之前,应在单个设备上测试AdGuard Home DNS。 - AdGuard DNS在LAN上手动测试时工作,而通过Tailscale的DNS尚未启用。 - 在确认SSH和服务端口允许之后,才启用UFW。 更多详细信息可在[docs/lessons-learned.md](docs/lessons-learned.md)和[docs/security-networking.md](docs/security-networking.md)中找到。 ## 备份 备份脚本存储在: ``` scripts/backup-homelab.sh ``` 它备份: - Docker Compose堆栈 - 文档 - `README.md` ## 安全说明 - 服务没有直接暴露给公共互联网。 - 远程访问使用Tailscale。 - 密码、SSH密钥、令牌和机密不会存储在本存储库中。 - 路由器DNS尚未指向AdGuard Home。 - 公共文档使用占位符代替私有IP、用户名、电子邮件和敏感细节。 ## 未来改进 - 在确认密钥访问后,启用SSH密钥仅登录。 - 添加Uptime Kuma通知。 - 在路由器全局推广之前,从一台设备测试AdGuard DNS。 - 在LAN测试稳定后,仅调查通过Tailscale的AdGuard DNS。 - 将备份从虚拟机存储复制到HDD。 - 为备份存档添加恢复测试。 - 只有在基础保持稳定后,才添加更多服务。 ## 下一个计划阶段 - 继续第4阶段,进行轻量级Linux、SSH和Docker日志审查。请参阅[docs/security-monitoring.md](docs/security-monitoring.md)和[docs/phase-4-checklist.md](docs/phase-4-checklist.md)。 - 第4阶段的后期扩展:在记录了轻量级基线后研究Wazuh。请参阅[docs/wazuh-planning.md](docs/wazuh-planning.md)和[docs/phase-4-wazuh-security-monitoring.md](docs/phase-4-wazuh-security-monitoring.md)。 - 第5阶段:Windows Server和Active Directory实验室。请参阅[docs/phase-5-windows-server-active-directory.md](docs/phase-5-windows-server-active-directory.md)。 ## 简历要点示例 - 使用VirtualBox、Ubuntu Server、Docker Compose、Tailscale、UFW和自托管基础设施服务构建了私有桌面家庭实验室。 - 部署了Portainer、Uptime Kuma、AdGuard Home和Homepage仪表板,支持本地和基于Tailscale的访问。 - 为容器化家庭实验室环境实现了基线防火墙规则、正常运行监控、备份脚本和故障排除文档。 - 记录了架构、服务端口、安全说明、所学课程和证明截图,以供GitHub作品集展示。 详细的简历要点可在[docs/resume-bullets.md](docs/resume-bullets.md)中找到。 ## GitHub发布说明 此文件夹已准备好发布到GitHub。发布步骤已在[docs/github-publish.md](docs/github-publish.md)中记录。
标签:AdGuard Home, Awesome, CPU, DNS过滤, Docker, Docker Compose, GPU, HDD, Homelab, Portainer, RAM, SSD, SSH, Tailscale, Ubuntu Server, UFW, Uptime Kuma, VirtualBox, VPN, 备份, 存储, 学习平台, 安全防御评估, 桌面PC, 浏览器访问, 监控, 硬件配置, 简历, 系统管理, 网络配置, 自托管服务, 虚拟化, 请求拦截, 远程访问, 防火墙