Files
nas/CLAUDE.md
wangjia ef88e78f42 docs: 登记 QuickConnect 入口(ID wangjia812)
CLAUDE.md 公网访问节与 docs/public-access.md 增加 QuickConnect 备选入口说明:
ID、网页 DSM 链接、Photos 移动端用法、与 Tailscale 的取舍。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 19:30:09 +08:00

189 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
# NAS 运维管理
这个目录是 NASSynology DS925+)的运维配置管理仓库,存放 docker-compose 配置、脚本和文档。
## 连接
```bash
ssh nas # ~/.ssh/config 已配置,HostName 192.168.3.200User wangjia
```
## 硬件概况
| 项目 | 信息 |
|------|------|
| 型号 | Synology DS925+ |
| 系统 | DSM (Linux 5.10.55+, x86_64) |
| 存储 | /volume17TB 总量 |
| IP | 192.168.3.200(静态,手动配置) |
## 仓库目录结构
```
docker/
├── forgejo/
│ ├── docker-compose.yml # Forgejo + act-runnertoken 通过 .env 注入)
│ ├── .env.example # 复制为 .env 填入真实 token
│ └── runner/
│ └── config.yaml # act-runner 配置
└── proxy/
├── docker-compose.yml # mihomo 容器
├── mihomo/
│ ├── config.yaml # 透明代理规则(uuid 用 <VLESS_UUID> 占位)
│ └── .env.example # 复制为 .env 填入真实 UUID
└── dnsmasq/
└── dnsmasq.conf # 预备 DHCP 配置(暂未启用)
```
NAS 上实际路径:`/volume1/docker/<服务名>/`,与仓库 `docker/` 目录一一对应。
## Docker 服务
### 权限说明
`wangjia` 用户不在 docker 组,**无法直接运行 `docker` 命令**。容器管理需通过:
- DSM → Container Manager UI
- 或 root 权限(DSM 终端)
### ForgejoGit 服务)
- **`git.51yanmei.com` 当前仅局域网可达**:DNS 记录指向 `192.168.3.200`(内网私有 IP、未走 CF 代理),公网打不开
- **局域网直连**`http://192.168.3.200:3000/`
- **公网访问**:经 Tailscale`http://100.95.151.13:3000`(或 `https://ds925.tail6e8719.ts.net`),见 `docs/public-access.md`
- **SSH Clone(局域网)**`ssh://git@192.168.3.200:2222/`
- **配置方式**:优先通过 docker-compose.yml 的环境变量(`GITEA__section__key`)管理,避免直接改 app.ini
- **app.ini 路径**`/volume1/docker/forgejo/data/gitea/conf/app.ini`(属于 uid=1000wangjia 只读,需 root 修改)
- **数据库**SQLite`/volume1/docker/forgejo/data/gitea/gitea.db`
- **act-runner**CI/CD runner`forgejo-act-runner`),挂载 `/var/run/docker.sock` 可运行 Docker 任务
```bash
# 查看 Forgejo 日志
ssh nas "tail -f /volume1/docker/forgejo/data/gitea/log/gitea.log"
```
### mihomo(透明代理)
局域网透明代理网关,Windows 设备(192.168.3.88)以 NAS 为默认网关。
**架构:**
```
Windows (192.168.3.88)
└─ 网关 = 192.168.3.200DNS = 192.168.3.200
NAS mihomo (TUN 模式, Meta 接口)
├─ 国内流量 → DIRECTGEOSITE/GEOIP CN 匹配)
└─ 国外流量 → ec2-sg(新加坡 AWSVLESS + Reality
```
**关键配置:**
- 配置文件:`/volume1/docker/proxy/mihomo/config.yaml`
- DNS:端口 53fake-ip 模式,范围 198.18.0.0/15`fake-ip-persist: true`
- 混合代理端口:7890HTTP/SOCKS5,局域网可用)
- 管理 API`http://192.168.3.200:9090`
- 代理节点:VLESS + Reality**不使用** `flow: xtls-rprx-vision`,客户端和服务端均已移除)
```bash
# 热重载配置(不重启容器)
ssh nas "curl -s -X PUT 'http://127.0.0.1:9090/configs?force=true' \
-H 'Content-Type: application/json' \
-d '{\"path\":\"/root/.config/mihomo/config.yaml\"}'"
# 测试代理节点
ssh nas "curl -s 'http://127.0.0.1:9090/proxies/ec2-sg/delay?timeout=5000&url=https://www.cloudflare.com/cdn-cgi/trace'"
# 测试出口 IP
ssh nas "curl -s --max-time 10 --proxy 'socks5h://127.0.0.1:7890' https://ifconfig.me"
# 查看实时日志
ssh nas "curl -s http://127.0.0.1:9090/logs -N --max-time 10"
```
**dnsmasq(预备,未启用):**
配置文件已就绪(`docker/proxy/dnsmasq/dnsmasq.conf`),待未来启用 DHCP 自动分发时使用。启用前需将 mihomo DNS 端口从 53 改为 1053,并将 dnsmasq 加入 docker-compose.yml。
### jiu-db 自动备份
每天 02:00UTC+8)自动备份 jiu 项目 PostgreSQL,存至 `/volume1/docker/backups/jiu-db/`,格式 `jiu_db_YYYYMMDD_HHmmss.sql.gz`,保留约 16 天。
```bash
ssh nas "ls -lh /volume1/docker/backups/jiu-db/"
```
## 端口清单
| 端口 | 服务 |
|------|------|
| 22 | SSH |
| 53 | mihomo DNSfake-ip |
| 80 / 443 | Synology nginx(反代 + DSM 重定向) |
| 2222 | Forgejo SSH |
| 3000 | Forgejo HTTP |
| 5000 / 5001 | DSM Web UIHTTP / HTTPS |
| 5432 | PostgreSQLlocalhost only |
| 6690 | Synology Drive |
| 7890 | mihomo 混合代理(HTTP/SOCKS5 |
| 9090 | mihomo 管理 API |
| 41641/udp | Tailscale WireGuard |
| 445 / 139 | SMB 文件共享 |
## Synology 反向代理
通过 DSM 内置 nginx 管理:**Control Panel → Login Portal → Advanced → 反向代理服务器**
当前规则:
| 来源 | 目的地 |
|------|--------|
| `http://git.nas.local:80` | `http://localhost:3000` |
## 常用运维
```bash
# 磁盘使用
ssh nas "df -h /volume1"
# 查看路由规则(透明代理策略路由)
ssh nas "ip rule list"
ssh nas "ip route show table 2022 | head -5"
# 查看网络接口(Meta = mihomo TUN
ssh nas "ip addr show Meta"
```
## 公网访问(Tailscale,已上线)
NAS 通过 **TailscaleWireGuard 网格 VPN** 对外提供 Gitea 与 Synology Photos 访问:
零公网暴露、无文件大小限制、不泄露家庭公网 IP。部署与踩坑详见 `docs/public-access.md`
Cloudflare Tunnel 因免费版 100MB 上限不适合 Photos 大文件,故选 Tailscale。)
- **节点**`ds925`Tailscale IP `100.95.151.13`MagicDNS `ds925.tail6e8719.ts.net`
- **身份**Google SSO`wang880812@gmail.com`);Google 仅登录/进后台时需要,日常用不需要
- **CLI 路径**`/var/packages/Tailscale/target/bin/tailscale`(已设 `--operator=wangjia`,免 sudo
- **关键依赖**mihomo 的 `fake-ip-filter` 必须含 `+.tailscale.com` 等(见 mihomo 配置注释),
否则 fake-ip 劫持会导致 `tailscale up` 卡住。修复脚本:`scripts/fix-mihomo-tailscale.sh`
```bash
ssh nas "/var/packages/Tailscale/target/bin/tailscale status" # 查看节点与对端连接
```
### QuickConnectDSM 官方中转,已启用)
- **QuickConnect ID**`wangjia812`(查看/修改:DSM → 控制面板 → 外部访问 → QuickConnect
- 网页 DSM 入口:http://QuickConnect.cn/wangjia812(国内走 .cn 中转节点)
- Synology Photos / Drive 等移动端登录:服务器地址直接填 `wangjia812`
- 走 Synology 中转服务器,大文件传输速度一般;自用优先 Tailscale(`100.95.151.13`),
QuickConnect 主要留给家人或未装 Tailscale 的设备
## TODO
- [x] NAS 安装 Tailscale 套件并登录,Gitea/Photos 公网访问已验证(含 >100MB 上传)
- [x] 后台对 `ds925` 关闭 key expiry(已确认 KeyExpiry=None,不会再因密钥过期掉线)
- [ ] (可选)`tailscale serve` 给 Gitea 套 HTTPS(解决 Arc 等强制 HTTPS 浏览器超时)
- [ ] (可选)新加坡 EC2 自建 DERP 中继 / 把 Tailscale UDP 排除出 mihomo,从香港中继提速到 P2P 直连(`docker/derp/`
- [ ] wangjia 用户加入 docker 组,方便 SSH 管理容器
- [ ] dnsmasq 启用(全局 DHCP 分发,让其他设备也自动走透明代理)
- [ ] Forgejo app.ini 的 DOMAIN/SSH_DOMAIN/ROOT_URL 改为 `git.51yanmei.com`(需 rootdocker-compose 环境变量已覆盖,改 app.ini 仅为保持一致)