docs+cleanup: mihomo 幽灵引用清理(CLAUDE.md 重写 frp 段/删过时脚本); 设计文档补 2026-07-15 落地修正(锚点迁 ali/家内DNS改DNS Server/smartRoute 注意)

This commit is contained in:
wangjia
2026-07-15 07:42:59 +08:00
parent a57c6720e3
commit 86e6423700
4 changed files with 31 additions and 99 deletions
+17 -44
View File
@@ -30,15 +30,15 @@ docker/
│ ├── .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 配置(暂未启用)
── frp/
├── docker-compose.yml # 历史遗留(实际部署走二进制+systemd,见 scripts/
── frpc.toml.example # frpc 配置模板(token 占位,真值在 Bitwarden
└── derp/ # Tailscale 自建 DERP(可选,未部署
```
> mihomo 透明代理 + dnsmasq 已于 2026-07-05 下线删除(配置见 git 历史 `docker/proxy/`)。
> ⚠️ 若 Windows192.168.3.88)网关/DNS 仍指向 NAS,需改回路由器,否则断网。
NAS 上实际路径:`/volume1/docker/<服务名>/`,与仓库 `docker/` 目录一一对应。
## Docker 服务
@@ -65,46 +65,20 @@ NAS 上实际路径:`/volume1/docker/<服务名>/`,与仓库 `docker/` 目
ssh nas "tail -f /volume1/docker/forgejo/data/gitea/log/gitea.log"
```
### mihomo(透明代理
### frp 内网穿透(frpcsystemd 常驻
局域网透明代理网关,Windows 设备(192.168.3.88)以 NAS 为默认网关。
在外经 `nas/git/win.yanmeiai.com` 访问家里(frps 锚点在 ali 北京,方案见 `docs/remote-access-frp.html`):
**架构:**
```
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`,客户端和服务端均已移除)
- **frpc 二进制** `/usr/local/bin/frpc`,配置 `/volume1/docker/frp/frpc.toml`root:600,含 token 不入 git,模板见 `docker/frp/frpc.toml.example`
- systemd 服务 `frpc.service`Restart=always + MemoryLimit=64M);转发:git SSH/Web、DSM 5001、NAS SSH→10022、Windows RDP 3389 / SSH→10023
- 一键部署/重装:Mac 上跑 `bash scripts/setup-frp-remote.sh`(自动从 Bitwarden 取 token、代下载二进制、经 ssh 推送执行)
```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"
# 查看 frpc 状态与日志(NAS 上
sudo systemctl status frpc
sudo journalctl -u frpc -n 20 --no-pager
```
**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 天。
@@ -118,18 +92,17 @@ 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 文件共享 |
(frpc 无入站监听——只出站长连接到 ali:7000)
## Synology 反向代理
通过 DSM 内置 nginx 管理:**Control Panel → Login Portal → Advanced → 反向代理服务器**
+2 -2
View File
@@ -37,8 +37,8 @@
<tr><th>文档</th><th>状态</th><th>说明</th></tr>
<tr>
<td><a href="remote-access-frp.html">家庭内网远程访问 —— frp 反向隧道 × pangolin × 分流 DNS</a></td>
<td><span class="tag warn">执行中</span></td>
<td>内外同域名访问 NAS/Windowsfrpc(NAS)→frps(pangolin1) 反向隧道 + split-horizon DNS + pangolin 客户端分流;NAS 侧一键脚本 <code>scripts/setup-frp-remote.sh</code></td>
<td><span class="tag ok">在外链路已上线</span></td>
<td>内外同域名访问 NAS/Windowsfrpc(NAS,systemd)→frps(ali) 反向隧道 + SG 限源 + split-horizon DNS;家内直连与客户端分流规则待做;一键脚本 <code>scripts/setup-frp-remote.sh</code></td>
</tr>
</table>
+12 -1
View File
@@ -51,7 +51,18 @@
<div class="wrap">
<a class="back" href="index.html">← 文档索引</a>
<h1>家庭内网远程访问方案<br>frp 反向隧道 × pangolin × 分流 DNS</h1>
<p class="sub">2026-07-15 · <span class="tag info">执行中</span> P0P2 已完成(frps@pangolin1 运行中、hairpin 实测 OK、CF 三条 A 记录已生效);P3 待跑 <code>scripts/setup-frp-remote.sh</code> · 相关:<a href="public-access.md">Tailscale 公网访问(现状,保留作应急后门)</a></p>
<p class="sub">2026-07-15 · <span class="tag ok">在外链路已上线</span>(锚点 ali)· 家内直连(P5/P6)待做 · 相关:<a href="public-access.md">Tailscale 公网访问(保留作应急后门)</a></p>
<div class="card" style="border-color:var(--warn)">
<h3 style="color:var(--warn)">⚠️ 2026-07-15 落地修正(与下文原设计的差异)</h3>
<ul>
<li><b>锚点从 pangolin1 迁到 ali182.92.213.171</b>:实测发现 sing-box 客户端 auto_route 会把<b>自己服务器的 IP</b>排除出 TUN(内核级防环路,Apple 端 NE excludedRoutes),客户端永远无法经隧道回连 pangolin1——「hairpin 到 VPN 机自身」的原设计不成立。迁 ali 后链路:Mac→隧道→pangolin1 出口→公网→ali:frps←frpc←NAS。限源改用<b>阿里云安全组</b>(业务端口仅允许 103.119.13.48/32),负向测试已验证。frpc 家→北京为纯国内长连接,更稳。</li>
<li><b>NAS 上 mihomo 已不存在</b>2026-07-05 随 ec2 退役下线,本文 §6.2 的 mihomo hosts 方案作废):家内 DNS 覆盖改用<b>群晖 DNS Server 套件</b>(为 nas/git/win.yanmeiai.com 建单主机权威 zone,不劫持父域),待回家后落地。</li>
<li><b>frpc 用二进制 + systemd</b>(非 docker):NAS 无出国通道拉不了 Docker Hub 镜像;顺带消除对 Container Manager 的依赖。</li>
<li><b>smartRoute 暂需关闭</b>ali 是国内 IPsmartRoute 开着会把它分流成直连、被安全组限源拦截。根治=P6 客户端规则(这几个域名强制走隧道 + 私网结果直连),落地前先关 smartRoute。</li>
<li>Windows192.168.3.88)当前不在线(LAN 内 no route),RDP/SSH 转发待它开机即用,无需重配。</li>
</ul>
</div>
<div class="lead">
<b>目标:</b>①在家直连内网、不出外网;②在外<b>开着 pangolin</b> 就能穿透回家(不装第二个 VPN 客户端);③内外用<b>同一套地址</b>——<code>git.yanmeiai.com</code>Forgejo)、<code>nas.yanmeiai.com</code>DSM/Photos)、<code>win.yanmeiai.com</code>Windows RDP/SSH)。<br>
-52
View File
@@ -1,52 +0,0 @@
#!/bin/sh
# 让 Tailscale 域名在 mihomo 里解析为真实 IP(绕开 fake-ip 劫持),
# 否则 tailscaled 连不上控制服务器、登录时拿不到 URL。
# 该脚本在 NAS 上运行;config.yaml 归 wangjia 所有,无需 root。
# 幂等:重复执行不会重复插入。改前自动备份,并热重载生效(不重启容器)。
set -e
CFG=/volume1/docker/proxy/mihomo/config.yaml
echo "==> 1/4 备份配置"
cp "$CFG" "$CFG.bak.tailscale"
echo " 备份: $CFG.bak.tailscale"
echo "==> 2/4 写入 fake-ip-filter(幂等)"
python3 - "$CFG" <<'PY'
import sys
p = sys.argv[1]
text = open(p).read()
if "+.tailscale.com" in text:
print(" 已存在,跳过插入")
sys.exit(0)
lines = text.splitlines(True)
add = [
" - '+.tailscale.com'\n",
" - '+.tailscale.io'\n",
" - '+.tailscale-dns.com'\n",
]
out, done = [], False
for ln in lines:
out.append(ln)
if (not done) and "+.pool.ntp.org" in ln:
out.extend(add)
done = True
if not done:
print(" !! 没找到锚点 '+.pool.ntp.org',未修改,请人工检查")
sys.exit(1)
open(p, "w").writelines(out)
print(" 已插入 3 条 tailscale 域名")
PY
echo "==> 3/4 热重载 mihomo"
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"}'
echo " reload 已请求"
echo "==> 4/4 验证解析(期望是真实公网 IP,不再是 198.18.x"
sleep 1
nslookup controlplane.tailscale.com 2>&1 | tail -3
echo "==> 完成。现在回到卡住的窗口按 Ctrl+C,重新执行:"
echo " sudo /var/packages/Tailscale/target/bin/tailscale up --reset --operator=wangjia"