使用VNet隧道中转来加密保护你的流量

原理

将流量加密为隧道流量进行转发。如果有现有两台vps A和B,将A发出的普通流量加密为隧道流量转发给B,B收到后将隧道流量解密为正常可识别流量并发送到指定的服务器和端口,通过隧道流量过墙。简单的认为:隧道就是在中转的基础上加了密。

所以实现隧道加密我们至少需要两台vps,一台安装隧道服务端,一台安装隧道客户端。ssr可以和服务端同处一个vps。

服务端

cd ~
mkdir tunnel && cd tunnel
wget --no-check-certificate https://www.mebi.me/room/zip/tunnel.zip
unzip tunnel.zip && chmod -R +x ./*

运行 ./server 即可开启服务端,但此命令在断开ssh后结束,所以我们可以使用这个命令保证服务端能在后台运行:

nohup ./server > /dev/null 2>&1 &

现在我们访问地址:ip:8081/resources/add_server.html 来设置服务端。点击添加按钮,一般前面不需要改动,最后一行填写ssr的ip和端口。如果你的ssr和服务端在同一台vps上,ip就是127.0.0.1。第一行的80端口,表示隧道服务端的通信端口为80。

客户端

cd ~
mkdir tunnel && cd tunnel
wget --no-check-certificate https://www.mebi.me/room/zip/tunnel.zip
unzip tunnel.zip && chmod -R + x ./*

安装方法和服务端一样,不过这里我们运行client脚本,为了保证客户端能在后台运行,我们需要命令:

nohup ./client > /dev/null 2>&1 &

现在开始配置客户端,访问地址:ip:8080/resources/add_client.html,点添加按钮,第一行的端口可以随意,比如我填12345;远端配置里的ip为刚才安装服务端的ip,端口为80。只要你仔细对比就能知道这里的对应关系。

这里的逻辑:先访问客户端的12345端口,vnet将流量加密成隧道流量转发给服务端,服务端通过80端口接收隧道流量并将其解密为普通流量,最后再将普通流量转发给ssr。一般服务端用国外vps搭建,客户端用国内vps搭建,服务端和ssr都在同一台vps上。在使用ssr的时候,只需要把ip改成客户端ip,端口改成设置的12345,其他不变。

NAT上搭建客户端

因为国内流量贵,很多人会购买NAT来降低成本,但是NAT给的端口数量有限,而客户端必须使用8080端口,所以在NAT上搭建需要用到端口映射。

有一类NAT商家给的端口可以自定义,我们可以直接在控制面板上用外网任意端口(一般只能大于10000)对应内网8080端口即可。比如我们选择外网22222端口对应内网8080端口,在浏览器中输入的地址就变成了
ip:22222/resources/add_client.html

还有一类NAT商家给的端口是固定的,这种情况我们就需要上面提到的端口映射。首先确保vps上装有firewall并且开启。如果没有请先安装:

Ubuntu/Debian

apt-get install firewalld -y

CentOS

yum install firewalld

开启路由转发

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

开启流量伪装

firewall-cmd --zone=public --permanent --add-masquerade

开放端口

这里我们假设22222端口映射8080端口

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=22222/tcp --permanent

然后把22222端口的流量转发给8080端口,其中192.168.1.1为内网ip,内网ip可以在商家的控制面板或使用命 ifconfig 查看。

firewall-cmd --add-forward-port=port=22222:proto=tcp:toaddr=192.168.1.1:toport=8080</span> --permanent

最后重新加载防火墙配置

firewall-cmd --reload

此时我们访问地址:ip:22222/resources/add_client.html,就可以配置客户端了。

说明:

  1. 客户端安装在国内服务器上,服务端安装自国外服务器上,如果弄错应该是没有效果的。隧道加密主要是降低流量的特征,如果流量被识别,大概率也只是封端口而不是ip,可以降低维护成本。
  2. vnet支持tcp和udp两种协议,但是vnet不是开源程序,不排除存在后门的可能性,使用前请仔细考虑。
  3. vnet有明显的缺点:如果脚本停止运行,所有的配置信息都会消失,需要再次配置。没有特别情况不要重启vps。
  4. 如果手动停止,使用命令:jobs -l 查看进程id并使用 kill -9 进程id 来停止vnet脚本程序。