SNI Proxy代理 安装教程

那些可以科学上网的DNS和hosts,都是使用的自建或者公共SNI代理。

原理说明

SNI详细的我也不懂,假如你有一台 海外的服务器 IP为: 233.233.233.233 ,上面搭建了 SNI Proxy,并且配置正常并启动。

然后你本地Hosts文件在最后添加一条:

  1. 233.233.233.233 www.google.com

保存Hosts文件并打开浏览器访问 https://www.google.com ,然后你就会发现你可以进入 https://www.google.com 网站了。

原理解析:

  1. Hosts设置 233.233.233.233 www.google.com 后,浏览器访问 https://www.google.com  =>> 浏览器搜索Hosts文件发现设置的解析IP(233.233.233.233) =>> 浏览器访问 SNI Proxy(233.233.233.233) =>> SNI Proxy收到信息然后去访问 https://www.google.com 并获取网站数据,然后把网站数据原封不动的返回给你 =>> 浏览器收到 SNI Proxy返回的 网站数据并显示出来 =>> 你看到了 https://www.google.com 网页

简单的来说,SNI Proxy 会把请求的网站比如 https://www.google.com 获取并原封不动的返回请求者,不需要对证书进行解密和加密,所以不需要配置证书。

SNI Proxy 可以简单的实现这样的 反向代理功能。

安装环境

本教程只适用于 Ubuntu 14.04 + 以上版本的系统。

Debian 7 / 8 的安装方法请看随后的文章

安装步骤

  1. apt-get install python-software-properties software-properties-common -y
  2. add-apt-repository ppa:dlundquist/sniproxy

第二行代码执行后提示大概如下:

  1. root@ubuntu:~# add-apt-repository ppa:dlundquist/sniproxy
  2.  
  3. More info: https://launchpad.net/~dlundquist/+archive/ubuntu/sniproxy
  4. Press [ENTER] to continue or ctrl-c to cancel adding it
  5.  
  6. gpg: keyring `/tmp/tmpnr3gi1cx/secring.gpg' created
  7. gpg: keyring `/tmp/tmpnr3gi1cx/pubring.gpg' created
  8. gpg: requesting key ED122FA0 from hkp server keyserver.ubuntu.com
  9. gpg: /tmp/tmpnr3gi1cx/trustdb.gpg: trustdb created
  10. gpg: key ED122FA0: public key "Launchpad PPA for Dustin Lundquist" imported
  11. gpg: Total number processed: 1
  12. gpg: imported: 1 (RSA: 1)
  13. OK

继续安装

  1. apt-get update && apt-get install sniproxy -y

配置说明

SNI Proxy的默认配置文件:/etc/sniproxy.conf

vim的具体使用教程:Linux中VIM编辑器的真 · 简单使用教程

我们可以使用 VIM 等编辑器添加修改,也可以直接用 echo写入文件。

VIM操作简单说明(可选):

  1. echo "" > /etc/sniproxy.conf
  2. # 清空配置文件
  3. vi /etc/sniproxy.conf
  4. # 打开配置文件

然后按 I 键 进入编辑模式,复制下面的内容到配置文件中(手动把 echo -e "和 " > /etc/sniproxy.conf 去掉),然后按 Esc 键 推出编辑模式,然后输入 :wq 保存并退出vi。

下面是 echo 方式直接写入配置文件。

泛反向代理:

泛反向代理,指的是所有请求 SNI Proxy 的域名都会反向代理。

  1. echo -e "user daemon
  2. pidfile /var/run/sniproxy.pid
  3.  
  4. listen 443 {
  5. proto tls
  6. table https_hosts
  7. access_log {
  8. filename /var/log/sniproxy/https_access.log
  9. priority notice
  10. }
  11. }
  12. table https_hosts {
  13. .* *:443
  14. }" > /etc/sniproxy.conf

自定义反向代理:

自定义反向代理,指的是自己指定域名,只有通过这些域名请求 SNI Proxy 的才会反向代理。

比如只设置了 (.*.|)google.com$ * ,那么你只能通过www.google.com、google.com 和其他以 google.com 为主的二级 三级域名 访问SNI Proxy并请求反向代理。其他没有设置的域名都会忽略。

