docs+cleanup: mihomo 幽灵引用清理(CLAUDE.md 重写 frp 段/删过时脚本); 设计文档补 2026-07-15 落地修正(锚点迁 ali/家内DNS改DNS Server/smartRoute 注意)
This commit is contained in:
@@ -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/`)。
|
||||
> ⚠️ 若 Windows(192.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 内网穿透(frpc,systemd 常驻)
|
||||
|
||||
局域网透明代理网关,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.200,DNS = 192.168.3.200
|
||||
|
||||
NAS mihomo (TUN 模式, Meta 接口)
|
||||
├─ 国内流量 → DIRECT(GEOSITE/GEOIP CN 匹配)
|
||||
└─ 国外流量 → ec2-sg(新加坡 AWS,VLESS + Reality)
|
||||
```
|
||||
|
||||
**关键配置:**
|
||||
- 配置文件:`/volume1/docker/proxy/mihomo/config.yaml`
|
||||
- DNS:端口 53,fake-ip 模式,范围 198.18.0.0/15,`fake-ip-persist: true`
|
||||
- 混合代理端口:7890(HTTP/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:00(UTC+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 DNS(fake-ip) |
|
||||
| 80 / 443 | Synology nginx(反代 + DSM 重定向) |
|
||||
| 2222 | Forgejo SSH |
|
||||
| 3000 | Forgejo HTTP |
|
||||
| 5000 / 5001 | DSM Web UI(HTTP / HTTPS) |
|
||||
| 5432 | PostgreSQL(localhost 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
@@ -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/Windows:frpc(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/Windows:frpc(NAS,systemd)→frps(ali) 反向隧道 + SG 限源 + split-horizon DNS;家内直连与客户端分流规则待做;一键脚本 <code>scripts/setup-frp-remote.sh</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -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> P0–P2 已完成(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 迁到 ali(182.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 是国内 IP,smartRoute 开着会把它分流成直连、被安全组限源拦截。根治=P6 客户端规则(这几个域名强制走隧道 + 私网结果直连),落地前先关 smartRoute。</li>
|
||||
<li>Windows(192.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>
|
||||
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user