8

Centos 下安装 SNIProxy 实现 hosts 代理

Posted by 撒得一地 on 2017年5月18日 in 杂谈

你是否经常使用 hosts 进行科学上网,一般来说为了访问安全和数据隐私,hosts 里面的ip都是官网未被屏蔽的 ip ,比如谷歌、脸书等。不过像 u2b 网站,因为每个视频解析地址都不一样,而且每个地址要找到没被墙的 ip 本身就已经非常困难,所以通过修改 hosts 一般来说是看不了 u2b 视频的(ipv6除外)。现在一些 hosts 之所以能看油管视频就是因为使用的是代理 ip 。

现在有一些 hosts ,里面的 ip 并非官网的 ip ,而是代理ip。下面介绍在 Centos 下如何通过 SNI Proxy 代理搭建 hosts 代理 ip 。在搭建之前先了解下原理。

原理说明

SNI Proxy 类似于一个反向代理软件,可根据域名转发,且 https 使用的原始 ssl 证书。假设你有一台海外 vps ,该 ip 为 45.3.3.3,上面已经安装了 SNI Proxy,配置好后并成功启动。然后在你电脑本地的 hosts 文件下,添加了一条解析记录:

	45.3.3.3  www.google.com

这时候你在浏览器访问 https://www.google.com 便能正常访问谷歌页面。这其中的解析过程大致如下:

你在浏览器上输入 www.google.com  =》 浏览器查看本地 hosts 文件,发现里面有对应的 dns 解析记录(45.3.3.3 www.google.com),浏览器便把请求数据发送给 45.3.3.3 这台 vps =》 vps 上的 SNI Proxy 监听本地端口,把收到请求数据转发给 https://www.google.com  =》 https://www.google.com 收到请求后把响应结果再返回给 SNI Proxy =》 SNI Proxy 最后将响应数据原封不动的返回给你 =》 你在浏览器上看到了正确的结果。

从上面可以看出,SNI Proxy 可以直接代理 https 数据(无需安装 ssl 证书),扮演着流量中转的功能。

功能介绍

支持代理 https ,无需解密流量(一般也解密不了),不需要密钥或证书,

支持 TLS 和 HTTP 协议,

支持后端服务器和监听器的 IPv4,IPv6 和 Unix 域套接字,

支持多个监听套接字。

Centos 下安装 SNI Proxy

安装一些开发工具

	yum -y install unzip wget

	yum -y groupinstall "Development tools"

	yum -y install pcre-devel pcre

安装辅助包libev4:

	wget http://dist.schmorp.de/libev/Attic/libev-4.19.tar.gz

	tar zxvf libev-4.19.tar.gz

	cd libev-4.19

	./configure -prefix=/usr/local/libev4

	make

	make install

安装辅助包udns,不装这个的话,sniproxy无法对*泛域名解析.

wget http://archive.ubuntu.com/ubuntu/pool/universe/u/udns/udns_0.4.orig.tar.gz

tar zxvf udns_0.4.orig.tar.gz

cd udns-0.4
	
./configure
	
make
	
cd ..
	 
mv udns-0.4 /usr/local/udns

装sniproxy,注意,autogen.sh的时候会报错,那是debian的错,忽略

wget https://github.com/dlundquist/sniproxy/archive/master.zip

unzip -x master.zip

cd sniproxy-master/

export CFLAGS='-I/usr/local/libev4/include -I/usr/local/udns'

export LDFLAGS='-L/usr/local/libev4/lib -L/usr/local/udns'

export LD_LIBRARY_PATH=/usr/local/libev4/lib:$LD_LIBRARY_PATH

./autogen.sh

./configure -prefix=/root

make

make install

这样sniproxy就装到了/root/sbin/sniproxy,建立一个配置文件:
vi /etc/sniproxy.conf 把一下内容编辑进去:

	user nobody
	resolver {

	    #指定 dns 服务器
	    nameserver 8.8.8.8
	       

	   # * ipv4_only   query for IPv4 addresses (default)

	   # * ipv6_only   query for IPv6 addresses

	   # * ipv4_first  query for both IPv4 and IPv6, use IPv4 is present

	   # * ipv6_first  query for both IPv4 and IPv6, use IPv6 is present

	  #对于解析的域名只返回 ipv4 的地址
	  mode ipv4_only
	}

	#监听 80 端口的请求数据,即 http
	listen 80 {
	proto http
	table http_hosts

	access_log {
	  filename /var/log/https_access.log
	  priority notice
	 }
	}

	#所以 http 请求都进行转发
	table http_hosts {
	.* *:80
	}

	#监听 443 端口,即 https 
	#这里指定 vps 的ip 代表只监听 ipv4
	#这里如果不指定ip,默认监听 ipv6
	listen 45.3.3.3:443 {
	proto tls
	table https_hosts
	access_log {
	  filename /var/log/https_access.log
	  priority notice
	 }
	}

	#对于 https 只转发以下指定的泛域名数据 
	table https_hosts {
	 (.*.|)google.com$ *
	 (.*.|)google.com.hk$ *
	 (.*.|)googlemail.com$ *
	 (.*.|)googlecode.com$ *
	 (.*.|)blogspot.com$ *
	 (.*.|)gmail.com$ *
	 (.*.|)youtube.com$ *
	 (.*.|)baidu.com$ *
	}

上面配置文件中的 table https_hosts {} 用来往里面添加指定域名,只有这些指定的域名才通过 SNI Proxy 进行反向代理。其中 (.*.|)google.com$ * ,表示只有 www.google.com、google.com 和其他以 google.com 为主的二级或三级域名访问 SNI Proxy 才进行反向代理。

启动 SNI Proxy

	/root/sbin/sniproxy -c /etc/sniproxy.conf 

输入 ps -ef | grep sniproxy 看一下,进程在就说明启动成功了,如:

查看 sniproxy 启动进程

也可以通过 netstat -ntlp 查看 sniproxy 是否正常监听 80 和 443 端口。比如:

查看sniproxy监听端口

注意:以后如果重新开机,需要再启动 sniproxy,要把上面的 export 语句执行一下:export LD_LIBRARY_PATH=/usr/local/libev4/lib:$LD_LIBRARY_PATH
否则找不到库,无法启动,会报以下错误 : 

	/root/sbin/sniproxy: error while loading shared libraries: libev.so.4: cannot open shared object file: No such file or directory

如果开启了iptables,要记得开启80和443端口,执行下面语句:

	#开放80和443端口给sniproxy用
	iptables -I INPUT -p tcp --dport 443 -j ACCEPT
	iptables -I INPUT -p tcp --dport 80 -j ACCEPT

当然测试成功的话。记得保存防火墙规则。

然后在 hosts 中把需要科学上网的地址指向我们的 sniproxy 服务器即可。一份完整的英文配置文件可以参考 sniproxy-master 目录下的 sniproxy.conf。

参考: https://smileawei.com/centos-sniproxy/

https://doub.io/wlzy-34/

https://doub.io/wlzy-27/

上一篇:

下一篇:

相关推荐

8 Comments

Comments are closed. Would you like to contact the author directly?
网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.