为什么用stunnel来做翻墙,基本上我目前都是使用v2ray,但家里路由器性能不太好,用来跑v2ray除了慢也不稳定,在工作的外地有一台自己的nas同时也是路由器,日常都跑着v2ray,所以就考虑其他软件来替代一下家里路由器的v2ray,经过各种测试之后,stunnel的综合性能和稳定性还可以,于是用zerotier做了内网穿透,用stunnel来加密外网的socks5代理,再配合kumasocks配合来做透明代理。zerotier非必须,如果有公网IP的话可以做动态域名,然后做端口转发也可实现同样的功能。
先说下基本的使用环境:
nas上跑了docker、openwrt路由等,题外话:目前本站就运行在这个nas的debian docker上,通过外网反代,同样是用zerotier做内网穿透。
内网IP:172.16.22.2
通过zerotier推送了静态路由,家里的openwrt路由器可以直接访问这个内网IP。
在debian docker上安装stunnel4.
apt update && apt install stunnel4 -y
生成证书
cd /etc/stunnel
openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem
创建配置文件,几个参数说明下,v2ray的socks5代理端口为本机1080,stunnel的连接端口为10800。
cat >/etc/stunnel/stunnel.conf <<eof
syslog=no
debug=7
output=/var/log/stunnel.log
pid=/var/run/stunnel.pid
cert=/etc/stunnel/stunnel.pem
key=/etc/stunnel/stunnel.pem
client=no
[socks5]
accept=10800
connect=127.0.0.1:1080
eof
启动服务
/etc/init.d/stunnel4 restart
服务器配置完毕,接下来是家里路由器的配置,路由器为openwrt系统,opkg官方源自带stunnel,所以也很简单了。
opkg update && opkg install stunnel
将服务器的stunnel.pem传输到路由器相同目录下,再创建客户端配置文件。
cat >/etc/config/stunnel <<eof
config globals 'globals'
#option alt_config_file '/etc/stunnel/stunnel.conf'
option setuid 'nobody'
option setgid 'nogroup'
config service 'dummy'
option enabled '1'
option client '1'
option accept_host 'localhost'
option accept_port '10800'
list connect '172.16.22.2:10800'
eof
/etc/init.d/stunnel enable
/etc/init.d/stunnel restart
到这里stunnel的配置就基本结束了,本地的10800可以做为内网的socks5代理,再配合kumasocks就可以转换成透明代理。
补充一下,我路由器上还是跑了v2ray,不过只跑了dokodemo-door服务用来解析dns。
说一下前后的性能对比。
之前是直接在路由器上跑v2ray,当达到1~2mb/s上下的时候路由器负载异常的高,同时v2ray经常性崩溃。
换成这个方案之后,跑到2~4mb/s,负载比之前降低了很多,最重要是进程不崩溃。
v2ray由于只用于dns解析,所以也非常稳定了。
没明白,两个路由通过zerotier内网的数据不安全吗?还需要套个stunnel?
当时只考虑找个加密的socks代理,一开始都没有考虑zerotier。
评论测试