封装HTTP代理至Vmess/SS协议以绕过GFW
最近需要在海外服务器上部署一个只支持HTTP代理的服务,在公网通讯必将大幅增加被GFW侦测的几率。解决方法是使用更安全的代理协议进行封装。
HTTP代理是最简单也最不安全的代理类型,同时又是最基本的,绝大多数普通应用都支持HTTP代理。也因此,HTTP代理非常容易被GFW识别并拦截。轻则丢包封端口,重则banIP,代价未免有些太大。
而诸如Vmess(V2Ray)和Shadowsocks(SS)的代理协议却能因其引以为傲的安全性轻松绕过GFW监测,那为什么不拿来用呢?
其实也可以通过修改源码的方式在该服务中内嵌代理功能,但未免太过复杂,也不便于服务未来的更新。也并没找到能实现类似功能(封装)的第三方服务,也许会有更优雅的解决方法。
Talk is cheap, show me the code
架构图
图里已经写得相当清楚了,这里再用文字额外记录下。
部署基础服务
远程服务器必须部署Nginx和任意一个安全可信的代理服务(例中是Vmess)
修改hosts
修改/etc/hosts,将服务需要用到的域名指向本地,如:vi /etc/hosts
插入需要修改的host规则:127.0.0.1 music.163.com
127.0.0.1 interface.music.163.com
(看到这里,你一定知道这个服务是做什么的了)
别忘了保存:ESC
:w
:q
配置反代服务器
使用Nginx在本地配置两个反代服务器(有几条host规则就配置几个反代),这里以 music.163.com 的反代服务器为例:
绑定域名: music.163.com
目标URL:http://127.0.0.1:服务端口
发送域名:music.163.com
结语
这样客户应用会以为自己真的在和 music.163.com 通讯,也就是用类似劫持的方法实现了封装HTTP代理。