Chapter 04 · Infrastructure & Topology

# 机器与网络拓扑

本章分两层描述拓扑：§0 是现网实际在跑的 EC2 单机部署（具体到端口与容器），§1–§5 是目标弹性多节点架构。两者均严格区分「数据面」（用户 VPN 流量）与「控制面」（API / 管理 / 运维流量），数据面与控制面在物理路径上彻底分离。

图例： 数据面 Data Plane — VPN 代理流量（用户→节点→互联网） 控制面 Control Plane — API / Web / 面板流量 运维面 Ops — 证书续签 / CI/CD / 心跳

网络请求流向总览 · Network Request Flow

## §0当前 EC2 单机部署（仅供测试，非生产 VPN 网络）

重要说明：EC2 是个人测试机，与 VPN 网络架构彻底分离 当前 EC2（18.136.60.128）是运维者个人的测试机，上面跑着与 Pangolin VPN 业务无关的个人服务（marzban/jiu/blog）。后续 Pangolin VPN 生产网络将使用独立专用机器，与这台 EC2 完全无关。EC2 只是当前验证 edge/singbox 容器可行性的临时环境。VPN 正式上线后，EC2 上不会再部署 Pangolin 的任何组件，以保护个人服务不受 VPN 业务影响（封锁、扫描、流量特征关联等）。

当前所有服务共用 一台 EC2（ap-southeast-1，18.136.60.128，ec2-user）。Pangolin 数据面容器（edge / singbox）与现网已有服务（marzban / jiu / blog / billing）并存；Marzban REALITY 提供线上代理，绝不能中断。

### 0.1 在跑服务与端口一览

服务 | 容器/进程 | 监听地址:端口 | 网络模式 | 流量类型 | 所属
--- | --- | --- | --- | --- | ---
pangolin-edge | Docker · `pangolin-edge:local` | `:80/tcp` `:443/tcp` | host | 数据面 控制面 | Pangolin
pangolin-singbox | Docker · `sing-box:v1.13.12` | `:443/udp` | host | 数据面 Hysteria2 | Pangolin
Marzban REALITY | marzban 服务（宿主） | `127.0.0.1:10443` | loopback | 数据面 VLESS+REALITY | 现有（勿动）
Marzban 面板 | marzban 服务（宿主） | `127.0.0.1:8899` | loopback | 控制面 Web UI | 现有（勿动）
jiu.service | systemd（Go 二进制） | `127.0.0.1:8080` | loopback | 控制面 电商 API | 现有（勿动）
blog（Next.js） | Docker / pm2 | `127.0.0.1:3000` | loopback | 控制面 Blog | 现有（勿动）
Umami 统计 | Docker | `127.0.0.1:3001` | loopback | 控制面 统计后台 | 现有（勿动）
billing.service | systemd | `:18080/tcp` | host（独立，不经 edge） | 控制面 计费 | 现有（勿动）

### 0.2 SNI 分流路由表（pangolin-edge · stream 层）

pangolin-edge 以 host 网络绑定 `:443/tcp`，在 TCP 层（ssl_preread）读取 SNI，不解密，直接按域名把连接 proxy_pass 到不同后端：

SNI（客户端发送的域名） | → 后端（容器内 127.0.0.1） | 再经 nginx http vhost | 最终落点 | 类型
--- | --- | --- | --- | ---
`www.cloudflare.com` | `127.0.0.1:10443` | ——（直通） | Marzban REALITY 数据面 → 互联网 | 数据面
`default（其他 SNI）` | `127.0.0.1:10443` | ——（直通） | 同上（兜底） | 数据面
`vpn.51yanmei.com` | `127.0.0.1:8443` | SSL 终止 → `:8899` | Marzban 管理面板 | 控制面
`blog.51yanmei.com` | `127.0.0.1:8444` | SSL 终止 → `:3000` / `:3001` | Next.js 博客 + Umami 统计 | 控制面
`jiu.51yanmei.com` | `127.0.0.1:8445` | SSL 终止 → `:8080` | jiu.service API + 静态 | 控制面

为什么用 tcp stream 层分流而非 http 层？ SNI 分流在 TCP 层完成，TLS 连接不在 edge 里解密再到 Marzban REALITY。这让 REALITY 的 TLS 流量完整透传：Marzban 收到原始 ClientHello，保留 REALITY 协议的所有防识别特征。只有 `vpn/blog/jiu.51yanmei.com` 的 HTTPS 流量才在 edge 内部做 SSL 终止（TLS → 明文 → 反代后端）。

### 0.3 数据面：VPN 流量跳转路径

