,文章

debian9安装sniproxy,无需证书的反向代理

  编辑于:2018-04-25
文章目录

前言

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

发表回复