Loading... ## 先决条件和预期 * 有一台虚拟化设备,支持虚拟机的NAS或者安装有PVE、Esxi等虚拟化平台的设备都可以 * 公网IP加上软路由拨号 预期上应实现可以从外网以https安全访问的方式访问内网服务,并且支持自动续订ssl证书,包括但不限于从外网访问家庭的NAS、jellyfin媒体服务、home assistant智能家居服务、qbittorrent下载服务等 ## 架构 站长使用的方案是在群晖NAS内部署routeros软路由系统加openwrt旁路由网关,配合群晖的docker部署容器服务,数据及服务一体化的all in one方案 出于数据保护的需求,群晖、光猫、无线中继路由器均接入UPS,家庭使用可以考虑购买施耐德BK650型号UPS,价格合适同时满足功耗需求 ## ddns 服务最重要的需求之一就是不间断访问,本节会解释如何便利的实现宽带公网IP的ddns更新,功能由ddns-go、cloud flare共同实现 托管域名,可以选择ddns-go支持的域名服务商,不仅限于cloud flare,具体支持列表可以查看项目说明:[https://github.com/jeessy2/ddns-go](https://github.com/jeessy2/ddns-go) 部署ddns-go的docker容器,可以直接用以下docker-compose代码抄作业 ``` services: qbittorrent: image: ghcr.io/jeessy2/ddns-go container_name: ddns-go environment: - PUID=1026 - PGID=100 - TZ=Asia/Shanghai volumes: - ./config:/root ports: - 9876:9876 restart: always ``` 部署完成后先在ddns-go配置好域名服务商的API token,接着在域名处填写希望ddns解析的域名保存即可 ## 网络建设 外网访问家庭内网服务的重点还是在于安全性,本段会解释如何实现外网对内网的https安全访问;功能由nginx proxy manage实现 部署nginx proxy manage服务 ``` services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '1080:80' - '8081:81' - '1443:443' volumes: - ./data:/data - ./data/ssl:/etc/letsencrypt ``` 进入管理后台,转到ssl certificates菜单,先给ddns域名申请ssl证书,这里使用cloud flare的dns验证的方式申请(家庭宽带默认禁止80和443端口,用dns方式申请可以顺利取到证书) ![](https://pic.apoptoxin4869.com/pic/2025/01/63c8168ba04fb9a7cd635ab7082b866f.webp) ## 服务端口映射 本节挑选一些需要额外配置的内网服务如何通过nginx proxy manage正确反代,前提条件别忘了在路由器的防火墙设置中映射nginx proxy manage的https端口 ### 群晖 反代之后打开群晖的docker面板,管理容器的时候会提示“websocket已关闭”错误,需要在nginx proxy manage的反代配置的advanced中添加配置参数 ``` location / { proxy_pass https://192.168.188.10:5001; # 这里填写群晖内网的访问地址 proxy_set_header Host domain.com:1443; # 这里填写用于反代群晖的ddns域名,带上路由器映射的端口号 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_connect_timeout 60; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; add_header X-Cache $upstream_cache_status; } ``` 可以在群晖的外部访问中设置端口号为反代服务器的https端口,设置主机名为群晖反代的ddns域名,当你以https方式访问群晖的web页面(内网https或者ddns的https都可以)选中文件需要共享的时候,共享链接就会是 `https://synology.domain.com:1443/xxxxxxxxxxxx`,可以快速方便的共享出去 ![](https://pic.apoptoxin4869.com/pic/2025/01/3e8824061d4b28ccd4b6e9a11a94729b.webp) ![](https://pic.apoptoxin4869.com/pic/2025/01/f122c63823f531acdac6c7c1c8a807b0.webp) ### qbittorrent qbittorrent默认的安全设置会导致反代失败,需要在nginx proxy manage的反代配置的advanced中添加配置参数 ``` location / { proxy_pass http://192.168.188.9:8180; # 这里填写内网访问地址 proxy_http_version 1.1; proxy_set_header Host localhost:8180; # 这里不需要更改 proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; # qbit版本v4.2.2以上加入这条保护cookie安全 proxy_cookie_path / "/; Secure"; } ``` 打开qbittorrent的设置,转到webui设置,在服务器域名中填写 `localhost`即可 ![](https://pic.apoptoxin4869.com/pic/2025/01/1c8bbd960a5ff7d6b871cd9e1802f702.webp) ### home assistant 默认情况下,home assistant无法通过反代访问,需要在nginx proxy manage的反代配置的advanced中添加配置参数 站长的home assistant是通过虚拟机部署的,如果是其他部署方式,请自行参考参数修改的地方自己调整 ``` location / { proxy_pass http://192.168.188.8:8123; # 这里填写内网访问地址 proxy_set_header Host $host; proxy_redirect http:// https://; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } ``` 打开home assistant 终端,编辑配置文件 `nano /config/configuration.yaml`,在末尾添加http模块参数,根据官方文档和网友的实践,需要把反代服务器、home assistant的IP地址都加入http模块内, ``` http: use_x_forwarded_for: true trusted_proxies: - 192.168.188.0/24 # 这里填写反代服务的IP地址或者直接写内网网段都是可以的,推荐写上整个网段方便些 # 以下三行是home assistant的IP地址,172开头的是其中的docker服务的IP地址, # 顺便加上127.0.0.1,也许会有无效参数,但是懒得去调试了,这样子可以通过反代正常访问HA - 172.30.232.0/24 - 172.30.32.0/24 - 127.0.0.1 ``` 最后修改:2025 年 01 月 20 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