路径 A：REALITY（TCP）主线
①→VPN 客户端· Flutter + sing-box libbox
②→GFW（穿越）· REALITY 流量伪装成 HTTPS 到 cloudflare.com
③→EC2 `:443/tcp`· 公网 IP 18.136.60.128
④→pangolin-edge· ssl_preread SNI=www.cloudflare.com → proxy_pass
⑤→`127.0.0.1:10443`· Marzban REALITY（宿主进程，loopback）
⑥→🌐 互联网· Marzban 作为出口，EC2 的公网 IP 出境
TLS 握手在 Marzban（⑤）内完成 · edge（④）零解密 · 完整 REALITY 防识别
路径 B：Hysteria2（UDP）备线
①→VPN 客户端· Flutter + sing-box libbox
②→GFW（穿越）· QUIC over UDP · masquerade=www.bing.com
③→EC2 `:443/udp`· TCP 与 UDP 共用 443，互不干扰
④→pangolin-singbox· sing-box Hysteria2 inbound（host 网络）
⑤→🌐 互联网· direct outbound · EC2 公网 IP 出境
TLS（ALPN=h3）在 singbox 内终止 · 自签证书（secrets/hy2/）· 端口跳跃抗 QoS
关键：数据面不经过任何 API 服务 用户的代理流量（路径 A/B）完全不经过控制面（API Server、MySQL、Redis）。节点（当前即 EC2 上的 Marzban/singbox）不保存任何用户身份信息——零用户库、零浏览日志。计费数据（字节数）由控制面独立上报，不在数据面节点产生。

### 0.4 控制面：Web / 面板流量跳转路径

所有 Web 流量（Marzban 面板、jiu 管理端、博客）均经 Cloudflare CDN 前置隐藏源站 IP，到 EC2 后再由 pangolin-edge 做 SNI 分流 + SSL 终止 + HTTP 反代：

控制面通用路径（以 vpn.51yanmei.com 为例）控制面
①→浏览器 / 管理员
②→Cloudflare CDN· DNS 解析 → CF 边缘节点 · 源站 IP 隐藏
③→EC2 `:443/tcp`· CF→EC2 段为 HTTPS（CF Origin Certificate）
④→pangolin-edge · tcp stream· ssl_preread 读 SNI=vpn.51yanmei.com → proxy_pass :8443
⑤→`127.0.0.1:8443` nginx http vhost· SSL 终止（Let's Encrypt 证书）· X-Real-IP=$http_cf_connecting_ip
⑥→`127.0.0.1:8899` Marzban 面板· HTTP 反代 · 宿主进程 · loopback
blog → :8444 → :3000(Next.js) + /stats/ → :3001(Umami) | jiu → :8445 → :8080(jiu.service) + 静态(/opt/jiu/)
注意 :80 的行为 pangolin-edge 的 nginx http 模块监听 `:80`（default_server）。所有业务域名均配置了 `return 301 https://` 跳转；未匹配域名直接返回 404。不存在明文 HTTP 落地的业务路由。

### 0.5 运维面：证书自续签循环

pangolin-edge 容器内后台进程（启动后 60s 开始）
每 12h
certbot renew DNS-01 验证 · --quiet
→
Cloudflare DNS API/etc/cloudflare.ini · TXT record
→
Let's Encrypt 证书颁发
若有续期
→
nginx -s reload--deploy-hook · 容器内热重载
↑
/etc/letsencrypt rw 挂载卷（宿主 + edge 共享）
无宿主 cron · 无 docker socket · 无跨容器信号 · edge 自续签自己用的证书

证书覆盖：`vpn.51yanmei.com`、`blog.51yanmei.com`、`jiu.51yanmei.com`（Let's Encrypt · DNS-01 / Cloudflare）。Hysteria2 用自签证书（`secrets/hy2/`），与 LE 无关。

## §1三层弹性拓扑（目标多节点架构）

§0 是单机现状；§1 开始描述 Pangolin 自有节点架构的目标形态。核心原则：入口 IP 是唯一公网暴露面（消耗品）；落地 IP 只对隧道内部可见（精品）；控制面独立部署，完全不跑用户流量。

### 1.1 数据面：用户 VPN 流量路径

VPN 客户端 Flutter · sing-box libbox
REALITY
或 Hy2
入口节点 Entry 消耗品 IP · :443 · sing-box
内部隧道
（付费用户）
中转节点 Relay 可选 · 大带宽低价
内部隧道
落地节点 Exit 精品 IP · 稳定出口
→
🌐 目标网站 Netflix / Google / etc.
免费用户：入口 = 落地（单跳直出），消耗品池；付费用户：入口 → 落地两跳，中转层按需启用；客户端 URLTest 实测择优，服务端目录只缩小候选集。
被识别/封锁的永远是入口 IP（唯一公网暴露）；落地 IP 几乎不会被烧

