- commit
- 7138a3e
- parent
- c5e007b
- author
- im_wower
- date
- 2026-03-22 00:15:05 +0800 CST
Clarify public vs Tailscale internal routing
2 files changed,
+91,
-10
+86,
-10
1@@ -340,9 +340,20 @@ VPS 不持有 leader 真相。
2 - Firefox 插件 -> 可见状态 badge
3 - Firefox 插件 -> 如有需要,访问隐藏 `dispatch`
4
5-## 6. 域名与二级域名布局
6+## 6. 域名、二级域名与内网地址布局
7
8-本节定义推荐的二级域名布局。
9+本节定义推荐的双通道布局:
10+
11+- 公网流量走二级域名,经 VPS Nginx 转发
12+- 内网与节点间流量直接走 Tailscale `100.x` 地址
13+
14+这里明确不依赖 MagicDNS 名称。
15+
16+原因:
17+
18+- 当前环境里 ClashX 会和 MagicDNS 产生 DNS 接管冲突
19+- 即使 tailnet 已开启 MagicDNS,也不把 `*.ts.net` 作为生产配置依赖
20+- 内网配置统一写死到 Tailscale IPv4 地址,避免本机 DNS 状态影响运行
21
22 ## 6.1 必需的公网域名
23
24@@ -381,23 +392,57 @@ VPS 不持有 leader 真相。
25
26 名字可以不同,但设计上要求有一个稳定的、前置 D1 的 HTTP API 域名。
27
28-## 6.2 现有域名
29+## 6.2 必需的内网地址
30+
31+当前推荐直接使用这些 Tailscale 地址:
32+
33+- `mini` -> `100.71.210.78`
34+- `mac` -> `100.112.239.13`
35+- `racknerd-ff37952` -> `100.68.201.85`
36+
37+用途:
38+
39+- `mini <-> mac` 的节点间控制流量
40+- conductor 到 peer conductor 的探活、状态读取、受保护节点 API
41+- worker、status、运维脚本等内部调用
42+- VPS Nginx 到 mini/mac 的 upstream 回源
43+
44+规则:
45+
46+- 生产配置中不写 `mini.tail0125d.ts.net`
47+- 生产配置中不写 `mbp.tail0125d.ts.net`
48+- 不要求业务机器开启 `accept-dns`
49+- 只要求它们加入同一个 tailnet 且 `100.x` 地址可达
50+
51+如果未来 Tailscale 地址变化:
52+
53+- 先更新中央配置
54+- 再更新 VPS Nginx upstream
55+- 最后重载相关进程
56+
57+## 6.3 现有域名
58
59 这些域名已经存在,继续沿用:
60
61 - `led.makefile.so` -> `baa-hand`
62 - `s.makefile.so` -> `baa-shell`
63
64-## 6.3 推荐 DNS 策略
65+## 6.4 推荐 DNS 策略
66
67 - `conductor.makefile.so` -> VPS 公网 IP
68 - `mini-conductor.makefile.so` -> VPS 公网 IP
69 - `mac-conductor.makefile.so` -> VPS 公网 IP
70 - `control-api.makefile.so` -> Cloudflare Worker 自定义域
71
72-之后由 VPS 把节点专属域名再转发到 Tailscale 地址。
73+之后由 VPS 把节点专属域名再转发到 Tailscale `100.x` 地址。
74+
75+额外说明:
76
77-## 6.4 建议的 DNS 记录
78+- 公网 DNS 不承载 tailnet 内部寻址
79+- tailnet 内部寻址直接用 `100.x`
80+- 不使用 MagicDNS 名称做回源或服务发现
81+
82+## 6.5 建议的 DNS 记录
83
84 推荐 DNS 记录如下:
85
86@@ -415,8 +460,9 @@ VPS 不持有 leader 真相。
87 - 如果 VPS 走 Cloudflare 代理,所有相关 host 的代理模式要保持一致
88 - `control-api.makefile.so` 最好留在 Cloudflare 内部,让 D1 访问保持本地化
89 - mini 和 mac 不应该直接暴露在公网,节点专属域名仍然应该经过 VPS
90+- tailnet 内部机器间调用不要再绕回这些公网域名
91
92-## 6.5 TLS 策略
93+## 6.6 TLS 策略
94
95 推荐 TLS 模式:
96
97@@ -448,6 +494,14 @@ VPS 上的 Nginx 提供:
98
99 真实 leader 由 D1 lease 决定。
100
101+它也不承载大部分内网控制流量。
102+
103+正确分工:
104+
105+- 浏览器、Claude 网页、管理页面 UI 走公网二级域名
106+- mini/mac 之间的内部控制流量直接走 Tailscale `100.x`
107+- VPS 只作为公网入口,不作为内网总线
108+
109 ## 7.2 Nginx Upstream 设计
110
111 推荐 upstream:
112@@ -475,6 +529,8 @@ upstream mac_conductor_direct {
113 - `100.71.210.78` 是 `mini`
114 - `100.112.239.13` 是 `mac`
115 - `4317` 是 conductor 本地 HTTP 端口
116+- upstream 使用 Tailscale IPv4 地址,不使用 `*.ts.net` 名称
117+- 这样可以绕开 ClashX 与 MagicDNS 的 DNS 接管冲突
118
119 ## 7.3 Nginx Server Block
120
121@@ -574,9 +630,17 @@ mini 和 mac 不应该直接对公网开放 conductor 端口。
122
123 推荐访问模型:
124
125-- VPS 通过 Tailscale 或 WireGuard 访问 mini 和 mac
126-- 只有 VPS 去访问 conductor HTTP API
127-- 运维人员要访问 mini/mac 时,通过 SSH 或受保护的直连节点域名
128+- 浏览器、人类运维、Claude 网页、管理 UI -> 公网二级域名 -> VPS -> Tailscale upstream
129+- mini 和 mac 的 daemon / worker / 脚本 -> 直接访问 Tailscale `100.x`
130+- 只有需要公网暴露的入口才经过 VPS
131+- 运维人员要访问 mini/mac 时,可通过 SSH、Tailscale `100.x`,或受保护的直连节点域名
132+
133+内网建议:
134+
135+- `mini` 本机调用本机 conductor:`http://127.0.0.1:4317`
136+- `mini` 调 `mac`:`http://100.112.239.13:4317`
137+- `mac` 调 `mini`:`http://100.71.210.78:4317`
138+- VPS Nginx upstream 也直接写这两个 `100.x`
139
140 ## 7.6 完整的 Nginx 模式
141
142@@ -2119,7 +2183,10 @@ conductor 的示例参数:
143 BAA_CONDUCTOR_HOST=mini
144 BAA_CONDUCTOR_ROLE=primary
145 BAA_CONTROL_API_BASE=https://control-api.makefile.so
146+BAA_CONDUCTOR_PUBLIC_BASE=https://conductor.makefile.so
147 BAA_CONDUCTOR_LOCAL_API=http://127.0.0.1:4317
148+BAA_CONDUCTOR_PRIVATE_BASE=http://100.71.210.78:4317
149+BAA_CONDUCTOR_PEER_BASE=http://100.112.239.13:4317
150 BAA_RUNS_DIR=/Users/george/code/baa-conductor/runs
151 BAA_WORKTREES_DIR=/Users/george/code/baa-conductor/worktrees
152 BAA_LOGS_DIR=/Users/george/code/baa-conductor/logs
153@@ -2133,6 +2200,14 @@ mac 上至少需要不同的变量:
154 - `BAA_CONDUCTOR_HOST`
155 - `BAA_CONDUCTOR_ROLE`
156 - `BAA_NODE_ID`
157+- `BAA_CONDUCTOR_PRIVATE_BASE`
158+- `BAA_CONDUCTOR_PEER_BASE`
159+
160+说明:
161+
162+- `BAA_CONTROL_API_BASE` 仍然指向 Cloudflare Worker,自身不走 Tailscale
163+- 节点间与内网调用统一使用 `BAA_CONDUCTOR_PRIVATE_BASE` / `BAA_CONDUCTOR_PEER_BASE`
164+- 不要把 `mini.tail0125d.ts.net` 或 `mbp.tail0125d.ts.net` 写进运行配置
165
166 ## 28. 安全模型
167
168@@ -2219,6 +2294,7 @@ leader 应:
169 - 公网入口失效
170 - 公网域名无法再直接做运维操作
171 - 只要 mini 与 mac 还能访问 `control-api.makefile.so`,内部调度仍可继续
172+- 只要 tailnet 还通,运维仍可通过 Tailscale `100.x` 直达节点
173
174 推荐处理:
175
+5,
-0
1@@ -6,6 +6,9 @@
2 # 说明:
3 # - conductor.makefile.so 作为统一入口,走 mini 主、mac 备的 upstream
4 # - mini-conductor.makefile.so 与 mac-conductor.makefile.so 直连单节点 upstream
5+# - 所有 upstream 都直接写 Tailscale 100.x 地址
6+# - 不使用 mini.tail0125d.ts.net / mbp.tail0125d.ts.net 等 MagicDNS 名称
7+# - 这样可以避开 ClashX 与 MagicDNS 的 DNS 接管冲突
8 # - 证书路径使用 Let's Encrypt 默认目录,若走 Cloudflare Origin Cert 请替换为实际文件路径
9
10 map $http_upgrade $connection_upgrade {
11@@ -14,7 +17,9 @@ map $http_upgrade $connection_upgrade {
12 }
13
14 upstream conductor_primary {
15+ # mini 主节点,使用 Tailscale IPv4 私网地址回源
16 server 100.71.210.78:4317 max_fails=2 fail_timeout=5s;
17+ # mac 备用节点,使用 Tailscale IPv4 私网地址回源
18 server 100.112.239.13:4317 backup;
19 keepalive 32;
20 }