# VPS 流量转发配置 基于 **Xray + Nginx SNI 分流 + Mihomo TUN 透明代理 + WireGuard**,实现: 内网服务反向代理、多 VPS 链路中转、BT 透明代理、Minecraft UDP 转发。 --- ## 设备 | 设备 | IP / 域名 | 角色 | |---|---|---| | **北京 VPS** | `salmonstill.cn` / `49.232.242.90` | 公网入口,Nginx + Xray + socat + WireGuard | | **搬瓦工 VPS** | `173.242.118.60` | 代理出口,Xray Reality 入站(客户端直连) | | **旁路由** | `192.168.1.199` / WG `10.0.0.2` | 内网核心,Xray bridge + Mihomo 代理 | | **NAS** | `192.168.1.188` | 绿联云 UGOS,思源笔记等服务 | | **qBittorrent** | `192.168.1.200` (macvlan) | PT 下载,独立 IP | | **Windows** | `192.168.1.177` | 内网办公,SSH | | **Spark** | `192.168.1.166` | Ubuntu 主机,本地 TUN 代理 | --- ## 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` + `tokyo-vps-config.json`):`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_spark_ssh` | 38659 | → portal → Spark (166) :22 | | `external_spark_rdp` | 38660 | → portal → Spark (166) :3389 | | `external_spark_38662` | 38662 | → portal → Spark (166) :38662 | | `external_router_web` | 39766 | → portal → 旁路由 :80 | | `external_tmp` | 8501 | → portal → Windows :8501 | | `external_gitea` | 38661 | → 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 → `173.242.118.60: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 入站 | | `to_spark_ssh` | `192.168.1.166:22` | Spark SSH 远程 | | `to_spark_rdp` | `192.168.1.166:3389` | Spark xRDP 桌面远程 | | `to_spark_38662` | `192.168.1.166:38662` | Spark 自定义服务 | | `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` - 38661 → `to_3000` - 222 → `to_222` - 39132 → `to_minecraft` - 51413 → `to_qbit` - 38658 → `direct`(SOCKS5 动态回家,直接连接目标地址) - 38659 → `to_spark_ssh`(Spark SSH 远程) - 38660 → `to_spark_rdp`(Spark xRDP 桌面远程) - 38662 → `to_spark_38662` - 默认(catch-all)→ **`direct`**(不匹配端口规则的动态请求直连目标) - `socks-lan` 入站 → `to_beijing_direct` > 所有显式端口规则优先于 catch-all,现有端口转发不受影响。 ### 搬瓦工 VPS / 洛杉矶 (`tokyo-vps-config.json`) 极简:VLESS+Reality 入站 `:9443`(SNI=www.microsoft.com),freedom 出站。 所有客户端(Spark、旁路由、macOS)直连此服务器,不再经北京 VPS 中转。 --- ## Mihomo ### 旁路由 (`旁路由的mihomo config.yaml`) **纯代理模式** — 无内核级劫持,提供多端口代理服务供客户端手动指定: | 端口 | 类型 | 路由 | 用途 | |---|---|---|---| | `7890` | mixed | 按规则分流 | 本地服务默认代理 | | `7891` | mixed | 全部走 US-Direct | 全局国外代理 | | `7892` | mixed | 全部直连 | 全局国内直连 | 配合 **fake-ip DNS**(`enhanced-mode: fake-ip`),DNS 请求返回 `198.18.x.x` 假 IP,强制流量进入代理路由。 **代理节点**: - `US-Direct` — VLESS+Reality → `173.242.118.60:443`(默认国外出口,客户端直连搬瓦工) **关键策略组**: - 国外 → `[US-Direct, 直连]` **防死循环 IP**:`49.232.242.90`(北京 VPS)、`173.242.118.60`(搬瓦工 VPS)强制直连。 **额外监听器**:`:7891`(全局→US-Direct)、`:7892`(强制直连) ### macOS (`非tun模式的主机mihomo config.yaml`) 结构与旁路由一致,无 TUN,监听器 `:7890` + `:7891` + `:7892`。 **重启**(launchctl 管理): ```bash launchctl unload ~/Library/LaunchAgents/com.mihomo.proxy.plist launchctl load ~/Library/LaunchAgents/com.mihomo.proxy.plist ``` ### Ubuntu / Spark (`tun模式的主机mihomo config.yaml`) 本地 TUN 模式(`stack: system`),不依赖旁路由网关。设备重启后 `auto-route` 自建路由表,稳定可靠。监听器 `:7890` + `:7891` + `:7892`,节点直连 US-Direct。 ## qBittorrent 透明代理 ### 架构总览 ``` 出站(SOCKS5 代理) qBittorrent(192.168.1.200) 互联网 ↓ SOCKS5 旁路由:1080 (socks-lan) ↑ ↓ Xray routing → to_beijing_direct │ ↓ Reality(VLESS, SNI=news.apple.com) │ ↓ 北京VPS:443 → Nginx分流 │ ↓ proxy_from_lan:9445 → direct(freedom) ─────────────────┘ 入站(端口转发) Peer → 北京VPS:51413 → external_qbit → portal → bridge隧道 → 旁路由 → to_qbit → 192.168.1.200:51413 ``` --- ### 设备清单 | 设备 | IP | 角色 | |---|---|---| | 北京VPS | `salmonstill.cn` / `49.232.242.90` | 公网出口 + 入站入口 | | 旁路由 | `192.168.1.199` | Xray 桥接 + SOCKS5 代理 | | NAS | `192.168.1.188` | Docker 宿主机 | | qBittorrent 容器 | `192.168.1.200` | macvlan 独立 IP,PT 专用 | --- ### 第一部分:北京 VPS 配置 #### 1.1 Nginx Stream SNI 分流 `beijing-vps-stream.conf` 新增 `news.apple.com` SNI 映射(用于旁路由 Mihomo 直连代理): ```nginx stream { map $ssl_preread_server_name $backend { www.apple.com xray; # 旁路由反向代理隧道 www.microsoft.com mihomo; # 外部客户端代理 → 东京出口 news.apple.com xray_lan; # 旁路由 Mihomo 北京直连代理 drive.salmonstill.cn nas; # 绿联云服务 default npm; # Nginx Proxy Manager } upstream xray { server 127.0.0.1:9443; } upstream mihomo { server 127.0.0.1:9444; } upstream xray_lan { server 127.0.0.1:9445; } # 新增 upstream nas { server 127.0.0.1:38653; } upstream npm { server 127.0.0.1:8443; } server { listen 443 reuseport; listen [::]:443 reuseport; ssl_preread on; proxy_pass $backend; } } ``` #### 1.2 Xray 配置 `xray-北京vps-config.json` ##### 新增入站 `proxy_from_lan`(北京直连出口) ```json { "tag": "proxy_from_lan", "listen": "127.0.0.1", "port": 9445, "protocol": "vless", "settings": { "clients": [ { "id": "113e167a-a2be-4b46-9010-60020108626c", "flow": "xtls-rprx-vision" } ], "decryption": "none" }, "streamSettings": { "network": "raw", "security": "reality", "realitySettings": { "show": false, "target": "www.apple.com:443", "serverNames": ["news.apple.com"], "privateKey": "GGT9LfN_2JdQG68cwrULgUK-adfT6wIokLzWjaB0fXs", "shortIds": ["7c947a71b94f369e"] } } } ``` > Reality 公私钥复用已有的 `interconn` 入站 keypair,`serverNames` 用新的 `news.apple.com` 与 Nginx 对应。 > `target` 设为 `www.apple.com:443`,Reality 从此地址偷取真实 TLS 证书用于伪装。 ##### 新增入站 `external_qbit`(BT 入站端口) ```json { "tag": "external_qbit", "listen": "0.0.0.0", "port": 51413, "protocol": "dokodemo-door", "settings": { "address": "127.0.0.1", "port": 51413, "network": "tcp" } } ``` > 仅 TCP——Xray portal 反向代理对 UDP 支持不完善,BT 的 μTP(UDP) 走不了,需要在 qBittorrent 里关闭。 ##### 新增路由规则 ```json { "type": "field", "inboundTag": ["proxy_from_lan"], "outboundTag": "direct" }, { "type": "field", "inboundTag": ["external_qbit"], "outboundTag": "portal" } ``` #### 1.3 腾讯云防火墙 新开端口: | 端口 | 协议 | 用途 | |---|---|---| | 51413 | TCP | BT 入站 | --- ### 第二部分:旁路由 Xray SOCKS5 出站代理 #### 2.1 配置 `xray-旁路由-config.json` qBittorrent 出站不走 Mihomo 透明代理,而是通过旁路由上 Xray 的 `socks-lan` 入站(`:1080`),直接转发到北京 VPS 直连出口。 ##### SOCKS5 入站 ```json { "tag": "socks-lan", "port": 1080, "listen": "0.0.0.0", "protocol": "socks", "settings": { "auth": "noauth", "udp": true } } ``` ##### 出站 `to_beijing_direct` ```json { "tag": "to_beijing_direct", "protocol": "vless", "settings": { "vnext": [ { "address": "salmonstill.cn", "port": 443, "users": [ { "id": "113e167a-a2be-4b46-9010-60020108626c", "flow": "xtls-rprx-vision", "encryption": "none" } ] } ] }, "streamSettings": { "network": "raw", "security": "reality", "realitySettings": { "fingerprint": "chrome", "serverName": "news.apple.com", "publicKey": "62y5gDjPrdeuePGl-D2IW4Cw9Kb8_bSBBTmArvL7Nhs", "shortId": "7c947a71b94f369e" } } } ``` ##### 路由规则 ```json { "type": "field", "inboundTag": ["socks-lan"], "outboundTag": "to_beijing_direct" } ``` > 路径:`qBittorrent → SOCKS5 旁路由:1080 → to_beijing_direct → 北京VPS:443(SNI=news.apple.com) → proxy_from_lan:9445 → direct → 互联网` --- ### 第三部分:旁路由 Xray 51413 转发 #### 3.1 配置 `xray-旁路由-config.json` ##### 新增加出站 `to_qbit` ```json { "tag": "to_qbit", "protocol": "freedom", "settings": { "redirect": "192.168.1.200:51413" } } ``` ##### 新增路由规则 ```json { "type": "field", "inboundTag": ["bridge"], "port": "51413", "outboundTag": "to_qbit" } ``` > 放在 bridge 下——从北京 VPS 的 portal 通过反向隧道过来的 BT 入站流量,由 bridge 接收后按端口 51413 匹配到此规则,转发到 qBittorrent 容器。 --- ### 第四部分:NAS qBittorrent Docker #### 4.1 创建 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 ``` > `--gateway=192.168.1.199`:qBittorrent 的默认网关设为旁路由,确保出站流量经过旁路由。 > `--ip-range=192.168.1.200/32`:固定 IP。 #### 4.2 启动容器 ```bash docker run -d \ --name qbittorrent \ --network qbit_macvlan \ --ip 192.168.1.200 \ -e WEBUI_PORT=8090 \ -p 8090:8090 \ -v /path/to/downloads:/downloads \ lscr.io/linuxserver/qbittorrent:latest ``` #### 4.3 qBittorrent 设置 | 设置项 | 值 | |---|---| | 监听端口 | `51413` | | UPnP/NAT-PMP | **禁用** | | SOCKS5 代理 | `192.168.1.199` / 端口 `1080` | | 连接协议 | **仅 TCP**(关闭 μTP) | | DHT | 可选(建议开) | | PEX | 可选(建议开) | > 关闭 μTP(UDP):Xray portal 反向代理不支持 UDP,BT 的 μTP 走 UDP 会导致入站失败。 #### 4.4 定时做种调度(crontab) 让 qBittorrent 只在夜间(01:00-07:00)做种,白天暂停以节省带宽: ```bash crontab -e ``` 添加以下两行(在 NAS 或任意可访问 192.168.1.200 的设备上): ``` 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 | `/torrents/start` `hashes=all` | 启动全部种子开始做种 | | 早上 07:00 | `/torrents/stop` `hashes=all` | 停止全部种子 | --- ### 第五部分:部署顺序 ``` 1. 腾讯云防火墙 → 开放 51413/tcp 2. scp beijing-vps-stream.conf → 北京VPS /etc/nginx/stream.conf.d/ 3. scp xray-北京vps-config.json → 北京VPS /usr/local/etc/xray/config.json 4. 北京VPS: nginx -t && systemctl reload nginx 5. 北京VPS: systemctl restart xray 6. scp 旁路由的mihomo config.yaml → 旁路由 /opt/mihomo/config.yaml 7. scp xray-旁路由-config.json → 旁路由 /etc/xray/config.json 8. 旁路由: /etc/init.d/mihomo restart 9. 旁路由: /etc/init.d/xray restart 10. NAS: 创建 macvlan 网络 + 启动 qBittorrent 容器 11. NAS: 配置 qBittorrent 监听端口 51413,关闭 μTP ``` --- ### 第六部分:验证 #### 6.1 SOCKS5 代理出站验证 ```bash # 在 NAS 上执行,应返回北京 VPS 的公网 IP docker exec qbittorrent curl --socks5 192.168.1.199:1080 https://ip.sb ``` #### 6.2 Xray 日志确认 ```bash # 旁路由上查看 Xray 日志,确认 socks-lan 流量转发正常 tail -f /var/log/xray.log | grep socks-lan ``` #### 6.3 BT 入站验证 ```bash # 北京 VPS 上确认端口监听 ss -tlnp | grep 51413 # 从外部测试端口可达 nc -zv salmonstill.cn 51413 ``` #### 6.4 端到端 BT 测试 下载一个热门 Ubuntu torrent 种子,观察: - qBittorrent WebUI → 连接 → 应显示 DHT 节点数增长 - 跟踪器页面 → 应显示 "Working" - 下载速度应有上传来确认入站工作 --- ### 第七部分:故障排查 | 现象 | 排查 | |---|---| | qBittorrent curl ip.sb 返回真实 IP | SOCKS5 代理未生效,检查 qBittorrent 设置中代理配置 | | 代理连不上 | 确认 旁路由 Xray 正在运行且 `socks-lan` 入站监听 :1080 | | 入站无上传 | 检查北京 VPS ufw/腾讯云安全组已放行 51413/tcp | | xray 报错 `reverse-proxy.xray.internal` | portal/bridge 域名不匹配,两边必须一致 | | 下载有速度、无上传 | μTP 没关或 portal UDP 不支持,qBittorrent 设置仅 TCP | --- ### 第八部分:文件清单 | 文件 | 位置 | 作用 | |---|---|---| | `beijing-vps-stream.conf` | 北京VPS `/etc/nginx/stream.conf.d/` | Nginx SNI分流(含 news.apple.com → 9445) | | `xray-北京vps-config.json` | 北京VPS `/usr/local/etc/xray/config.json` | Xray 入站+路由(含 proxy_from_lan + external_qbit) | | `xray-旁路由-config.json` | 旁路由 `/etc/xray/config.json` | Xray bridge + to_qbit(51413) + socks-lan(1080) → to_beijing_direct | ## Minecraft UDP 转发 ### 架构 ``` 公网玩家 (UDP 19132) ↓ 北京VPS (salmonstill.cn) socat 监听 19132 → 转发到 10.0.0.2:19132 ↓ WireGuard 隧道 旁路由 ImmortalWrt (192.168.1.199 / 10.0.0.2) nftables 端口转发 + SNAT ↓ NAS (192.168.1.188:19132) ↓ Minecraft 基岩版 Docker 容器 ``` --- ### 设备信息 | 设备 | IP | 系统 | |---|---|---| | 北京VPS | `salmonstill.cn` / `49.232.242.90` | Ubuntu 22.04 | | 旁路由 | `192.168.1.199` / WG隧道: `10.0.0.2` | ImmortalWrt 24.10 (GL-MT2500) | | NAS | `192.168.1.188` | 绿联云 UGOS | --- ### 第一部分:北京VPS 配置 #### WireGuard 配置 `/etc/wireguard/wg0.conf` ```ini [Interface] Address = 10.0.0.1/24 ListenPort = 51820 PrivateKey = <北京VPS私钥> MTU = 1420 # 回包源地址转换(必须,否则公网玩家收不到回包) PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE [Peer] # 旁路由 PublicKey = 9jPlaUhx2Dc+C5ZqJx6Iu8GtNMig3cFIoqfHg8PZbCA= AllowedIPs = 10.0.0.2/32 PersistentKeepalive = 25 ``` > ⚠️ 不使用 iptables DNAT 转发,改用 socat 处理 UDP 转发,避免 conntrack 连接跟踪问题导致回包丢失。 #### 开启内核转发 ```bash echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p ``` #### 开放防火墙端口 ```bash ufw allow 51820/udp # WireGuard ufw allow 19132/udp # Minecraft 基岩版 ``` #### 启动 WireGuard ```bash systemctl enable wg-quick@wg0 systemctl start wg-quick@wg0 ``` #### socat UDP 转发 socat 监听公网 19132 端口,收到包后转发给旁路由隧道 IP,并维护连接状态确保回包正确返回。 创建 systemd service: ```bash nano /etc/systemd/system/mc-forward.service ``` ```ini [Unit] Description=Minecraft UDP Forward After=network.target [Service] ExecStart=/usr/bin/socat UDP4-LISTEN:19132,fork,reuseaddr UDP4:10.0.0.2:19132 Restart=always [Install] WantedBy=multi-user.target ``` 启动并设置开机自启: ```bash systemctl daemon-reload systemctl enable mc-forward systemctl start mc-forward ``` --- ### 第二部分:旁路由 ImmortalWrt 配置 #### WireGuard 接口配置 路径:**网络 → 接口 → 添加新接口** **常规设置:** | 字段 | 值 | |---|---| | 接口名称 | `WireGuard` | | 协议 | `WireGuard VPN` | | 私钥 | `<旁路由私钥>` | | IP 地址 | `10.0.0.2/24` | | 监听端口 | 不填 | **防火墙设置:** 加入 `wan` 区域 **Peers → 添加对端:** | 字段 | 值 | |---|---| | 公钥 | `n159R7bNB+tW3Br0cok2zA27Pzg2WSPTI9uQ9odOFyU=` | | 端点主机 | `salmonstill.cn` | | 端点端口 | `51820` | | 允许的 IP | `0.0.0.0/0` | | 路由允许的 IP | ✅ 勾选 | | 持续 Keep-Alive | `25` | > ⚠️ 允许的 IP 必须设为 `0.0.0.0/0`,否则 WireGuard 会丢弃来自公网玩家 IP 的包。 #### 端口转发配置 路径:**网络 → 防火墙 → 端口转发 → 添加** | 字段 | 值 | |---|---| | 名称 | `Minecraft-udp` | | 协议 | `UDP` | | 源区域 | `wan` | | 外部端口 | `19132` | | 目标区域 | `lan` | | 内部 IP 地址 | `192.168.1.188` | | 内部端口 | `19132` | #### SNAT 配置 路径:**网络 → 防火墙 → NAT 规则 → 添加** | 字段 | 值 | |---|---| | 名称 | `minecraft-snat` | | 地址族限制 | `仅 IPv4` | | 协议 | `UDP` | | 出站区域 | `lan` | | 目标地址 | `192.168.1.188` | | 目标端口 | `19132` | | 操作 | `SNAT - 重写为特定的源 IP 或端口` | | 重写 IP 地址 | `192.168.1.199` | > SNAT 的作用:将转发给 NAS 的包源 IP 改为旁路由 IP,确保 NAS 的回包发回给旁路由而不是直接走主路由,避免回包路径不对称。 --- ### 第三部分:NAS Docker 配置 使用 `network_mode: host` 避免 Docker NAT 导致的 IP 映射问题。 ```yaml services: bedrock: image: itzg/minecraft-bedrock-server:2026.2.1 container_name: mc-bedrock network_mode: host stdin_open: true tty: true environment: EULA: "TRUE" VERSION: "1.26.14.1" TZ: "Asia/Shanghai" OPS: "2535472561115036" volumes: - /volume2/ProgramsV2/minecraft:/data restart: unless-stopped ``` --- ### 第四部分:验证 #### 检查 WireGuard 隧道 ```bash # 旁路由 wg show # 正常应有 latest handshake 和双向 transfer ``` #### 检查 socat 运行状态 ```bash systemctl status mc-forward ``` #### 抓包验证完整链路 ```bash # VPS 上抓 wg0,确认双向流量 tcpdump -i wg0 udp port 19132 -n # 旁路由抓 br-lan,确认转发到 NAS tcpdump -i br-lan udp port 19132 -n # NAS 上抓包,确认收到并回包 sudo tcpdump -i bridge0 udp port 19132 -n ``` --- ### 故障排查 | 现象 | 排查方法 | |---|---| | WireGuard 无握手 | 检查 VPS 防火墙 51820/udp 是否开放 | | socat 收不到包 | 检查 ufw 19132/udp 是否开放 | | 旁路由收不到包 | 检查 WireGuard AllowedIPs 是否为 `0.0.0.0/0` | | NAS 收不到包 | 检查端口转发内部端口是否填写正确 | | NAS 有回包但玩家连不上 | 检查 SNAT 规则是否生效,确认 NAS 用 host 网络模式 | | 游戏内延迟不显示 | 检查 socat 是否正常运行,DNAT 规则是否已删除 | --- ### 扩展:新增其他 UDP 服务 1. VPS 新建一个 socat service,修改端口号 2. 旁路由 LuCI 端口转发新增一条规则 3. `ufw allow <新端口>/udp` --- ## 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**(客户端直连) | `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 客户端 → 173.242.118.60:443 (SNI=www.microsoft.com) → Nginx 分流 → Xray :9443 → freedom → 互联网 ``` ### 路径 3:qBittorrent 代理出站 ``` qBittorrent → SOCKS5 旁路由:1080 → Xray to_beijing_direct → salmonstill.cn:443 (SNI=news.apple.com) → proxy_from_lan → 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` | | `非tun模式的主机mihomo config.yaml` | macOS | `~/Library/LaunchAgents/` (launchctl 管理) | | `tun模式的主机mihomo config.yaml` | Spark (Ubuntu) | `/opt/mihomo/config.yaml` (systemd) | | `subscribe-7891-only.yaml` | 通用 | 精简版模板(单独 7891 端口) | | `qbittorrent流量转发.md` | — | 方案文档(已合并到 README,可删除) | | `我的世界udp转发.md` | — | 方案文档(已合并到 README,可删除) | --- ## 部署流程 ``` 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. 旁路由: 配置 WireGuard + 端口转发 + SNAT(LuCI) 10. NAS: 创建 macvlan 网络 → 启动 qBittorrent 容器 11. 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 -E '443|9443' systemctl status nginx xray # 旁路由 ss -tlnp | grep -E '789[0-2]|1080' # Mihomo 端口 + Xray socks-lan mihomo -d /opt/mihomo -t # 配置文件校验 tail /opt/mihomo/logs/mihomo.log | grep INFO # 确认代理无报错 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 ```