### 1.2 控制面：API 管理与节点注册路径

客户端 ↔ API 服务器
①→Flutter App / Web 用户中心
②→Cloudflare 域名池· 多域名轮换 · 源站 IP 隐藏
③→API Server（Go）· 独立机器 · 不跑任何代理流量
④→MySQL 8 + Redis· 用户/订阅/节点/激活码
⑤←节点目录（带版本）· if_version 增量轮询 · 客户端缓存兜底
节点 Agent ↔ API 服务器
①→新节点开机· cloud-init 脚本拉起 agent
②→mTLS gRPC 注册· 引导 token → API 签发节点证书
③←配置下发· UUID 表 / 伪装 SNI / 隧道密钥
④→sing-box 启动· agent 管理进程生命周期
⑤↔心跳 + 指标上报· 每 30s · 在线数/带宽/延迟
探针系统境内多 ISP 拨测
5min 周期
API · Scheduler 判封逻辑 · 状态机
blocked_confirmed
节点 Down 立即出目录
→
自动补新厂商 API 开机
→
探活通过入池 · version bump
控制面负责全部节点生命周期管理；数据面节点不保存任何用户信息；两面物理隔离，互不干扰。
判封三路互证：境内探针 + 境外对照 + 流量侧骤降 · 避免误判

### 1.3 三层节点角色对照

角色 | 暴露面 | IP 等级 | 更换频率 | 运行内容
--- | --- | --- | --- | ---
entry 入口 | 直面用户与 GFW（唯一公网暴露） | 消耗品池：冷门小厂 · 便宜 · 可隐私购买 | 被封即换；常态每 2–4 周主动轮换 | sing-box（REALITY + Hy2）+ agent
relay 中转 | 仅入口节点可见 | 低价大带宽 | 低频 | 内部隧道转发 + agent
exit 落地 | 仅中转/入口节点可见 | 精品池：稳定厂商 · 原生 IP · 解锁好 | 极低频 | 出口 + agent
probe 探针 | —— | 境内多 ISP 拨测点 + 境外对照点 | —— | 探测脚本 · 结果回报控制面

- 起步可以单跳：入口 = 落地（当前 EC2 即此模式）。role 字段从第一天建模，后续演进为分层对客户端无感。
- 分级对应套餐：免费用户消耗消耗品池（tier=free），被封损失最小；付费用户走 tier=pro 入口 + 落地分层。

## §2节点无状态化（可丢弃的前提）

- 节点上只有：sing-box + agent 二进制 + 由控制面下发的运行时配置（用户 UUID 表、伪装 SNI、密钥）。零用户库、零日志、零持久数据。
- 全部由 `cloud-init` 一段脚本拉起：装 agent → agent 持引导 token 向控制面 mTLS 注册 → 控制面下发完整配置。重建一台 ≈ 开机 + 等注册，约 3–5 分钟。
- 节点间不互信：中转/落地链路用独立隧道密钥，按节点对发放，回收节点即吊销。
- 节点全灭不影响控制面（API + MySQL + Redis 独立部署）；反之亦然。

## §3节点生命周期状态机

provisioning 厂商 API 开机中
→
probing 探活：境内外可达性验证
→
up 在目录 · 接受连接
→
draining 不接新连接 · 排空存量
→
down 已出目录
→
destroyed 销毁 · IP 释放
up → down（跳过 draining）：判封确认时立即下架。probing 失败 → 直接 destroyed（坏 IP 不入池）。每次迁移写 node_events 并 bump 目录 version，客户端收到新 version 即平滑迁移。

- 目录灰度：`nodes` 任何变更 bump 全局 version；客户端带 `if_version` 轮询（在线连接中收到目录推送可平滑迁移）；客户端缓存最后一份可用目录兜底。
- draining 排空：默认 30 分钟或存量连接归零，先到为准；免费节点可直接硬切（用户重连成本低）。

## §4一键更换与自动更换

### 4.1 一键更换（管理端按钮 / CLI 一条命令）

replace(node)管理端触发
→
开新机厂商 API（同区域 · 厂商池内可换家）
→
cloud-init 装 agent · 自注册
→
probing 境内外探活通过
→
新机入池 version bump
→
旧机 draining→ destroy · IP 释放
先建后拆（make-before-break）：任何更换动作期间容量不下降