要反向代理什么域名就在 table https_hosts {} 中添加规则,例如 我要反向代理任何以 google.com 为主的二级 三级域名 ,那么就写:

  1. (.*.|)google.com$ *

这样只要是以 google.com 为主的域名都会被反向代理,比如www.google.com news.google.com mail.google.com 都会反向代理。

  1. echo -e "user daemon
  2. pidfile /var/run/sniproxy.pid
  3.  
  4. listen 443 {
  5. proto tls
  6. table https_hosts
  7. access_log {
  8. filename /var/log/sniproxy/https_access.log
  9. priority notice
  10. }
  11. }
  12. table https_hosts {
  13. .* *:443
  14. }
  15.  
  16. table https_hosts {
  17. (.*.|)google.com$ *
  18. (.*.|)google.com.hk$ *
  19. (.*.|)googlemail.com$ *
  20. (.*.|)googlecode.com$ *
  21. (.*.|)blogspot.com$ *
  22. (.*.|)gmail.com$ *
  23. (.*.|)youtube.com$ *
  24. }" > /etc/sniproxy.conf

使用说明

使用命令

  1. service sniproxy start
  2. # 如果运行无反应并没有启动,那么请直接使用 sniproxy 来启动试试
  3. # 启动SNI Proxy
  4.  
  5. service sniproxy stop
  6. # 停止SNI Proxy
  7.  
  8. service sniproxy restart
  9. # 重启SNI Proxy
  10.  
  11. service sniproxy status
  12. # 查看状态

启动SNI Proxy后,查看一下 网络连接端口监听情况:

  1. netstat -lntp

当出现大概如下所示的信息时,代表正常启动并监听端口443,注意最后的sniproxy。

  1. root@ubuntu:~# netstat -lntp
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp6 0 0 :::443 :::* LISTEN 11673/sniproxy

如果没有发现 sniproxy 的监听端口信息,那么看一下是否有其他的进程/服务 占用了 443 端口,如果有的话请关闭后再尝试启动 SNI Proxy。

如果没有异常情况,那么我们就可以使用 SNI Proxy 代理了。

运行优化说明

建议在运行 SNIProxy前,执行一下这个命令,作用是提高系统的文件符同时打开数量,对于TCP连接过多的时候系统默认的 1024 就会成为速度瓶颈。

  1. ulimit -n 51200

这个命令只有临时有效,重启后失效,如果想要永久有效,请执行:

  1. echo "* soft nofile 51200
  2. * hard nofile 51200" >> /etc/security/limits.conf

然后最后再执行一下 ulimit -n 51200 即可。

Hosts

找到你电脑的Hosts文件,并打开(注意Hosts可能是隐藏文件,需要设置显示出来,还有win10修改Hosts文件需要管理员权限)。

Windows xp / 7 / 10 系统Hosts位置:C:\windows\system32\drivers\etc\hosts

在最后一行添加你要反向代理的网站,比如 www.google.com

  1. 233.233.233.233 www.google.com

其他想要反向代理的域名按这个格式添加(233.233.233.233是你的SNI Proxy服务器IP),当然Hosts设置比较麻烦,而且比如 youtube.com 看视频的话要设置很多 Hosts域名,很麻烦,所以如果只是访问谷歌,那么可以使用这个Hosts方法.

-----------

系统要求

本教程只适用于 Debian7 / 8 系统,其他系统都不适用。

安装SNI Proxy依赖需要 最少150MB大小的空间,所以请确保你的系统硬盘空闲空间有 300MB。

简单说明

SNI Proxy 简单的来说是一个 反向代理软件,可以把你的请求原封不动的发送给指定网站,然后再把指定网站返回的数据原封不动的返回给你,目前网上可以 科学上网的Hosts和DNS,都是通过把 谷歌等域名指向 SNI Proxy代理的IP来实现“直连”访问谷歌的,所以在某种程度上,SNI Proxy承担一个流量数据搬运工的作用。

因为 Hosts和DNS科学上网,都必须使用 https 来访问,所以过程都是加密的,而SNI Proxy只会原封不动的把流量转发过去,所以不会去解密(也不能),也就不需要担心安全问题了。

SNI Proxy Github项目:https://github.com/dlundquist/sniproxy

