前言
sniproxy是一个基于sni的代理,通过sniproxy可以简单的实现反向代理。
安装
目前sniproxy已经进入debian的测试源,可以通过apt
安装,当然也可以编译安装。
apt安装
首先在本地源列表里面添加测试的源。
添加源,编辑sources.list文件,vi /etc/apt/sources.list
,添加以下内容。
deb http://httpredir.debian.org/debian buster main
安装sniproxy,首先要检查更新,然后再安装
apt update apt install sniproxy
编辑sources.list文件,删除测试源,然后再次检查更新,防止以后安装到测试版的软件。
sed -i '/buster/d' /etc/apt/sources.list apt update
编译安装
这里还可以编译安装。
sudo apt-get install autotools-dev cdbs debhelper dh-autoreconf dpkg-dev gettext libev-dev libpcre3-dev libudns-dev pkg-config fakeroot devscripts git -y git clone https://github.com/dlundquist/sniproxy cd sniproxy ./autogen.sh ./configure make make install touch /etc/sniproxy.conf mkdir log
设置开机启动脚本,vi /etc/systemd/system/sniproxy.service
[Unit] Description=sniproxy servier After=network.target [Service] ExecStart=/usr/local/sbin/sniproxy -c /etc/sniproxy.conf -f Restart=always [Install] WantedBy=multi-user.target
设置开机启动
systemctl enable sniproxy
设置sniproxy
安装完成之后需要对其进行设置。
echo "" > /etc/sniproxy.conf # 清空配置文件
泛反向代理:
泛反向代理,指的是所有请求 SNI Proxy 的域名都会反向代理。
echo -e "user daemon pidfile /var/run/sniproxy.pid listen 443 { proto tls table https_hosts access_log { filename /root/sniproxy/log/https_access.log priority notice } } table https_hosts { .* *:443 }" > /etc/sniproxy.conf
自定义反向代理:
自定义反向代理,指的是自己指定域名,只有通过这些域名请求 SNI Proxy 的才会反向代理。
比如只设置了(.*.|)google.com$ *
,那么你只能通过www.google.com、google.com 和其他以 google.com 为主的二级 三级域名
访问SNI Proxy并请求反向代理。其他没有设置的域名都会忽略。
要反向代理什么域名就在table https_hosts {}
中添加规则,例如,我要反向代理任何以google.com 为主的二级 三级域名
,那么就写:
(.*.|)google.com$ *
这样只要是以google.com
为主的域名都会被反向代理,比如www.google.com news.google.com mail.google.com
都会反向代理。
echo -e "user daemon pidfile /var/run/sniproxy.pid listen 443 { proto tls table https_hosts access_log { filename /var/log/sniproxy/https_access.log priority notice } } table https_hosts { .* *:443 } table https_hosts { (.*.|)google.com$ * (.*.|)google.com.hk$ * (.*.|)googlemail.com$ * (.*.|)googlecode.com$ * (.*.|)blogspot.com$ * (.*.|)gmail.com$ * (.*.|)youtube.com$ * }" > /etc/sniproxy.conf
使用说明
使用命令
systemctl start sniproxy # 如果运行无反应并没有启动,那么请直接使用 sniproxy 来启动试试 # 启动SNI Proxy systemctl stop sniproxy # 停止SNI Proxy systemctl restart sniproxy # 重启SNI Proxy systemctl status sniproxy # 查看状态
启动SNI Proxy后,查看一下 网络连接端口监听情况:
netstat -lntp
netstat存在于net-tools里面
当出现大概如下所示的信息时,代表正常启动并监听端口443,注意最后的sniproxy。
root@debian:~# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 :::443 :::* LISTEN 11673/sniproxy
如果没有发现 sniproxy 的监听端口信息,那么看一下是否有其他的 软件/服务 占用了 443 端口,如果有的话请关闭后再尝试启动 SNI Proxy。
如果没有异常情况,那么我们就可以使用 SNI Proxy 代理了。
运行优化说明
建议在运行 SNIProxy前,执行一下这个命令,作用是提高系统的文件符同时打开数量,对于TCP连接过多的时候系统默认的 1024 就会成为速度瓶颈。
ulimit -n 51200
这个命令只有临时有效,重启后失效,如果想要永久有效,请执行:
echo "* soft nofile 51200 * 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
233.233.233.233 www.google.com
其他想要反向代理的域名按这个格式添加(233.233.233.233是你的SNI Proxy服务器IP),当然Hosts设置比较麻烦,而且比如youtube.com
看视频的话要设置很多 Hosts域名,很麻烦,所以如果只是访问谷歌,那么可以使用这个Hosts方法。
dns
dnsmasq搭建自己的DNS服务器
参考链接:
https://doub.io/wlzy-27/
https://github.com/dlundquist/sniproxy