- 换 IP 不换机（更轻量）：厂商支持弹性 IP 时直接 API 换绑 → 探活 → 更新 endpoint → version bump，全程分钟级。
- 全量轮换：同一命令对整个池滚动执行（并发度 1–2），用于例行轮换或大面积事件后重建。
- 所有动作幂等、写 `audit_log` 与 `node_events`；基础设施定义用 Terraform + 厂商 API 适配层（providers 表登记，凭证独立 secrets 管理）。

### 4.2 自动更换：判封 → 下架 → 补新

#### 判封信号（三路互证，避免误判）

信号源 | 采集 | 说明
--- | --- | ---
境内探针 | 电信 / 联通 / 移动 ≥3 个拨测点，每 5 分钟：TCP 连通 + TLS 握手 + 真实协议握手 | 核心信号；探针点用境内云函数/拨测服务，与运营身份隔离
境外对照 | 境外探针同款探测 | 区分「被墙」与「机器挂了」：境内挂 + 境外通 = 疑似被封；两边都挂 = 故障
流量侧 | agent 上报在线数/带宽，环比骤降（如 15 分钟内 −80%） | 辅助信号，提早怀疑

#### 判定与处置规则（scheduler 驱动，阈值可配）

- 疑似：境内 ≥2/3 拨测点连续 2 个周期失败，且境外正常 → `blocked_suspect`，节点降权（weight→10），加密探测频率。
- 确认：连续 6 个周期（30 分钟）维持上述状态 → `blocked_confirmed` → 立即 `down` 出目录 + 自动触发 §4.1 补新流程。
- 故障（境内外同挂）：走告警人工介入，不消耗 IP 配额重建。
- 容量保护：自动补新失败连续 3 次 → 升级为告警；池内 up 节点低于水位线（tier 内 <70%）→ 无条件告警。
- 熔断：1 小时内同池自动更换 >N 台（疑似大面积事件）→ 暂停自动重建、保留现场、人工决策（可能需要换厂商/换区域/换伪装 SNI）。

主动降低被封概率（比换得快更重要）

- REALITY 伪装 SNI 定期评估更换（目标站不可被墙、延迟特征合理）；密钥/short_id 随节点轮换。
- Hysteria2 端口跳跃（区间随机），抗 UDP QoS 与端口特征。
- 新 IP 上线前先「养」：探活通过后小流量灰度 24h 再放满 weight，避免新 IP 行为突变被标记。
- 免费池与付费池物理隔离（不同厂商账号），免费池被批量烧不殃及付费池。

## §5调度、容量与厂商池

### 5.1 节点目录排序（服务端）与智能选择（客户端）

- 服务端目录按 `score = f(实时负载, 探针延迟, weight, tier)` 排序下发，给客户端一个好的默认顺序与「信号条」数据。
- 客户端「智能选择」（UI 默认选中）：sing-box URLTest 在候选前 N 个节点本地实测自动择优——最终路径决策在端上，服务端只缩小候选集。

### 5.2 厂商池策略

池 | 厂商画像 | 要求
--- | --- | ---
消耗品池（entry/free） | 冷门小厂 ≥3 家，按量/小时计费，IP 便宜量大 | 有 API 可自动开退机；支持加密货币付款、隐私注册；避开被重点封锁的大厂 IP 段
精品池（exit/pro entry） | 稳定厂商 1–2 家，原生 IP、带宽质量好 | 同样隐私注册；区域：HK / JP / SG / US 起步

#### 5.2.1 消耗品池候选厂商（接入节点 · 被封即换）

数据来源：各厂商官网 + LowEndTalk / VPSBenchmarks 社区实测，调研日期 2026-06。价格以美元计，¥ 人民币标注为国内商家。

