用 sing-box 在群晖 NAS 上搭建家庭内网接入服务
用 sing-box 在群晖 NAS 上搭建家庭内网接入服务
场景:没有公网 IPv4,只有公网 IPv6,通过 Lucky 做端口转发,在群晖 NAS 上用 Docker 部署 sing-box,实现在外网用 Shadowrocket / Clash Meta / Clash Verge 连回家庭内网。
环境说明
| 项目 | 值 |
|---|---|
| NAS 型号 | 群晖 SA6400 |
| 内网 IP | 192.168.18.8 |
| 公网条件 | 公网 IPv6,无 IPv4 |
| 端口转发工具 | Lucky(IPv6 → 内网 IPv4) |
| 容器平台 | Docker(Container Manager) |
| 服务域名 | gohome.ddns.vanjay.cn |
| 工作目录 | /volume3/MyDocker/singbox |
方案架构
外网客户端
(Shadowrocket / Clash Meta / Clash Verge)
│
│ 公网 IPv6 + 各协议端口
▼
Lucky 端口转发
(IPv6 端口 → 群晖 192.168.18.8)
│
▼
群晖 Docker
sing-box 服务端(host 网络模式)
│
│ 直接路由
▼
家庭内网 192.168.18.0/24
为什么用 sing-box?
- 单进程支持所有主流协议(VLESS、VMess、Hysteria2、TUIC、AnyTLS)
- 配置清晰,JSON 格式
- 主流客户端(Clash Meta、Shadowrocket)全部支持
- Docker 镜像官方维护,更新及时
协议选型
同时开启五种协议,覆盖所有主流客户端:
| 协议 | 特点 | 传输层 |
|---|---|---|
| VLESS + XTLS-RPRX-Vision + Reality | 无需证书,抗检测最强,首选 | TCP |
| VMess + WebSocket + TLS | 兼容性最广,穿透能力强 | TCP |
| Hysteria2 | 基于 UDP/QUIC,弱网表现好 | UDP |
| TUIC5 + BBR | QUIC 协议,低延迟 | UDP |
| AnyTLS | 新兴协议,灵活 | TCP |
端口规划
Lucky 外部监听 IPv6 端口(不能与已有规则重复),转发到群晖内网端口:
| 协议 | Lucky 外部端口 | 群晖内部端口 | 协议类型 |
|---|---|---|---|
| VLESS + Reality | 4537 | 4437 | TCP+UDP |
| VMess + WS + TLS | 8543 | 8443 | TCP+UDP |
| Hysteria2 | 8544 | 8444 | TCP+UDP |
| TUIC5 | 8545 | 8445 | TCP+UDP |
| AnyTLS | 8546 | 8446 | TCP+UDP |
注意:VLESS 用 4437 而不是 443,是因为群晖本身已占用 443 端口。
目录结构
/volume3/MyDocker/singbox/
├── setup.sh ← 一键生成脚本
├── docker-compose.yml ← 由脚本生成
├── client-config.txt ← 脚本生成的客户端信息摘要
├── config/
│ └── config.json ← 由脚本生成
├── cert/
│ ├── gohome.ddns.vanjay.cn.pem ← 自行放入
│ └── gohome.ddns.vanjay.cn.key ← 自行放入
└── subscribe/ ← 由脚本生成,放到 Web 服务暴露即可订阅
├── GoHome.yaml ← Clash Meta / Clash Verge 订阅
└── GoHome.conf ← Shadowrocket 订阅
一键配置脚本
在群晖 SSH 中执行,一次性自动完成:
- 生成 Reality 密钥对、UUID、随机密码
- 写入
config.json、docker-compose.yml、client-config.txt - 生成 **
subscribe/GoHome.yaml**(Clash Meta / Clash Verge 订阅) - 生成 **
subscribe/GoHome.conf**(Shadowrocket 订阅,含完整分流规则) - 拉取镜像并启动容器
前置条件:先将 TLS 证书放到 /volume3/MyDocker/singbox/cert/ 目录下。
脚本较长(含 base64 嵌入的 Shadowrocket 规则段),直接下载 setup.sh 使用。
执行方法:
# 1. 先放好证书
mkdir -p /volume3/MyDocker/singbox/cert
# 将证书复制到:
# /volume3/MyDocker/singbox/cert/gohome.ddns.vanjay.cn.pem
# /volume3/MyDocker/singbox/cert/gohome.ddns.vanjay.cn.key
# 2. 上传 setup.sh 并执行
chmod +x /volume3/MyDocker/singbox/setup.sh
/volume3/MyDocker/singbox/setup.sh
执行完毕输出:
================================================================
✅ 全部完成!
订阅文件目录: /volume3/MyDocker/singbox/subscribe
├── GoHome.yaml (Clash Meta / Clash Verge)
└── GoHome.conf (Shadowrocket)
将 subscribe/ 目录通过 Web 服务暴露出去即可订阅
客户端信息详见: /volume3/MyDocker/singbox/client-config.txt
================================================================
Lucky 端口转发配置
在 Lucky 的「端口转发」功能中添加以下五条规则:
| 规则名 | 类型 | 监听端口 | 目标 |
|---|---|---|---|
| GoHome-Vless | tcp6/udp6 | 4537 | 192.168.18.8:4437 |
| GoHome-VMess-WS-TLS | tcp6/udp6 | 8543 | 192.168.18.8:8443 |
| GoHome-HY2 | tcp6/udp6 | 8544 | 192.168.18.8:8444 |
| GoHome-TUIC5 | tcp6/udp6 | 8545 | 192.168.18.8:8445 |
| GoHome-AnyTLS | tcp6/udp6 | 8546 | 192.168.18.8:8446 |
踩坑记录:Lucky 同一实例下端口转发规则的监听端口不能重复,即使协议不同也不行。所以外部端口和内部端口错开了编号(如 4537→4437,8543→8443 等)。
验证服务正常运行
# 查看实时日志
docker compose -f /volume3/MyDocker/singbox/docker-compose.yml logs -f
# 验证 host 网络模式
docker inspect sing-box | grep NetworkMode
# 期望输出: "NetworkMode": "host"
# 验证容器能访问内网
docker exec sing-box ping -c 3 192.168.18.1
正常运行的日志特征:
INFO inbound/vless[vless-reality-in]: inbound connection from x.x.x.x:xxxxx
INFO inbound/vless[vless-reality-in]: [0] inbound connection to pancake.apple.com:443
INFO outbound/direct[direct]: outbound connection to pancake.apple.com:443
network_mode: host是关键配置,容器直接共享宿主机网络栈,才能访问 192.168.18.0/24 整个内网段。
客户端订阅
脚本执行后,subscribe/ 目录下会生成两个订阅文件,通过 Web 服务暴露后直接填链接订阅即可,无需手动填写节点参数。
暴露方式(群晖 Web Station 或 Nginx):
# Nginx 示例:将 subscribe/ 目录映射到某个路径
location /singbox/ {
alias /volume3/MyDocker/singbox/subscribe/;
autoindex off;
}
订阅链接格式:
- Clash Meta:
https://你的域名/singbox/GoHome.yaml - Shadowrocket:
https://你的域名/singbox/GoHome.conf
Clash Meta / Clash Verge(GoHome.yaml)
proxies:
- name: "Home-VLESS"
type: vless
server: gohome.ddns.vanjay.cn
port: 4537
uuid: <UUID_VLESS>
flow: xtls-rprx-vision
tls: true
servername: www.apple.com
reality-opts:
public-key: <PublicKey>
short-id: <ShortID>
network: tcp
udp: true
- name: "Home-VMess"
type: vmess
server: gohome.ddns.vanjay.cn
port: 8543
uuid: <UUID_VMESS>
alterId: 0
cipher: auto
tls: true
network: ws
ws-opts:
path: /vmess
udp: true
- name: "Home-Hysteria2"
type: hysteria2
server: gohome.ddns.vanjay.cn
port: 8544
password: <PW_HY2>
udp: true
- name: "Home-TUIC"
type: tuic
server: gohome.ddns.vanjay.cn
port: 8545
uuid: <UUID_TUIC>
password: <PW_TUIC>
congestion-controller: bbr
alpn: [h3]
udp: true
- name: "Home-AnyTLS"
type: anytls
server: gohome.ddns.vanjay.cn
port: 8546
password: <PW_ANYTLS>
udp: true
proxy-groups:
- name: "🏠 Home"
type: select
proxies:
- Home-VLESS
- Home-VMess
- Home-Hysteria2
- Home-TUIC
- Home-AnyTLS
rules:
- IP-CIDR,192.168.18.0/24,🏠 Home,no-resolve
- MATCH,DIRECT
Shadowrocket(GoHome.conf)
GoHome.conf 是完整的 Shadowrocket 配置文件,包含:
- 五个 GoHome 节点的
[Proxy]段 [Proxy Group]:🏠 GoHome(五节点可选)+🚀 PROXY- 完整分流规则,关键改动:
192.168.18.0/24→🏠 GoHome(内网走隧道)- 其余私有段(
10.0.0.0/8等)仍然 DIRECT - 国内域名 DIRECT,被墙域名 PROXY,其余 FINAL PROXY
- 原有
[URL Rewrite]和[MITM]证书完整保留
在 Shadowrocket 中添加订阅链接后,内网 192.168.18.x 会自动走 GoHome 节点,无需手动配置。
常见问题
443 端口被占用
FATAL: listen tcp 0.0.0.0:443: bind: address already in use
群晖 DSM 默认占用 443,VLESS 改用其他端口(本文用 4437)。
Lucky 端口冲突
以下 1 个端口监听失败,请更换端口 [udp:8444]
Lucky 内同实例下监听端口不能重复,外部端口与内部端口错开即可(如 8544→8444)。
流量通了但某些域名超时
ERROR: dial tcp x.x.x.x:443: i/o timeout
这是目标服务器本身网络问题,不影响代理服务正常运行。日志里看到 inbound connection from 就说明连接成功。
关键设计决策总结
- **
network_mode: host**:容器直接使用宿主机网络,无需额外路由配置即可访问整个内网段。 - Reality 协议:VLESS 首选,伪装成正常 TLS 握手,无需证书,抗检测能力强。
- 多协议并行:同时开启 5 种协议,适配不同客户端和网络环境,弱网首选 Hysteria2。
- 脚本化部署:所有密钥、UUID、密码全部自动生成,避免手动填写出错。
- IPv6 + Lucky:无公网 IPv4 也能实现完整的外网接入,Lucky 的端口转发对 IPv6 支持良好。
- 订阅文件生成:脚本同时输出 GoHome.yaml(Clash)和 GoHome.conf(Shadowrocket),放到 Web 可访问路径即可订阅,更换密钥后重跑脚本即可更新。GoHome.conf 的 Shadowrocket 规则段以 base64 嵌入脚本,确保
192.168.18.0/24走 GoHome 而不直连。
部署日期:2026-05-26
服务版本:sing-box latest(ghcr.io/sagernet/sing-box)