安装步骤

安装依赖

首先为了确保依赖安装正常、完整,我们需要更换系统 软件包源为最新的稳定源 jessie (本步骤必做,否则很容易出错)。

默认下面的代码是 美国的镜像源,可以更换下面代码 us.sources.list 中的 us ,具体可以看这里

  1. rm -rf /etc/apt/sources.list && wget -N --no-check-certificate -O "/etc/apt/sources.list" https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/sources/us.sources.list

注意:这个更换 镜像源的步骤,Debian 8、Debian 9 不需要执行,可以直接跳过,Debian 7 必须执行!

然后我们更新软件包列表,并开始安装依赖

  1. apt-get update
  2. apt-get install autotools-dev cdbs debhelper dh-autoreconf dpkg-dev gettext libev-dev libpcre3-dev libudns-dev pkg-config fakeroot devscripts build-essential unzip -y
  3. # 安装依赖会很大,可能会有 100-300MB大小,所以一开始的镜像源一定要选近的,否则会很慢。
  1. # 在安装过程中可能会提示如下内容,选择 Yes 即可。
  2. ======================== Configuring libc6:amd64 ========================
  3. x ....... x
  4. x ....... x
  5. x Restart services during package upgrades without asking? x
  6. x x
  7. x Yes No x
  8. x x
  9. =========================================================================

安装SNI Proxy

  1. mkdir sniproxy && cd sniproxy
  2. # 新建一个 SNI Proxy文件夹并进入
  3.  
  4. wget -N --no-check-certificate https://github.com/dlundquist/sniproxy/archive/master.zip
  5. # 下载 SNI Proxy 最新软件包
  6.  
  7. unzip master.zip && cd sniproxy-master
  8. # 解压 SNI Proxy 软件包并进入解压后的文件夹
  9.  
  10. ./autogen.sh && dpkg-buildpackage
  11. # 开始构建 deb 包
  12.  
  13. sniproxy_deb=$(ls ..|grep "sniproxy_.*.deb") && echo ${sniproxy_deb}
  14. # 获取构建后的 deb 包的文件名,正常情况下会返回一个类似于 sniproxy_0.X.X_amd64.deb 这样的文件名
  15.  
  16. [[ ! -z ${sniproxy_deb} ]] && dpkg -i ../${sniproxy_deb}
  17. # 判断获取的文件名是否为空,如果不为空就 安装 deb 包。

最后安装完毕,我们可以用 sniproxy -V 来查看是否安装成功,正常情况下会返回版本号。

安装完毕之后,还需要配置一下配置文件,才能使用,具体看这个教程:一个 反代无需证书 适用于DNS/Hosts的小工具 —— SNI Proxy代理 安装教程

DNS服务搭建教程:

  1. 『原创』快速自建DNS服务器以 科学上网+屏蔽广告 —— dowsDNS 一键脚本
  2. Linux 使用 dowsDNS 快速自建DNS服务器以 科学上网+屏蔽广告
  3. Linux 自建DNS 并使用SNI Proxy实现科学上网 —— DNSmasq配置教程

使用说明

启动:/etc/init.d/sniproxy start(如果运行无反应并没有启动,那么请直接使用 sniproxy 来启动试试)

停止:/etc/init.d/sniproxy stop

重启:/etc/init.d/sniproxy restart

查看状态:/etc/init.d/sniproxy status

配置文件:/etc/sniproxy.conf

通过 dpkg -S sniproxy 命令可以查询 SNI Proxy 的所有安装文件。

运行优化说明

建议在运行 SNIProxy前,执行一下这个命令,作用是提高系统的文件符同时打开数量,对于TCP连接过多的时候系统默认的 1024 就会成为速度瓶颈。

  1. ulimit -n 51200

这个命令只有临时有效,重启后失效,如果想要永久有效,请执行:

  1. echo "* soft nofile 51200
  2. * hard nofile 51200" >> /etc/security/limits.conf

然后最后再执行一下 ulimit -n 51200 即可。

添加开机启动

  1. update-rc.d -f sniproxy defaults

取消开机启动

  1. update-rc.d -f sniproxy remove

卸载SNI Proxy

  1. apt-get remove --purge sniproxy

--------------------