厂商 | 最低月价 | 亚洲节点 | Crypto / 匿名 | API 自动开退机 | 中国网络 | KYC | 推荐场景
--- | --- | --- | --- | --- | --- | --- | ---
HostHatch | ~$2.4/月 | HK · SG · TYO | BTC；接近匿名 | ✓ REST API 支持创建/删除实例 | 普通 BGP，无 CN2 | 无需 | API 自动化首选；三亚洲节点全覆盖；NVMe 性能好；适合批量消耗自动轮换
Servury | $3.99/月 `$0.55/天` | 新加坡 · 欧洲 | BTC / XMR / ETH；完全零 KYC（无需邮箱，32 位随机凭证） | ✗ | 普通 BGP | 完全无需 | 极匿名消耗品；按日计费便于快速轮换；凭证无账号体系，极隐私
ExtraVM | $4.5/月 | SG · TYO · LAX · AMS | 50+ 币种（BTC/XMR/USDT等）；零 KYC | ✗ | 普通 BGP | 无需（仅邮箱） | 多区域同时部署；币种最全；AMD Ryzen/EPYC NVMe 高性能
RackNerd | $1.88/月 年付特惠 | 新加坡 · LA(DC-02) | BTC 等 30+ 种；接近匿名 | ✗ 仅管理已有机 | LA-DC02 部分 CN2；SG 普通 BGP | 无需 | 价格最低（$1.88）；无 API 开退机，需手动；适合预算极紧且愿意手动维护的场景
Vultr | $6/月 | HK · SG · TYO · Osaka | BTC via BitPay | ✓ REST API v2 Terraform provider | 普通 BGP；HK 走 163 骨干，晚高峰丢包 5–15% | 信用卡或 BTC | API 完整成熟；覆盖 HK/JP/SG；IP 段曝光度高，需频繁换；不适合做长期精品节点
AkileCloud HK Lite 系列 | ¥9/月 ≈ $1.3 | HK · JP | USDT；无 KYC | ✗ | NTT/PCCW，非大陆优化线路 | 无需 | 国内 USDT 付款最方便；HK Lite 延迟低适合消耗接入；Pro 系列升精品池
Hetzner 通过 Caasify/BitLaunch | €3.99/月 `小时计费` | 新加坡（唯一亚洲） | 官方不接受；需 Caasify 等第三方 BTC 购买 | ✓ 行业最强 API Terraform/Pulumi | 普通 BGP；SG 无中国优化 | 第三方付款可绕过 | API 能力最强 + 真正小时计费；SG 无 CN2 是缺点；适合工程化自动化程度高的场景

#### 5.2.2 精品落地池候选厂商（Exit 节点 · 稳定保留）

厂商 | 月价范围 | 推荐节点 | 线路类型 | 延迟→大陆 | IP 质量 / 解锁 | 支付方式 | 推荐场景
--- | --- | --- | --- | --- | --- | --- | ---
DMIT Pro 系列 | TYO: $21.9/月 HK: $39.9/月 LAX: $36.9/年起 | TYO · HKG · LAX | CN2 GIA 三网全向 `CN2 + AS9929 + CMIN2` | HK: 30–60ms TYO: ~80ms LAX: 150ms | DC IP；HK/TYO 部分解锁 Netflix 港/日区；换 IP：每 15 天免费 1 次 | BTC + 支付宝 + WeChat；无 KYC | 精品落地首选；CN2 GIA 行业口碑最佳；晚高峰稳定无抖动；TYO Pro 性价比最高
Misaka Network | $4.75/月起 | HK · TYO · SG | 自有 AS + Equinix 接入 高质量 IP Transit | HK: 10–30ms TYO: 50–80ms | 原生 IP；Equinix HK2 顶级机房；流媒体解锁能力强（Netflix / YouTube Premium） | Alipay / Visa；无 KYC | 原生 IP 精品；对 IP 纯净度和解锁效果要求最高的落地场景；价格较低
AkileCloud HK Pro 系列 | ¥35/月 ≈ $4.9 | HK | 电信 CN2 联通 CUG 移动 CMI | 广州: 8–15ms 上海: 30–70ms 三网全优化 | 香港原生 IP；Netflix 港区可解锁；B 站 / YouTube Premium | USDT + 支付宝；无 KYC | 性价比最高精品；CN2+CUG+CMI 三网全覆盖；价格仅 DMIT HK 的 1/8
搬瓦工 BandwagonHost | LAX: $17/月 HK: $90/月 Osaka: $50/月 | HK · LAX · Osaka | CN2 GIA-E 三网 （KiwiVM 可一键迁机房 = 换 IP） | HK: 55ms LAX: 140–160ms | 原生 IP；各区域解锁对应区 Netflix；换 IP 可迁机房（免费） | 信用卡 / PayPal；无 KYC；未明确 Crypto | 行业稳定性标杆；HK 价格贵但质量天花板；换 IP 有机房迁移机制；适合预算充足场景
V.PS TYO Focus 系列 | €25/月 | TYO | CN2 GIA + AS9929 三网回程双优化 | ~80ms | DC IP；解锁能力未明确；需实测 | Crypto / PayPal；无 KYC | 东京 CN2+AS9929 备选；库存受限，需关注补货；价格适中
GreenCloudVPS HK CN2 GIA | $15/月起 | HK · SG · TYO | HK: CN2 GIA / GT SG: 普通 BGP | HK: ~50ms | DC IP；流媒体解锁弱；⚠ HK 中国直连限速 10 Mbps | BTC；无 KYC | 预算受限备选；HK 带宽上限 10 Mbps 是硬伤，大流量不适合；BTC 支付方便

