背景与痛点
Chrome 插件审核遇到了一个非常头疼的问题:我的后端 API 和业务网站统一部署在国内的一台服务器上。因为某些原因,这台服务器的 IP 被海外阻断了。这就导致 Google 官方的审核员在审核插件时,根本无法请求到后端数据,核心功能判定不可用,审核直接被拒。
摆在我面前的有几个选择:
- 海外重新部署一套:太折腾,数据难以同步,两边维护代码极其痛苦。
- 常规反向代理:买一台香港服务器,装 Nginx、配置 SSL,再通过各种内网穿透工具把国内的 80 端口映射出去。但这会带来一个致命问题:国内这边的业务还要正常服务国内用户,国内本地的 SSL 和强制 HTTPS 绝不能关。如果在香港再套一层 SSL,会导致无限的
301 重定向死循环。
为了实现单边维护、完美兼容国内用户、且让香港中转站极致省资源,我摸索出了一套基于 Gost V3 + KCP 协议的无面板极简透传架构。
终极架构思路
抛弃复杂的七层 HTTP 反代,直接做纯粹的四层 TCP 数据流透传。让香港的服务器变成一个“没有任何感情的数据管道”。
Google 审核员 -> 香港 VPS 公网 443 端口 (由 Gost 直接接管) -> UDP KCP 加密隧道 -> 国内本地 Gost -> 国内 Nginx 443 端口 (本地处理 SSL 解密)
这套架构的三大核心优势:
- 去 Nginx 化,极致省资源:香港服务器不需要装宝塔,不需要装 Nginx,只要有个 Docker 环境就行。买最便宜的 1核 512M 纯净系统 VPS 即可,内存占用不到 30MB。
- 原汁原味的 SSL 握手:香港只负责搬运加密的数据包,所有的 SSL 证书解密、多域名 Host 路由识别,全部在国内服务器 Nginx 本地完成。国内用户直接访问,海外用户通过隧道访问国内,两者体验完全一致。
- 抗 QoS 阻断:跨境 TCP 长连接很容易被运营商阻断(表现为
timeout或连不上),我们将隧道的底层通信协议换成了基于 UDP 的 KCP 协议,抗丢包能力极强,速度起飞。
避坑指南:为什么不选 Gost V2 的 RTCP?
在最初的尝试中,我使用的是 Gost V2(ginuerzh/gost),试图通过 rtcp(反向 TCP)让国内去“控制”香港开启 443 端口。但这带来了无数的坑:
- 端口冲突:如果国内端用了 host 网络模式,
rtcp指令很容易让 Gost 误以为要在国内本地监听 443,直接和宝塔 Nginx 撞车报错address already in use。 - 协议限制:服务端和客户端的
rtcp监听指令如果不匹配,外网访问就会报Connection refused或者内部路由报missing address。 - 内网穿透隔离:如果不使用 host 模式改用 bridge 桥接网络,Gost 容器又会被宿主机(宝塔)的防火墙拦截,报
dial tcp 172.17.0.1:443: i/o timeout。
最终的解法是:全面拥抱 Gost V3(gogost/gost),并将两边角色对调,改用正向 Relay 隧道!
完整落地教程
第一步:国内(源站)配置为服务端
国内的 Gost 负责开门接客,拿到数据后直接敲本地 127.0.0.1:443 的门。因为没有了抢占端口的问题,直接使用 network_mode: "host",完美绕过本地 Docker 桥接网卡的防火墙拦截。
第二步:香港(中转站)配置为客户端
买一台海外纯净 VPS,装好 Docker。这台机器上的 Gost 负责霸占公网 443,然后无脑往隧道里塞数据。
第三步:启动与解析
最后,去你的域名注册商那里,把 Chrome 插件使用的域名,解析到香港服务器的 IP上。
总结
通过这一套折腾,业务代码一行没改,国内的服务器依旧是唯一的“真神”。海外流量走香港 UDP 隧道,国内流量直连。Chrome 审核员也能正常访问插件了,完美通关!
- All rights reserved.
- No part of this website, including text and images, may be reproduced, modified, distributed, or transmitted in any form or by any means, without the prior written permission of the author.
- Unauthorized commercial use is strictly prohibited.
- Unauthorized personal use is strictly prohibited.
