HomeLab的反代之神,还得是香香的IPv6

本文首发于个人站点: 【网络】Proxy节点:反代网关

前言

由于自己家里部署的服务越来越多,即便是曾经凭借记忆就可以随意出入各种服务的我,也逐渐感觉到了压力倍增,所以就再次动了搭建一个统一反向代理的心思。至于为什么是再次,因为曾经动手搭建过,失败了。然后在网上闲逛看到了某大佬分享自家的Homelab架构,我又觉得我行了。重要参考文档:我们不搞NAS,我们搞HomeLab!

需求

首先,明确一下改造的目的。最核心也是最原始的需求,我需要的是一个统一的反向代理服务以便我可以通过更利于人类记忆的方式来访问家中的服务。由此延伸出一个用户体验相关的需求,我希望在内外网具有一致性的访问体验。还有一些安全上的需求,比如只开放高位端口且全链路支持Https。

以上的描述角度,更多的是站在用户角度去描述了一下本次的目标。那么现在整理一下需求,用更偏向技术的角度来梳理一下(在我的习惯中,我在思考到这一步时,会粗略的给出一些技术解决方案,以便我快速判断是否具有可行性):

  • 统一的反向代理服务:Nginx,使用Nginx Proxy Manager提升运维管理体验
  • 内外网一致性的访问体验: 使用域名访问
  • 全自动Https证书管理: acme.sh 自动续签

方案

基本上想清楚怎么做之后,审视一下家里目前的设备与网络构造,用于确定如何改造,改造过程中是否有其他衍生需求。在我目前的家庭网络环境中,家里是有一台iStoreOs作为旁路由(虽然被大佬狠狠抨击,但是我依然用了旁路由),上面部署了一些服务来支持当前的诉求。在iStoreOs这台设备中,我常用的服务包括:

  • TailScale: 用于虚拟组网,带有子网,提供外网访问的统一入口
  • Lucky: DDNS与端口转发,目前用处不大,已经被TailScale取代
  • 🐱: 懂的都懂,不过我现在还是客户端居多,没有实际用起来,所以本次暂时不考虑了

下面就是基于Nginx Proxy Manager作为统一反向代理中心的设计方案。

这个方案其实还是没办法满足我的完整需求,原先在我的设想中,某些服务我只想开放给内网坏境,但是这种部署模式下,所有请求过了docker的网桥,导致IP都变为了网桥的IP,无法按IP控制访问了。后来我尝试了裸机直接部署Nginx来限制内网IP访问,但是由于我IPv6提供的服务,在家里也是直接解析出v6地址,用公网IP直连的。其实是可以考虑将v6前缀作为限制条件写入配置中的,家里向运营商要了固定的公网v6前缀。但是考虑到后续迁移的维护,和未来不一定有固定前缀的场景,就放弃了。实际上,我的数据都做了备份,而且攻击的成本也很高,我自己的个人数据价值对于他人来说也非常的低,远没有我想象的那么危险,设定好一个比较复杂的密码就可以了。在某大厂工作后留下这种思维定式,不知道算好还是坏,做事情前总是过度设计和考虑非必要的极端场景,也许对于大型项目而言是优秀的架构思维,但是对于需要快速实践的项目反而成为了掣肘。

最终的方案,就是只需要在iStoreOs中部署 Nginx Proxy Manager(包含了自动证书更新)。至于统一的内外网体验,通过域名方案解决,在内网设置一个dns解析记录,将内网服务的域名都解析到iStoreOs的节点IP上,外网则通过DDNS发布动态域名解析。

由于家用带宽的入站问题,nginx直接使用高位端口提供服务,端口转发可以关闭大部分的转发通道。最终的方案如下:

  • IPv4的访问链路
    • 内网: 在内网中,设置一个内网DNS服务器,将 泛域名 解析到ProxyNode上,内网的IPv4就会直接用内网ip进行访问
    • 外网: 我实际使用时外网是不提供IPv4的访问途径的。如果要提供会比较复杂(其实我也还没太搞明白),需要在TailScale的MagicDNS上设置SplitDNS,将某些域名的解析发送到ProxyNode的DNS服务器上,解析出内网IP进行访问(访问链路走的是TailScale,如果是直连模式应该还是v6访问,意义不大;如果是转发模式可能走的是v4,但是很卡,意义也不大)
  • IPv6的访问链路:IPv6的链路就很直接,内外网是统一的方式,直接中公网的DNS解析到ProxyNode的公网IPv6地址,然后直连

IPv6的统一,一度让我想把IPv4的服务关掉,毕竟我大部分时间也确实都在用IPv6。

实施

本来是打算把iStoreOS全部铲掉重新装其他系统的,毕竟上面有很多存储类的东西我不用。但是考虑到用docker-compse安装NPM(其实这个我反而更希望裸机部署),我就把他保留了下来,并且DDNS之类的都可以直接复用,就不重新搭建了。

Nginx Proxy Manager

Docker Compose安装

登录iStoreOs的命令行界面,执行以下命令安装Docker Compose

bash 复制代码
mkdir -p ~/.docker/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
# 版本验证
docker compose version
# 输出: Docker Compose version v2.24.5

NPM安装

使用docker-compose安装npm,创建docker-compose文件,输入以下内容。

注意端口,不要设置为80,会和iStoreOs的界面有冲突

ruby 复制代码
version: "3"
services:
  npm:
    image: jc21/nginx-proxy-manager:2.12.3
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - "8080:80"       # HTTP 端口,供自动签发证书的验证使用,也可反代 HTTP 服务
      - "8443:443"     # HTTPS 端口,提供安全访问
      - "81:81"       # NPM Web UI 管理端口
    volumes:
      - /root/docker/nginx-proxy-manager/data:/data                  # 配置文件和数据库持久化
      - /root/docker/nginx-proxy-manager/letsencrypt:/etc/letsencrypt 

保存后在目录中执行 docker compose up -d 启动容器,可以在iStoreOs的界面中看到有一个容器在运行,也说明启动成功。

NPM配置

在浏览器中数据iStoreOs的ip+81端口,进入npm的管理界面。首次登录使用默认的邮箱和密码,注册账号修改为自己的信息就可以开始配置了。

添加SSL证书,使用对应的域名服务商的API即可。

出现Inactive状态先不要慌,这只是未使用而已。

然后就是愉快反代服务,按需添加即可。一般我都会勾选上强制Https,小绿锁的情绪价值也很重要。

相关推荐
SoleMotive.15 小时前
一个准程序员的健身日志:用算法调试我的增肌计划
python·程序员·健身·职业转型
万岳科技程序员小金18 小时前
多商户商城系统源码 + APP/小程序开发:技术架构与应用解
程序员·开源·源码·多商户商城系统源码·多商户商城小程序·多商户商城app开发·多商户商城平台开发
NAGNIP21 小时前
程序员效率翻倍的快捷键大全!
前端·后端·程序员
阿里嘎多学长1 天前
2026-02-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
修己xj1 天前
山野的风,城市的窗:一位拾粪爷爷与我的时代之问
程序员
沈二到不行1 天前
【22-26】蜉蝣一日、入樊笼尔
程序员·ai编程·全栈
AI绘画哇哒哒1 天前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
程序员鱼皮3 天前
刚刚,Claude Opus 4.6 和 GPT-5.3-Codex 同时炸场!AI 编程要变天了
计算机·ai·程序员·互联网·软件开发
Stephen_Young3 天前
32岁程序员猝死:让我想起了我曾经的加班经历,庆幸自己还活着
程序员·工控
良许Linux4 天前
51单片机都有哪些优缺点
单片机·程序员·嵌入式·编程