选厂商优先顺序
消耗品池：HostHatch（API自动化）→ Servury/ExtraVM（极匿名）→ RackNerd（最便宜但手动）→ Vultr（API好但IP脏）
精品落地池：DMIT TYO/HK Pro（首选，CN2 GIA口碑最佳）→ Misaka（原生IP/解锁）→ AkileCloud HK Pro（性价比）→ 搬瓦工（预算充足时）
每家厂商使用独立账号体系，不产生关联（见 §6.5）。

- 每家厂商独立账号、独立邮箱、加密货币付款——厂商之间、厂商与域名/收款之间不产生身份关联（红线，见 06 章）。
- 控制面（API + MySQL + Redis）部署在与节点完全无关的稳定云上，不放任何代理流量；节点全灭不影响控制面，反之亦然。

#### 5.2.3 域名注册商候选（接入域名 · 控制面域名）

数据来源：各注册商官网 + KYCnot.me 隐私评级 + 社区实测，调研日期 2026-06。

##### 消耗品接入域名（批量注册 · 频繁轮换）

注册商 | .COM 年价 | 加密货币支付 | WHOIS 隐私 | API 自动化 | KYC 要求 | 管辖地 | 推荐场景
--- | --- | --- | --- | --- | --- | --- | ---
Porkbun | $9.73 注册 $10.91 续费 | BTC / BCH / ETH / LTC / USDC | ✓ 永久免费 | ✓ REST API 注册/删除/DNS 全支持 | 标准（美国 ICANN） | 美国（俄勒冈） | 消耗品首选；价格最低 + 多 Crypto + API 齐全；轮换成本约 $10/域/年
Dynadot | ~$10.88 续费 | BTC / ETH / LTC 等多种 | ✓ 永久免费 | ✓ REST API 含 dropcatch（抢注到期域名） | 标准（美国 ICANN） | 美国（加州） | API 含抢注 + 后市场功能；适合需要回收旧域名的场景；400+ TLD
Namecheap | $8.99 注册 $18.48 续费 | BTC / BCH via Cryptomus | ⚠ 首年免费，次年 $2.88/年 | ✓ XML API 功能最全但续费价涨幅大 | 标准（美国 ICANN） | 美国 | 注册价最低 $8.99；续费涨价严重（$18.48），批量长期使用需注意成本

##### 控制面 / 高隐私稳定域名（稀少 · 长期保有 · 极匿名）

注册商 | .COM 年价 | 加密货币 / 匿名 | WHOIS 隐私 | API | KYC | 管辖地 | 推荐场景
--- | --- | --- | --- | --- | --- | --- | ---
Njalla `njal.la` | $17.47/域/年 | XMR（Monero）主要支付；最匿名；可 Tor 登录 | ✓ 最强 Njalla 是法律上的域名所有人，你持使用权 | ✓ JSON-RPC 2.0 | 完全零 KYC；支持 XMPP 注册无邮箱 | 瑞典（Pirate Bay 创始人 Peter Sunde 创立） | 控制面首选；域名所有权法律隔离 + XMR + 零KYC + Tor，身份隔离最彻底
1984.is | 请直接询价 冰岛注册商 | BTC + XMR | ✓ 免费保护 | ✗ 无公开 API | 低 KYC；隐私优先 | 冰岛（非 14 眼联盟成员） | 管辖地多样化备选；BTC+XMR；冰岛法律体系与美国/EU 独立；适合备用控制面域名
OrangeWebsite | 请直接询价 | BTC；匿名注册 | ✓ 免费保护 | ✗ 无公开 API | Level 2 KYC（Crypto 付款时） | 冰岛（2009 年创立，自由言论导向） | 冰岛第三选；不推荐主力，API 缺失 + 部分 Crypto 需 KYC
Gandi | $11 注册 ⚠ $38 续费（高！） | 无 Crypto；信用卡/转账 | ✓ GDPR 强制保护 | ✓ REST API | EU 标准 GDPR | 法国（EU） | EU 司法管辖备选；续费 $38 价格贵；无 Crypto 是硬伤；不推荐为首选

##### DNS 解析服务选择

