部署 SNI Proxy 加速网页访问 反代 无需证书

我们都知道可以使用 nginx 反代功能来实现跨境访问外网,不过,这种方式有很多的制约,比如说很难实现登录验证,比如说需要针对转发模块单独做编译,比如说需要你有一个有效的 ssl 签名证书等等。

这次,我们来介绍另外一款神器 SNI Proxy,是用 dnsmasq 配合 sniproxy 可以实现无证书任意网站反代。它使用SNI 技术将 TLS 连接通过 TCP 代理到目标网站,这样就避免了对代理服务器的证书需求,而且访问到的网站证书也是原原本本的证书。

当然了,既然是基于 sni 技术,那 http 页面是肯定不能代理的,如果目标网站不支持 https,就不行了。

编译 SNI Proxy(可以跳过)

示例环境为 Ubuntu 14.04

从git上克隆 sni的源文件: https://github.com/dlundquist/sniproxy.git

准备环境

安装配置 SNI Proxy

 

编辑 /etc/sniproxy.conf来开启反代:

像上边这样开启针对某个域名的反代,但是这样太麻烦了,每次新增加一个网站,都需要对这个列表增加——为此,我们为了方便稍微牺牲一点安全性——且我不需要对邮件进行反代(容易被滥用,国外对垃圾邮件服务器是深恶痛绝的。),那么我可以直接这样写:

注意:对于 IPv4 来讲,你需要明确地写出要监听的外网地址(将代码中的 127.0.0.1 替换),否则就会只监听 IPv6 了。

这样就只打开了 https 反代,而且是只要被解析到这个服务器的域名都会被反代,这样一来,我们就可以只通过 dnsmasq 的解析来控制哪个域名反代了。(有那么一点安全隐患就是一旦被别人发现,你可能你服务器的流量会意外流失咯~记得监控你的服务器带宽?)

运行 sniproxy

直接使用命令sniproxy 即可运行,默认配置文件就是“/etc/sniproxy.conf”它会自动加载,如果你使用了其他路径或者配置文件名,那么你需要使用“-c”选项来指定路径:

端口重定向

那么,一般我们访问网站不喜欢输入端口号或者协议名称,那么默认访问的是80端口怎么办?作为辅助,我们安装一个轻量级的 nginx,让它把所有访问80端口的流量转移到443上边去,使用301重定向即可。

注意,针对 Google 等特殊域名,可能即使你做了端口重定向也无法跳转解析,是因为 GFW 能够解包 HTTP 流量,所以你懂的。

我们编辑 nginx 的配置文件“/etc/nginx/sites-available/default

改为如下内容:

 

域名解析

sniproxy 搭建成功,但是它是不能被直接访问的,你需要将域名解析过去,这样它才能根据域名来代理你的 ssl 链接,那么你可能就需要在自己的 hosts 上修改解析啦。不过,另外一个更简便的办法是使用 dnsmasq,在我写的一篇文章当中介绍了如何在国内搭建一个自己私有的 dns 服务器来避免 dns 污染,那么,你只需要在这个服务器当中增加 dnsmasq 的解析配置即可。

比如说新增一个 /etc/dnsmasq.d/sni.conf ,往里边写入需要解析到你 sniproxy 服务器的域名即可。为此,我在 github 上新建了一个项目,这里加入了常用网站的解析,你只需要将它下载并且替换里边的 IP 为你 sniproxy 服务器的 IP 即可!

记得修改里边的 IP 地址!

——————

这样,你的 dns 就增加了常见认证网站的自动反代功能!☺️

本文由 落格博客 原创撰写:落格博客 » 部署 SNI Proxy 加速网页访问 反代 无需证书

转载请保留出处和原文链接:https://www.logcg.com/archives/984.html

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

Comments

    1. 是的,http协议在传输时会将数据封包为tcp,读取的时候将tcp数据包解包合并为明文数据,我这里特地用了“解包”而非“解密”,我认为这么描述是合理的。

    1. 卧槽!!!!麻痹的 WordPress 的后台回复不能再混蛋一点了啊啊啊啊啊啊!!!
      老子写了三遍啊整整三遍!!!!!

      =。=算了,我不想写了,气死我了,这个能用,我就用这个,需要两台 vps,国外一个国内一个,绝逼好使。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注