diff --git a/README.md b/README.md new file mode 100644 index 0000000..37e5fb2 --- /dev/null +++ b/README.md @@ -0,0 +1,300 @@ +# VPS 流量转发配置 + +基于 **Xray + Nginx SNI 分流 + Mihomo 透明代理 + WireGuard**,实现: +内网服务反向代理、多 VPS 链路中转、BT 透明代理、Minecraft UDP 转发。 + +--- + +## 设备 + +| 设备 | IP / 域名 | 角色 | +|---|---|---| +| **北京 VPS** | `salmonstill.cn` / `49.232.242.90` | 公网入口,Nginx + Xray + socat + WireGuard | +| **东京 VPS** | `tokyo.salmonstill.cn` / `43.165.178.10` | 代理出口,Xray Reality 出站 | +| **旁路由** | `192.168.1.199` / WG `10.0.0.2` | 内网核心,Xray bridge + Mihomo TPROXY | +| **NAS** | `192.168.1.188` | 绿联云 UGOS,思源笔记等服务 | +| **qBittorrent** | `192.168.1.200` (macvlan) | PT 下载,独立 IP | +| **Windows** | `192.168.1.177` | 内网办公,SSH | + +--- + +## Nginx SNI 分流 (`beijing-vps-stream.conf`) + +监听 `:443`,按 SNI 将流量分发到不同后端: + +| SNI | 后端 | 端口 | 用途 | +|---|---|---|---| +| `www.apple.com` | Xray interconn | :9443 | 反向代理隧道 | +| `www.microsoft.com` | Xray mihomo_in | :9444 | Mihomo 客户端 → 东京出口 | +| `news.apple.com` | Xray proxy_from_lan | :9445 | 北京直连代理 | +| `drive.salmonstill.cn` | NAS | :38653 | 绿联云直接转发 | +| 默认 | NPM | :8443 | Nginx Proxy Manager | + +东京 VPS (`东京-vps-stream.conf`):`www.microsoft.com` → Xray :9443,默认 → NPM。 + +--- + +## Xray 核心 + +### 北京 VPS (`xray-北京vps-config.json`) + +**Reality 入站** — 共享 privateKey `GGT9LfN_...`,由 Nginx SNI 转发: + +| Tag | 端口 | SNI | Reality target | +|---|---|---|---| +| `interconn` | :9443 | `www.apple.com` | `www.apple.com:443` | +| `mihomo_in` | :9444 | `www.microsoft.com` | `www.microsoft.com:443` | +| `proxy_from_lan` | :9445 | `news.apple.com` | `www.apple.com:443` | + +**dokodemo-door 入站** — 端口转发到旁路由反向隧道,共 11 个: + +| Tag | 公网端口 | 路由目标 | +|---|---|---| +| `external` | 38653 | → portal → NAS :9443 | +| `external_siyuan` | 38654 | → portal → NAS :5005 | +| `external_minecraft` | 39132 | → portal → 旁路由 :39132 | +| `external_wsl` | 38655 | → portal → Windows :22 | +| `external_nas_ssh` | 38656 | → portal → NAS :22 | +| `external_router_ssh` | 38657 | → portal → 旁路由 :22 | +| `external_router_web` | 39766 | → portal → 旁路由 :80 | +| `external_tmp` | 8501 | → portal → Windows :8501 | +| `external_3000` | 3000 | → portal → NAS :3000 | +| `external_222` | 222 | → portal → NAS :222 | +| `external_qbit` | 51413 | → portal → qBittorrent :51413 | + +**其他入站**: + +| Tag | 端口 | 类型 | 用途 | +|---|---|---|---| +| `proxy_in` | 10809 | mixed | SOCKS5/HTTP 代理 → 东京出口 | +| `socks-dynamic` | 38658 | SOCKS5 (password) | 动态 LAN 端口访问 | + +**出站**:`direct`(freedom 直连)、`to_tokyo`(VLESS+Reality → `us.salmonstill.cn:443`) + +**路由**:所有 `external_*` + `interconn` + `socks-dynamic` → `portal`(反向隧道);`mihomo_in` + `proxy_in` → `to_tokyo`;`proxy_from_lan` → `direct` + +### 旁路由 (`xray-旁路由-config.json`) + +**Bridge 入站**:与北京 VPS 的 Portal 建立永久反向隧道。 + +**出站**(14 个): + +| Tag | 目标 | 用途 | +|---|---|---| +| `to_nas` | `192.168.1.188:9443` | NAS 管理 | +| `to_siyuan` | `192.168.1.188:5005` | 思源笔记 | +| `to_wsl` | `192.168.1.177:22` | WSL SSH | +| `to_nas_ssh` | `192.168.1.188:22` | NAS SSH | +| `to_router_ssh` | `192.168.1.199:22` | 旁路由 SSH | +| `to_router_web` | `192.168.1.199:80` | 旁路由 Web | +| `to_minecraft` | `127.0.0.1:39132` | Minecraft 服务 | +| `to_tmp` | `192.168.1.177:8501` | 临时服务 | +| `to_3000` | `192.168.1.188:3000` | Web 服务 | +| `to_222` | `192.168.1.188:222` | 备用服务 | +| `to_qbit` | `192.168.1.200:51413` | qBittorrent 入站 | +| `interconn` | VLESS+Reality → `salmonstill.cn:443` (SNI=www.apple.com) | 隧道链接 | +| `to_beijing_direct` | VLESS+Reality → `salmonstill.cn:443` (SNI=news.apple.com) | 北京直连 | +| `direct` | freedom | 直连 | + +**路由规则**(bridge 入站按端口匹配): +- 38653 → `to_nas`(NAS 管理) +- 38654 → `to_siyuan` +- 38655 → `to_wsl` +- 38656 → `to_nas_ssh` +- 38657 → `to_router_ssh` +- 8501 → `to_tmp` +- 39766 → `to_router_web` +- 3000 → `to_3000` +- 222 → `to_222` +- 39132 → `to_minecraft` +- 51413 → `to_qbit` +- 38658 → `direct`(SOCKS5 动态回家,直接连接目标地址) +- 默认(catch-all)→ **`direct`**(不匹配端口规则的动态请求直连目标) +- `socks-lan` 入站 → `to_beijing_direct` + +> 所有显式端口规则优先于 catch-all,现有端口转发不受影响。 + +### 东京 VPS (`tokyo-vps-config.json`) + +极简:VLESS+Reality 入站 `:9443`(SNI=www.microsoft.com),freedom 出站。 + +--- + +## Mihomo + +### 旁路由 (`旁路由的mihomo config.yaml`) + +**TPROXY 透明代理** — `:7893`,nftables 劫持 `192.168.1.200` 的流量。 + +**代理节点**: +- `US-Direct` — VLESS+Reality → `us.salmonstill.cn:443`(默认国外出口) +- `Xray-Real` — VLESS+Reality → `49.232.242.90:443`(备用,经北京→东京) +- `Beijing-Direct` — VLESS+Reality → `salmonstill.cn:443`(北京直连,`skip-cert-verify: true`) + +**关键策略组**: +- 国外 → `[US-Direct, 直连]` +- PT-BT → `[Beijing-Direct, 直连]`(qBittorrent 专用,北京直连出网) + +**核心路由**:`SRC-IP-CIDR,192.168.1.200/32,PT-BT,no-resolve` — qBittorrent 全部走 PT-BT 策略组。 + +**防死循环 IP**:`49.232.242.90`(北京 VPS)、`43.165.178.10`(东京 VPS)强制直连。 + +**额外监听器**:`:7891`(全局→US-Direct)、`:7892`(强制直连) + +### macOS (`mac 的mihomo config.yaml`) + +结构与旁路由一致,无 TPROXY,监听器 `:7891` bind 到 `127.0.0.1`。 + +### subscribe.yaml + +通用订阅模板,节点:US-Direct(默认)、Xray-Real(备选)。国外组 `[Xray-Real, US-Direct, 直连]`,global-mixed listener 走 US-Direct。 + +--- + +## qBittorrent 透明代理 + +详见 [`qbittorrent流量转发.md`](./qbittorrent流量转发.md)。 + +``` +出站: qBittorrent → nftables :7893 → Mihomo PT-BT → Beijing-Direct + → salmonstill.cn:443 (SNI=news.apple.com) → direct → 互联网 +入站: BT Peer → salmonstill.cn:51413 → portal → 隧道 → bridge → to_qbit → 1.200:51413 +``` + +qBittorrent 设置:监听 `51413`,仅 TCP(关 μTP/UDP),不自设代理。 + +--- + +## Minecraft UDP 转发 + +详见 [`我的世界udp转发.md`](./我的世界udp转发.md)。独立于 Xray 体系: + +``` +公网 :19132 → 北京VPS socat → WireGuard 隧道 → 旁路由 10.0.0.2 + → 端口转发+SNAT → NAS :19132 → Docker (itzg/minecraft-bedrock-server) +``` + +--- + +## SOCKS5 动态 LAN 端口访问 + +通过新增的 `socks-dynamic` 入站(`:38658`,密码认证),可从外部访问任意内网 IP:PORT,无需事先配置端口规则。 + +``` +浏览器 SOCKS5 → salmonstill.cn:38658 + → 北京VPS socks-dynamic → portal → 反向隧道 + → 旁路由 bridge → catch-all direct → 任意 LAN IP:PORT +``` + +--- + +## Reality 密钥 + +| 位置 | Private Key | Public Key (客户端用) | +|---|---|---| +| **北京 VPS**(3 个入站共用) | `GGT9LfN_2JdQG68cwrULgUK-adfT6wIokLzWjaB0fXs` | `62y5gDjPrdeuePGl-D2IW4Cw9Kb8_bSBBTmArvL7Nhs` | +| **东京 VPS**(to_tokyo 出口) | `iBlu3eH1VLf1S5Qw87m_1w0TGYUktDwHAzgpQ2aKuGI` | `jr_zQjC4mvlQITuG5Ap5Mxqe5EBbGyyvwbVLDEi8OCA` | + +`Beijing-Direct` 节点必须 `skip-cert-verify: true`,因 Reality 返回 target(`www.apple.com`)的证书,而 SNI 是 `news.apple.com`,TLS SAN 校验会失败。 + +--- + +## 流量路径 + +### 路径 1:内网服务反向代理 +``` +用户 → salmonstill.cn:端口 → dokodemo-door → portal → 隧道 → bridge + → 端口匹配出站 → 内网目标 → 原路返回 +``` + +### 路径 2:代理翻墙(东京出口) +``` +Mihomo 客户端 → salmonstill.cn:443 (SNI=www.microsoft.com) + → mihomo_in :9444 → to_tokyo → 东京 VPS → freedom → 互联网 +``` + +### 路径 3:北京直连代理(qBittorrent) +``` +qBittorrent → nftables → Mihomo :7893 → PT-BT → Beijing-Direct + → salmonstill.cn:443 (SNI=news.apple.com) → direct → 互联网 +``` + +### 路径 4:BT 入站 +``` +BT Peer → salmonstill.cn:51413 → portal → 隧道 → bridge → to_qbit → 1.200:51413 +``` + +### 路径 5:Minecraft UDP +``` +公网玩家 → salmonstill.cn:19132 → socat → WireGuard → 旁路由 → NAS :19132 +``` + +### 路径 6:SOCKS5 动态回家 +``` +浏览器 SOCKS5 → salmonstill.cn:38658 → socks-dynamic → portal → 隧道 + → bridge → catch-all direct → 任意 LAN IP:PORT +``` + +--- + +## 文件清单 + +| 文件 | 目标设备 | 部署路径 | +|---|---|---| +| `beijing-vps-stream.conf` | 北京 VPS | `/etc/nginx/stream.conf.d/` | +| `xray-北京vps-config.json` | 北京 VPS | `/usr/local/etc/xray/config.json` | +| `东京-vps-stream.conf` | 东京 VPS | `/etc/nginx/stream.conf.d/` | +| `tokyo-vps-config.json` | 东京 VPS | `/usr/local/etc/xray/config.json` | +| `xray-旁路由-config.json` | 旁路由 | `/etc/xray/config.json` | +| `旁路由的mihomo config.yaml` | 旁路由 | `/opt/mihomo/config.yaml` | +| `mac 的mihomo config.yaml` | macOS | `~/Library/LaunchAgents/` (launchctl 管理) | +| `subscribe.yaml` | 通用 | 订阅模板 | +| `subscribe-7891-only.yaml` | 通用 | 精简版模板 | +| `qbittorrent流量转发.md` | — | 方案文档 | +| `我的世界udp转发.md` | — | 方案文档 | + +--- + +## 部署流程 + +``` +1. 腾讯云防火墙开放端口(443, 51413/tcp, 51820/udp, 19132/udp) +2. 北京 VPS: 部署 Nginx stream → nginx -t && systemctl reload nginx +3. 北京 VPS: 部署 Xray → systemctl restart xray +4. 北京 VPS: 部署 WireGuard → wg-quick@wg0 +5. 北京 VPS: 部署 socat → systemctl start mc-forward +6. 东京 VPS: 部署 Nginx + Xray +7. 旁路由: 部署 Xray → /etc/init.d/xray restart +8. 旁路由: 部署 Mihomo → /etc/init.d/mihomo restart +9. 旁路由: 部署 nftables 规则 → fw4 reload +10. 旁路由: 配置 WireGuard + 端口转发 + SNAT(LuCI) +11. NAS: 创建 macvlan 网络 → 启动 qBittorrent 容器 +12. NAS: 启动 Minecraft 容器 +``` + +--- + +## 验证命令 + +```bash +# 北京 VPS +ss -tlnp | grep -E '944[345]|3865[3-8]|51413|10809' +systemctl status nginx xray wg-quick@wg0 mc-forward + +# 东京 VPS +ss -tlnp | grep 9443 +systemctl status nginx xray + +# 旁路由 +nft list chain inet mihomo_tproxy prerouting | grep 192.168 +ip rule show | grep "fwmark 1" +ss -tlnp | grep -E '789[0-3]|1080' +wg show + +# qBittorrent 连通性 +docker exec qbittorrent curl -s https://ip.sb # 应返回北京 VPS IP + +# Minecraft +systemctl status mc-forward +tcpdump -i wg0 udp port 19132 -n +``` diff --git a/VPS流量转发架构说明.md b/VPS流量转发架构说明.md deleted file mode 100644 index 6351098..0000000 --- a/VPS流量转发架构说明.md +++ /dev/null @@ -1,508 +0,0 @@ -# VPS流量转发架构说明 - ---- - -## 总览 - -这套架构基于 **Xray + Nginx SNI 分流 + Mihomo 透明代理 + WireGuard**,实现: - -1. **反向代理内网服务到公网**(无需公网 IPv6/端口映射) -2. **异地多 VPS 链路中转代理**(Mihomo 客户端接入 → 东京出口) -3. **统一公网入口流量管理**(所有流量走 443 端口,无额外端口暴露) -4. **qBittorrent 透明代理 + 入站端口转发**(NAS PT 下载走北京 VPS 出口,支持 BT 入站连接) -5. **Minecraft 基岩版 UDP 转发**(独立 WireGuard 隧道 + socat 方案) - ---- - -## 设备清单 - -| 设备 | IP / 域名 | 系统 / 型号 | 角色 | -|---|---|---|---| -| **北京 VPS** | `salmonstill.cn` / `49.232.242.90` | Ubuntu 22.04 | 公网入口节点,Nginx + Xray + socat + WireGuard | -| **东京 VPS** | `tokyo.salmonstill.cn` / `43.165.178.10` | - | 代理出口节点,Xray Reality 出站 | -| **旁路由** | `192.168.1.199` / WG: `10.0.0.2` | ImmortalWrt 24.10 (GL-MT2500) | 内网反向代理 + 透明代理核心 | -| **NAS** | `192.168.1.188` | 绿联云 UGOS | 内网存储服务(思源笔记、绿联云管理) | -| **qBittorrent** | `192.168.1.200` (macvlan) | Docker (linuxserver/qbittorrent) | PT 下载专用,独立 IP | -| **Windows 台式机** | `192.168.1.177` | Windows + WSL | 内网办公设备,SSH 服务 | - ---- - -## 核心组件说明 - -### 1. 北京 VPS(公网入口节点) - -#### 1.1 Nginx Stream SNI 分流层 - -**配置文件**: `beijing-vps-stream.conf` - -Nginx stream 模块监听 `443/tcp`(IPv4 + IPv6),通过 `ssl_preread` 在 SSL 握手阶段提取 ClientHello 中的 SNI 字段,按域名分流到不同后端: - -| SNI 域名 | 后端 | 端口 | 用途 | -|---|---|---|---| -| `www.apple.com` | upstream `xray` | :9443 | 旁路由反向代理隧道 | -| `www.microsoft.com` | upstream `mihomo` | :9444 | Mihomo 客户端代理入口 → 东京出口 | -| `news.apple.com` | upstream `xray_lan` | :9445 | 旁路由 Mihomo 北京直连代理 | -| `drive.salmonstill.cn` | upstream `nas` | :38653 | 绿联云 NAS 服务直接转发 | -| 其他域名 | upstream `npm` | :8443 | Nginx Proxy Manager 常规 Web 管理 | - -#### 1.2 Xray 服务层 - -**配置文件**: `xray-北京vps-config.json` - -**入站(共 15 个)**: - -**Reality 入站(3 个)** — 均监听 `127.0.0.1`,由 Nginx 转发过来: - -| Tag | 端口 | SNI | Reality target | 用途 | -|---|---|---|---|---| -| `interconn` | 9443 | `www.apple.com` | `www.apple.com:443` | 接收旁路由反向代理桥接 | -| `mihomo_in` | 9444 | `www.microsoft.com` | `www.microsoft.com:443` | 接收外部 Mihomo 代理流量 | -| `proxy_from_lan` | 9445 | `news.apple.com` | `www.apple.com:443` | 接收旁路由直连代理流量 | - -**dokodemo-door 入站(11 个)** — 监听 `0.0.0.0`,反向代理内网服务: - -| Tag | 端口 | 路由 | -|---|---|---| -| `external` | 38653 | → portal → NAS `1.188:9443` | -| `external_siyuan` | 38654 | → portal → NAS `1.188:5005` | -| `external_minecraft` | 39132 | → portal → 旁路由 `127.0.0.1:39132` | -| `external_wsl` | 38655 | → portal → Windows `1.177:22` | -| `external_nas_ssh` | 38656 | → portal → NAS `1.188:22` | -| `external_router_ssh` | 38657 | → portal → 旁路由 `1.199:22` | -| `external_qbit` | 51413 | → portal → qBittorrent `1.200:51413` | -| `external_router_web` | 39766 | → portal → 旁路由 `1.199:80` | -| `external_tmp` | 8501 | → portal → Windows `1.177:8501` | -| `external_3000` | 3000 | → portal → NAS `1.188:3000` | -| `external_222` | 222 | → portal → NAS `1.188:222` | - -**Mixed 入站(1 个)**: - -| Tag | 端口 | 用途 | -|---|---|---| -| `proxy_in` | 10809 | SOCKS5/HTTP 混合代理(→ 东京出口) | - -**组件 - Portal**: -```json -"reverse": { - "portals": [ - { "tag": "portal", "domain": "reverse-proxy.xray.internal" } - ] -} -``` -与旁路由 Bridge 建立永久反向隧道,所有 `external_*` 入站的流量通过 portal 送入隧道。 - -**出站(2 个)**: - -| Tag | 协议 | 用途 | -|---|---|---| -| `direct` | freedom | 北京 VPS 直连出网 | -| `to_tokyo` | VLESS+Reality → `us.salmonstill.cn:443` | 转发到东京 VPS 出口 | - -**路由规则**: -- 所有 `external_*` 入站 → `portal`(送入反向隧道) -- `interconn` → `portal`(隧道本身维持) -- `mihomo_in` + `proxy_in` → `to_tokyo`(到东京出口) -- `proxy_from_lan` → `direct`(北京直连) - ---- - -### 2. 东京 VPS(代理出口节点) - -**配置文件**: `tokyo-vps-config.json` - -极简配置: - -```json -inbounds: [{ - port: 9443, - protocol: "vless", - streamSettings: { security: "reality", serverNames: ["www.microsoft.com"] } -}] -outbounds: [{ protocol: "freedom", tag: "direct" }] -``` - -**Nginx Stream 层** (`东京-vps-stream.conf`): -``` -www.microsoft.com → Xray :9443 -default → NPM :8443 -``` - -- 入站:VLESS+Reality,监听 `127.0.0.1:9443`,SNI=`www.microsoft.com` -- 出站:freedom 自由网络出口 -- **仅做流量出口转发,无其他逻辑** - ---- - -### 3. 旁路由(内网核心枢纽) - -#### 3.1 Xray 反向代理桥接 - -**配置文件**: `xray-旁路由-config.json` - -**组件 — Bridge**: -```json -"reverse": { - "bridges": [{ "tag": "bridge", "domain": "reverse-proxy.xray.internal" }] -} -``` -与北京 VPS 的 Portal 建立永久 TCP 隧道。来自公网的请求通过该隧道进入内网。 - -**入站(1 个)**: - -| Tag | 端口 | 协议 | -|---|---|---| -| `socks-lan` | 1080 | SOCKS5(备用) | - -**出站(12 个)** — 按端口/服务映射内网目标: - -| Tag | 目标 | 用途 | -|---|---|---| -| `to_nas` | `192.168.1.188:9443` | NAS 管理界面 | -| `to_siyuan` | `192.168.1.188:5005` | 思源笔记 | -| `to_wsl` | `192.168.1.177:22` | WSL SSH | -| `to_nas_ssh` | `192.168.1.188:22` | NAS SSH | -| `to_router_ssh` | `192.168.1.199:22` | 旁路由 SSH | -| `to_router_web` | `192.168.1.199:80` | 旁路由 Web 管理 | -| `to_minecraft` | `127.0.0.1:39132` | Minecraft 服务 | -| `to_tmp` | `192.168.1.177:8501` | 临时服务 | -| `to_3000` | `192.168.1.188:3000` | Web 服务 | -| `to_222` | `192.168.1.188:222` | 备用服务 | -| `to_qbit` | `192.168.1.200:51413` | qBittorrent 入站 | -| `interconn` | VLESS+Reality → `salmonstill.cn:443` (SNI=`www.apple.com`) | 与北京 VPS 的隧道连接 | -| `to_beijing_direct` | VLESS+Reality → `salmonstill.cn:443` (SNI=`news.apple.com`) | 北京直连代理 | -| `direct` | freedom | 直连 | - -**路由规则**(从 bridge 入站的流量按端口匹配): -- 38653 → `to_nas` -- 38654 → `to_siyuan` -- 38655 → `to_wsl` -- 38656 → `to_nas_ssh` -- 38657 → `to_router_ssh` -- 8501 → `to_tmp` -- 39766 → `to_router_web` -- 3000 → `to_3000` -- 222 → `to_222` -- 39132 → `to_minecraft` -- 51413 → `to_qbit` -- 默认 → `to_nas` -- socks-lan 入站 → `to_beijing_direct` - -#### 3.2 Mihomo TPROXY 透明代理 - -**配置文件**: `旁路由的mihomo config.yaml` - -专为 qBittorrent PT 流量设计的透明代理方案。 - -**TPROXY 端口**: `7893` - -**代理节点(2 个)**: -- `Xray-Real` — VLESS+Reality,SNI=`www.microsoft.com`,经北京到东京出口 -- `Beijing-Direct` — VLESS+Reality,SNI=`news.apple.com`,北京直连(`skip-cert-verify: true` — 因 Reality 返回的是 target `www.apple.com` 的证书) - -**策略组(11 个)**: -- 国内 → 直连 -- 国外 → `[Xray-Real, 直连]` -- Steam / Microsoft / AI / Stream Media / GitHub / Crypto → 按规则选 -- **PT-BT → `[Beijing-Direct, 直连]`**(核心策略) - -**关键路由规则**: -``` -SRC-IP-CIDR,192.168.1.200/32,PT-BT,no-resolve ← qBittorrent 全部走 PT-BT -DOMAIN-SUFFIX,salmonstill.cn,直连 -DOMAIN-SUFFIX,volces.com,直连 -DOMAIN-KEYWORD,raylink,直连 -IP-CIDR,49.232.242.90/32,直连 ← 北京 VPS 防死循环 -IP-CIDR,43.165.178.10/32,直连 ← 东京 VPS 防死循环 -``` - -**nftables TPROXY 劫持** (`/etc/nftables.d/50-mihomo-tproxy.nft`): -``` -ip saddr 192.168.1.200 meta mark set 1 tproxy to :7893 accept -``` -- 仅劫持来源 `192.168.1.200` 的流量 -- 排除本地/私有地址和 VPS IP(防死循环) - -**策略路由** (`/etc/rc.local`): -``` -ip rule add fwmark 1 table 100 -ip route add local 0.0.0.0/0 dev lo table 100 -``` - -**额外监听器**: -- `:7891` — 全局代理(强制走 Xray-Real → 东京出口) -- `:7892` — 强制直连 - ---- - -### 4. qBittorrent PT 下载节点 - -#### 4.1 网络架构 - -``` -qBittorrent (192.168.1.200, macvlan) - └── 网关: 192.168.1.199 (旁路由) -``` - -Docker macvlan 网络创建命令: -```bash -docker network create -d macvlan \ - --subnet=192.168.1.0/24 \ - --gateway=192.168.1.199 \ - --ip-range=192.168.1.200/32 \ - -o parent=eth0 \ - qbit_macvlan -``` - -#### 4.2 流量路径 - -**出站(透明代理)**: -``` -qBittorrent → nftables TPROXY劫持 → Mihomo :7893 - → SRC-IP-CIDR 匹配 → PT-BT 策略组 → Beijing-Direct - → VLESS+Reality (SNI=news.apple.com) → 北京VPS :443 - → Nginx 分流 → proxy_from_lan :9445 → direct → 互联网 -``` - -**入站(端口转发)**: -``` -BT Peer → 北京VPS :51413 → external_qbit → portal - → 反向隧道 → bridge → to_qbit → 192.168.1.200:51413 -``` - -#### 4.3 qBittorrent 设置 - -| 设置 | 值 | -|---|---| -| 监听端口 | 51413 | -| UPnP/NAT-PMP | 禁用 | -| SOCKS5 代理 | 清空(不使用) | -| 连接协议 | **仅 TCP(关闭 μTP)** | -| DHT | 可选(建议开) | -| PEX | 可选(建议开) | - -> μTP(UDP) 必须关闭 — Xray portal 反向代理不支持 UDP。 - -#### 4.4 定时做种调度(crontab) - -```cron -0 1 * * * curl -s -X POST "http://192.168.1.200:8888/api/v2/torrents/start" --data "hashes=all" -0 7 * * * curl -s -X POST "http://192.168.1.200:8888/api/v2/torrents/stop" --data "hashes=all" -``` - -夜间 01:00-07:00 做种,白天暂停节省带宽。 - ---- - -### 5. Minecraft 基岩版 UDP 转发 - -**独立于 Xray 体系的另一套方案**,使用 WireGuard + socat 实现 UDP 转发。 - -#### 5.1 架构 - -``` -公网玩家 UDP :19132 → 北京VPS socat → WireGuard 隧道 - → 旁路由 10.0.0.2 → 端口转发 + SNAT → NAS 192.168.1.188:19132 - → Docker 容器 (itzg/minecraft-bedrock-server, host 网络) -``` - -#### 5.2 北京 VPS 配置 - -**WireGuard** (`/etc/wireguard/wg0.conf`): -``` -[Interface] -Address = 10.0.0.1/24 -ListenPort = 51820 -PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE - -[Peer] -PublicKey = 9jPlaUhx2Dc+C5ZqJx6Iu8GtNMig3cFIoqfHg8PZbCA= -AllowedIPs = 10.0.0.2/32 -PersistentKeepalive = 25 -``` - -**socat systemd service** (`/etc/systemd/system/mc-forward.service`): -``` -ExecStart=/usr/bin/socat UDP4-LISTEN:19132,fork,reuseaddr UDP4:10.0.0.2:19132 -``` - -**防火墙**: -``` -ufw allow 51820/udp # WireGuard -ufw allow 19132/udp # Minecraft -``` - -#### 5.3 旁路由配置 - -**WireGuard 接口**: -- IP: `10.0.0.2/24` -- Peer 端点: `salmonstill.cn:51820` -- AllowedIPs: `0.0.0.0/0`(**必须**,否则丢弃公网来源包) -- 防火墙区域: `wan` - -**端口转发**:UDP `wan:19132` → `lan:192.168.1.188:19132` - -**SNAT 规则**:目标 `1.188:19132` UDP → 源 IP 重写为 `192.168.1.199` -> 确保 NAS 回包发给旁路由而非主路由,避免非对称路由问题。 - -#### 5.4 NAS Docker 配置 - -```yaml -services: - bedrock: - image: itzg/minecraft-bedrock-server:2026.2.1 - container_name: mc-bedrock - network_mode: host - environment: - EULA: "TRUE" - VERSION: "1.26.14.1" - OPS: "2535472561115036" - volumes: - - /volume2/ProgramsV2/minecraft:/data - restart: unless-stopped -``` - ---- - -### 6. macOS 客户端配置 - -**配置文件**: `mac 的mihomo config.yaml` - -备用客户端配置,与旁路由的 Mihomo 共享相同架构理念: - -- 混合端口: 7890 -- 监听器: 7891(全局代理→东京出口)、7892(强制直连) -- 单节点: `Xray-Real` (VLESS+Reality, SNI=`www.microsoft.com`) -- 完整 rule-providers 规则集(广告、国内、GFW、流媒体、AI、GitHub、Steam 等) -- `subscribe.yaml` — 与 Mac 配置结构相同,作为通用订阅配置模板 -- `subscribe-7891-only.yaml` — 精简版,全局走 7891 代理代理,适合快速切换 - ---- - -## 流量路径总览 - -### 路径 1:内网服务反向代理访问 -``` -用户 → salmonstill.cn:443 → Nginx SNI 匹配 → dokodemo-door 入站 - → Xray portal → 反向隧道 → 旁路由 bridge - → 按端口匹配出站 → 内网目标 → 原路返回 -``` - -### 路径 2:代理翻墙(东京出口) -``` -Mihomo 客户端 → salmonstill.cn:443 → Nginx SNI `www.microsoft.com` - → mihomo_in :9444 → to_tokyo → 东京 VPS → freedom → 互联网 -``` - -### 路径 3:北京直连代理(qBittorrent) -``` -qBittorrent → nftables TPROXY → Mihomo :7893 - → PT-BT → Beijing-Direct → salmonstill.cn:443 - → Nginx SNI `news.apple.com` → proxy_from_lan :9445 → direct → 互联网 -``` - -### 路径 4:BT 入站 -``` -BT Peer → salmonstill.cn:51413 → external_qbit → portal - → 反向隧道 → bridge → to_qbit → 192.168.1.200:51413 -``` - -### 路径 5:Minecraft UDP -``` -公网玩家 → salmonstill.cn:19132 → socat → WireGuard 隧道 - → 旁路由 10.0.0.2 → 端口转发 + SNAT → NAS :19132 → Docker 容器 -``` - ---- - -## 关键配置要点 - -### Reality 密钥体系 - -| 位置 | 用途 | Public Key | Private Key | -|---|---|---|---| -| **北京 VPS**(3个入站共用) | interconn / mihomo_in / proxy_from_lan | `62y5gDjPrdeuePGl-D2IW4Cw9Kb8_bSBBTmArvL7Nhs`(客户端用)| `GGT9LfN_2JdQG68cwrULgUK-adfT6wIokLzWjaB0fXs` | -| **东京 VPS** | to_tokyo 出口 | 客户端 `to_tokyo` 配置中的 `password` | `iBlu3eH1VLf1S5Qw87m_1w0TGYUktDwHAzgpQ2aKuGI` | - -> Reality 客户端必须使用 `public-key`,服务端使用 `privateKey`,且 `serverNames` 必须与 Nginx 分流 SNI 严格一致。 - -### 防死循环 IP -以下 IP 在旁路由的 Mihomo 规则中必须直连: -- `49.232.242.90` — 北京 VPS -- `43.165.178.10` — 东京 VPS - -### skip-cert-verify -`Beijing-Direct` 节点必须设置 `skip-cert-verify: true`,因为 Reality 返回的是 target(`www.apple.com`)的证书,但 SNI 是 `news.apple.com`,TLS 的 SAN 校验会失败。 - ---- - -## 文件清单 - -| 文件 | 目标设备 | 部署路径 | -|---|---|---| -| `beijing-vps-stream.conf` | 北京 VPS | `/etc/nginx/stream.conf.d/` | -| `xray-北京vps-config.json` | 北京 VPS | `/usr/local/etc/xray/config.json` | -| `东京-vps-stream.conf` | 东京 VPS | `/etc/nginx/stream.conf.d/` | -| `tokyo-vps-config.json` | 东京 VPS | `/usr/local/etc/xray/config.json` | -| `旁路由的mihomo config.yaml` | 旁路由 | `/opt/mihomo/config.yaml` | -| `xray-旁路由-config.json` | 旁路由 | `/etc/xray/config.json` | -| `mac 的mihomo config.yaml` | macOS | 本地运行 | -| `subscribe.yaml` | 通用 | 订阅模板 | -| `subscribe-7891-only.yaml` | 通用 | 精简版模板 | -| 旁路由备份 `backup-*.tar.gz` | 旁路由 | ImmortalWrt 系统备份 | - ---- - -## 架构优势 - -1. **极致伪装**:所有流量走 443 端口 HTTPS,通过 SNI 区分,无特征被封 -2. **零额外端口暴露**:除 443 外无公网端口(Minecraft 19132 和 WireGuard 51820 除外) -3. **内网零暴露**:NAS/Windows/qBittorrent 无需公网 IP 和端口映射 -4. **高可用隧道**:Xray portal/bridge 反向代理永久在线 -5. **低延迟**:Xray Reality 协议性能优异,中转延迟增加 < 10ms -6. **易扩展**:新增内网服务只需在旁路由添加路由规则,无需改公网配置 - ---- - -## 部署顺序(标准流程) - -``` -1. 腾讯云防火墙开放所需端口(443, 51413/tcp, 51820/udp, 19132/udp) -2. 北京 VPS: 部署 Nginx stream 配置 → nginx -t && systemctl reload nginx -3. 北京 VPS: 部署 Xray 配置 → systemctl restart xray -4. 北京 VPS: 部署 WireGuard → wg-quick@wg0 -5. 北京 VPS: 部署 socat → systemctl start mc-forward -6. 东京 VPS: 部署 Nginx + Xray 配置 -7. 旁路由: 部署 Xray 配置 → /etc/init.d/xray restart -8. 旁路由: 部署 Mihomo 配置 → /etc/init.d/mihomo restart -9. 旁路由: 部署 nftables 规则 → fw4 reload -10. 旁路由: 配置 WireGuard 接口 + 端口转发 + SNAT(LuCI) -11. NAS: 创建 macvlan 网络 → 启动 qBittorrent 容器 -12. NAS: 启动 Minecraft 容器 -``` - ---- - -## 验证命令速查 - -```bash -# 北京 VPS 健康检查 -ss -tlnp | grep -E '944[345]|3865[3-7]|51413|10809' -systemctl status nginx xray wg-quick@wg0 mc-forward - -# 东京 VPS 健康检查 -ss -tlnp | grep 9443 -systemctl status nginx xray - -# 旁路由 -nft list chain inet mihomo_tproxy prerouting | grep 192.168 -ip rule show | grep "fwmark 1" -ss -tlnp | grep -E '789[0-3]|1080' -wg show - -# qBittorrent 连通性验证 -docker exec qbittorrent curl -s https://ip.sb # 应返回北京 VPS IP - -# Minecraft 连通性 -systemctl status mc-forward -tcpdump -i wg0 udp port 19132 -n -``` diff --git a/mac 的mihomo config.yaml b/mac 的mihomo config.yaml index 4237e8a..fc92f15 100644 --- a/mac 的mihomo config.yaml +++ b/mac 的mihomo config.yaml @@ -69,6 +69,22 @@ proxies: short-id: "7c947a71b94f369e" network: tcp + - name: US-Direct + type: vless + server: us.salmonstill.cn + port: 443 + uuid: "4d222c16-53bb-4402-814e-c8188cebcea6" + udp: true + flow: xtls-rprx-vision + packet-encoding: xudp + tls: true + servername: www.microsoft.com + client-fingerprint: chrome + reality-opts: + public-key: "jr_zQjC4mvlQITuG5Ap5Mxqe5EBbGyyvwbVLDEi8OCA" + short-id: "a1b2c3d4" + network: tcp + # ======================== # 策略组 # ======================== @@ -79,7 +95,7 @@ proxy-groups: - name: 国外 type: select - proxies: [Xray-Real, 直连] + proxies: [US-Direct, 直连] - name: Steam-rule type: select @@ -270,7 +286,7 @@ listeners: port: 7891 listen: 127.0.0.1 udp: true - proxy: Xray-Real + proxy: US-Direct - name: direct-mixed type: mixed diff --git a/subscribe.yaml b/subscribe.yaml index 4237e8a..e590948 100644 --- a/subscribe.yaml +++ b/subscribe.yaml @@ -69,6 +69,22 @@ proxies: short-id: "7c947a71b94f369e" network: tcp + - name: US-Direct + type: vless + server: us.salmonstill.cn + port: 443 + uuid: "4d222c16-53bb-4402-814e-c8188cebcea6" + udp: true + flow: xtls-rprx-vision + packet-encoding: xudp + tls: true + servername: www.microsoft.com + client-fingerprint: chrome + reality-opts: + public-key: "jr_zQjC4mvlQITuG5Ap5Mxqe5EBbGyyvwbVLDEi8OCA" + short-id: "a1b2c3d4" + network: tcp + # ======================== # 策略组 # ======================== @@ -79,7 +95,7 @@ proxy-groups: - name: 国外 type: select - proxies: [Xray-Real, 直连] + proxies: [Xray-Real, US-Direct, 直连] - name: Steam-rule type: select @@ -270,7 +286,7 @@ listeners: port: 7891 listen: 127.0.0.1 udp: true - proxy: Xray-Real + proxy: US-Direct - name: direct-mixed type: mixed diff --git a/旁路由的mihomo config.yaml b/旁路由的mihomo config.yaml index cff8e6c..237257c 100644 --- a/旁路由的mihomo config.yaml +++ b/旁路由的mihomo config.yaml @@ -74,6 +74,22 @@ proxies: short-id: "7c947a71b94f369e" network: tcp + - name: US-Direct + type: vless + server: us.salmonstill.cn + port: 443 + uuid: "4d222c16-53bb-4402-814e-c8188cebcea6" + udp: true + flow: xtls-rprx-vision + packet-encoding: xudp + tls: true + servername: www.microsoft.com + client-fingerprint: chrome + reality-opts: + public-key: "jr_zQjC4mvlQITuG5Ap5Mxqe5EBbGyyvwbVLDEi8OCA" + short-id: "a1b2c3d4" + network: tcp + - name: Beijing-Direct type: vless server: salmonstill.cn @@ -101,7 +117,7 @@ proxy-groups: - name: 国外 type: select - proxies: [Xray-Real, 直连] + proxies: [US-Direct, 直连] - name: Steam-rule type: select @@ -296,7 +312,7 @@ listeners: port: 7891 listen: 0.0.0.0 udp: true - proxy: Xray-Real + proxy: US-Direct - name: direct-mixed type: mixed