服务 | 价格 | 特点 | 注意事项
--- | --- | --- | ---
Cloudflare DNS（免费版） | 免费 | 最快 anycast 解析；全球 TTFB 最低；API 完整；支持 Proxy 模式（CDN + 源站 IP 隐藏） | ⚠ 必须使用与个人 EC2 完全独立的 Cloudflare 账号——两个账号一旦被关联（同邮箱/支付方式），VPN 域名被封会连累 51yanmei.com 个人账号
Cloudflare DNS（付费 $20/月） | $20/月起 | DDoS 保护增强；高级防火墙规则；适合控制面 API 域名 | 控制面 API 域名量少，可考虑 Pro 增强防护
HE.net（Hurricane Electric） | 免费 | 老牌 DNS，完全免费；适合作 Cloudflare 的 Secondary DNS 备份 | 仅做备份，不作主 DNS；主 DNS 出问题时 HE.net 接管防止域名失联

⛔ 绝对禁用 —— 中国大陆注册商 / DNS 服务
阿里云域名（万网）/ DNSPod / eName / West.xyz / 中国万网及其他陆资注册商：均受《网络安全法》管辖，政府可随时强制接管域名或 DNS 记录，无法用于 VPN 基础设施。
.CN / .中国 TLD 同样禁止：域名受 CNNIC 管辖，实名制，无匿名性。
域名选购优先级
消耗品接入域名：Porkbun（最低成本 + 多 Crypto + REST API）→ Dynadot（API 含抢注）→ Namecheap（注册便宜但续费贵）
控制面域名：Njalla（XMR + 零KYC + 法律代持，首选）→ 1984.is（冰岛管辖多样化备选）
DNS 解析：Cloudflare（独立账号）+ HE.net 作 Secondary 备份
账号隔离：注册商账号 / Cloudflare 账号均独立于 EC2 个人账号体系（见 §6.5）

### 5.3 监控告警

- 节点心跳缺失（>90s）、池水位、自动更换熔断、探针自身失联、兑换失败率、注册转化漏斗。
- 告警出口：TG bot（运营专用匿名号）。所有告警附 runbook 链接（05 章）。

## §6节点选购、扩容方案与轮换策略

本节回答三个实操问题：买什么机器、从 1 台到 N 台怎么演进、哪些机器需要频繁轮换。VPN 生产网络与 EC2 个人测试机彻底分离，独立账号、独立支付、独立域名体系。

### 6.1 首台测试机推荐

第一台机器用来跑通「接入点+落地节点」合一的单跳架构，验证 REALITY / Hy2 可用性。

维度 | 推荐 | 说明
--- | --- | ---
厂商 | Vultr / Racknerd / BuyVM / 搬瓦工 | 支持加密货币付款、隐私注册；避免 AWS/GCP/Azure（IP 段被重点封锁）
区域 | HK / JP / SG（首选）· LA / 韩国（备选） | 靠近大陆，延迟低（50–120ms）；HK 被封风险高但速度好，SG 稳定
规格 | 1 vCPU / 1 GB RAM / 20 GB SSD / 1 TB 带宽 | sing-box 极轻量，实际流量带宽是瓶颈；1 TB/月约够 100 用户日常使用
计费 | 按月 $3–8，或按小时（消耗品机器） | 接入点用按小时，落地和控制面用包月稳定套餐
OS | Ubuntu 22.04 LTS（minimal） | 社区脚本最多，cloud-init 支持好；不用 CentOS
网络 | 原生住宅或数据中心 IP（非共享 NAT） | 共享 NAT 的 IP 通常已被批量标记；要独立 /32 IP

首台机器不要买大厂 AWS / Google Cloud / Microsoft Azure 的 IP 段被 GFW 重点盯防，REALITY 伪装效果大幅降低。测试首选 Vultr Tokyo 或 Racknerd HK，几美元/月，被封直接换。

### 6.2 单机到 N 台：演进路径

1 台 单跳直出（接入 = 落地）— 测试 / 极小规模
机器→1 台 VPS（消耗品 or 精品）· 接入点和落地节点合一
部署→sing-box（REALITY + Hy2）· 用户 tcp:443 + udp:443 直接进来、直接出去
优点→最简单，1 台搞定，配置量最小
缺点→IP 被封 = 全部用户断线· 没有隔离，IP 换了客户端配置也要更新
控制面→可暂时手动管理（无 API Server）· 仅适合 <10 人内测阶段
适合阶段：Phase 0 验证 · 个人测试 · 不建议用于正式上线
2 台 接入 + 落地分离（推荐起步架构）
台 1→接入点（消耗品 VPS）· 用户看见的 IP · 运行 sing-box · 被封即换
台 2→落地节点（精品 VPS）· 用户看不见 · 实际出境 IP · 稳定不换
流量→用户 → 接入点 → 内部隧道（WireGuard）→ 落地节点 → 互联网
好处→接入点被封：换台 1 即可· 台 2（精品IP）几乎不会被烧 · 客户端只需更新接入 IP
控制面→可以用 API Server（第 3 台独立机器）或暂时手动
适合阶段：Phase 1 · 正式上线起步 · 推荐从这里开始
3 台 多接入点 or 加入中转层
方案 A→2 台接入点 + 1 台落地· 多地区接入（如 HK + SG），提升覆盖和可用性
方案 B→1 台接入 + 1 台中转 + 1 台落地· 接入→中转隧道→落地：隐藏落地 IP 更彻底，抗溯源
推荐→方案 A（更实用）· 方案 B 适合落地 IP 极难获取的情况（如解锁用原生 IP）
控制面→此时强烈建议上 API Server· 手动管 3 台节点的配置/密钥同步成本已很高
适合阶段：Phase 1+ · 开始商业化 · 几十到几百用户规模
N 台 完整弹性架构（§1 目标形态）
入口池→N 台消耗品接入点（自动开退机）· 分布 HK/JP/SG/LA · 免费用户/付费用户独立池
中转池→2–4 台中转节点（可选）· 大带宽低价 · 各区域就近
落地池→3–5 台精品落地节点· 不同解锁特征（Netflix/Disney+ 原生 IP）
控制面→1 台 API Server（稳定云，可 HA）· MySQL + Redis · 管理所有节点生命周期
探针→境内多 ISP 拨测节点· 自动判封 → 触发补新 · 详见 §4
适合阶段：Phase 2–3 · 千级用户规模 · 需要 Terraform + 多厂商账号体系

### 6.3 各类机器规格与预算参考

角色 | 规格 | 厂商画像 | 区域 | 预算
--- | --- | --- | --- | ---
接入点 消耗品 | 1 vCPU / 512 MB–1 GB / 1 TB 带宽 | 冷门小厂 ≥3 家：Vultr / Racknerd / CloudSilk / BuyVM · 支持加密货币 | HK / JP / SG / LA | $3–6 / 月 · 按小时更佳
中转节点 低频换 | 1 vCPU / 1 GB / 2–5 TB 带宽 | 大带宽便宜厂商：BandwagonHost / Vultr / Hetzner | JP / SG / 法兰克福 | $5–12 / 月
落地节点 稳定 | 1 vCPU / 1 GB / 1 TB 带宽 · 原生 IP | 稳定精品厂商：Linode / DigitalOcean / GreenCloudVPS · 原生住宅 IP 优先 | HK / JP / SG · US West | $6–15 / 月
API 控制面 永久 | 2 vCPU / 2 GB / 40 GB SSD | 最稳定厂商：DigitalOcean / Linode / Hetzner · 不需要靠近中国 | US East / 法兰克福（低延迟不是首要） | $10–20 / 月

### 6.4 轮换频率策略

机器角色 | 轮换频率 | 触发条件 | 轮换方式
--- | --- | --- | ---
接入点 | 高频 | ① 被封即换（自动触发） ② 主动：每 2–4 周轮换一次，防止 IP 被画像 | 厂商 API 自动开新机 → 探活 → 替换旧机 → 删旧机；全程无需手动 SSH
中转节点 | 中频 | ① 带宽严重限速时 ② 每季度主动评估 | 手动 or 半自动替换；中转 IP 不直面用户，被封概率低
落地节点 | 极低频 | ① 极少数情况被目标网站 ban IP ② 解锁需求变化 | 手动替换；精品 IP 轮换成本高，需提前备份配置；draining 期 ≥1h
API 控制面 | 不轮换 | 不轮换机器本身，只升级软件版本 | HA 蓝绿部署（API 有状态，MySQL 主从）；IP 可绑定 CF Access，不公开暴露

最重要的轮换原则 接入点是消耗品，被封不是事故而是预期；落地节点是资产，应尽量保护不暴露。用户看见的 IP = 接入点 IP = 可以随时换掉的；落地 IP 只在内部隧道中传递，GFW 无法直接观测。

### 6.5 账号隔离红线（与 EC2 彻底分开）

- VPN 节点机器用独立厂商账号，独立邮箱（一次性或匿名域名邮箱），加密货币支付，与 EC2（AWS）账号零关联。
- 各厂商账号之间也不产生关联：不使用同一个邮箱、不使用同一张卡、SSH 密钥各账号独立。
- Pangolin VPN 域名（vpn.*.com）与个人 EC2 上的域名（51yanmei.com）不共用 Cloudflare 账号——分别使用不同的 Cloudflare 账号，防止账号被封连累。
- API Server、MySQL 的存储不放任何可识别用户真实身份的信息（见 06 章）；VPN 节点上零用户库。