本文介绍Vnet隧道使用方案
隧道简介
隧道是将两台服务器相连,加密传输数据。一个机器接收到流量加密成隧道流量发送给另一个,另一个机器接收隧道流量再解密之后发送到你指定的地址和端口,通过隧道流量过墙。
最近更新时间2020年7月20日,已对部分操作打补丁
比如用SS-r,端口和地址填a服务器的隧道接收端口和地址,a接收到流量加密一下发送给b服务器,b解密之后在把流量发到你的Ss-r服务器,等于b服务器代替你发送Ss-r流量。一般来说a在国内,b在国外。Ss-r服务器和b可以在一个服务器。
声明:本教程基于Centos7,程序加密,具体安全性未知,后门情况未知。
文件下载地址:https://www.isyunyi.com/download/linux/tunnel.zip
附带的说明文档:https://www.isyunyi.com/download/linux/vnet.pdf
如果教程对你比较困难,看右边一键脚本 >>> VNet隧道一键安装脚本
接收端设置
接收端叫server端,也就是服务端,通常是国外服务器,负责接收隧道流量然后解密并转发。
连接上VPS,首先我们确保服务器安装有zip和unzip,执行安装命令
yum -y install zip unzip
下载文件,然后解压缩,之后再赋予执行权限
wget -N --no-check-certificate "https://www.isyunyi.com/download/linux/tunnel.zip" && unzip tunnel.zip && chmod -R +x ./*
然后让程序后台运行
nohup ./server >> /dev/null 2>&1 &
此时建立一个web服务,在浏览器访问VPS的IP的8081端口的地址,比如:
服务器IP:8081/resources/add_server.html
会打开一个界面,点击添加按钮填写配置
如果打不开界面,可能是防火墙问题,请到文章底部查看防火墙设置
第一个远端地址填写的是监听地址,默认的不用管。端口示例12345,此端口任意,需与发送端对应
然后下面那个填写转发地址,就是接收到隧道流量解密之后发送到哪里。比如这个VPS本身搭建了一个8090端口的Ss-r,就转发到本地IP127.0.0.1的8090端口。(文章结尾会附上docker写法)
发送端设置
发送端叫做client,也就是客户端,通常是国内机,负责接收流量然后加密成隧道流量发送给服务端。
同样的,连接上VPS首先我们确保安装有zip和unzip
yum -y install zip unzip
然后下载文件,然后解压缩,之后再赋予执行权限,
wget -N --no-check-certificate "https://www.isyunyi.com/download/linux/tunnel.zip" && unzip tunnel.zip && chmod -R +x ./*
然后后台运行client
nohup ./client >> /dev/null 2>&1 &
此时web访问网址,注意是8080
服务器IP:8080/resources/add_client.html
添加配置
同样如果打不开页面请cha'k后面的防火墙设置
如图,主要修改本地配置的端口号,比如图中就是11080
。代表国内鸡使用端口
然后是远端配置,这个地方填写接收隧道流量vps的IP地址,端口随意但需要与接收端相同,这里就填12345
然后保存。
此时两个机器直接的隧道就建立起来了,此时大体流程就是你把流量发送到client端的12345端口,然后client通过隧道把流量发到server端,server端接收到隧道流量,还原成你发送的流量再发送到上图中指定的IP地址127.0.0.1的8090端口。隧道不是代理,只是提供流量传输。
CentOS7防火墙设置
首先关闭防火墙
systemctl stop firewalld
systemctl mask firewalld
然后启用iptables
yum install -y iptables
yum install iptables-services -y
设置规则并保存
iptables -F
iptables -P INPUT ACCEPT
iptables -X
service iptables save
NAT机发送端设置
NAT机共享IP,端口也不是独占所有,所以需要端口映射。
一般NAT机端口问题很好解决,一些主机上面板就能直接管理端口映射,所以此处就仅说一下直通端口的映射,也就是开出来机器,主机商直接给你固定的一些端口,这些端口和你的NAT机是直通的。
映射很简单,此处使用防火墙firewall来实现。可以参考我之前发布的firewall教程。
此处比如用22222的直通端口来实现访问8080端口的效果。
首先机器要有firewall并且开启,然后开启路由转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
生效路由转发
sysctl -p
开启流量伪装
firewall-cmd --zone=public --permanent --add-masquerade
开放端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=22222/tcp --permanent
然后把22222端口流量转发到8080端口
firewall-cmd --add-forward-port=port=22222:proto=tcp:toaddr=192.168.1.136:toport=8080 --permanent
此处的192.168.1.136是NAT的内网IP地址,NAT都会有这个。
然后重新加载防火墙配置
firewall-cmd --reload
此时我们访问22222端口,firewall会把流量发到8080端口,所以访问22222端口等同于访问8080端口。
SSPANEL前端设置
请确保已经安装好单端口承载和偏移
端口偏移至发送机端口,如文章示例的11080,如果承载端口是80。则填写在描述页或地址页#11000
Docker SSR后端配置
以示例的8090端口,承载80为数据
docker run -d --name=容器名称 -e NODE_ID=节点ID -e API_INTERFACE=modwebapi -e WEBAPI_URL=节点地址 -eSPEEDTEST=0 -e WEBAPI_TOKEN==对接密钥 --log-opt max-size=50m --log-opt max-file=3 -p 80900:80/tcp -p 8090:80/udp --restart=always stone0906/ssrmuv2
此部分可查看通过Docker部署端口偏移详解,如果启动失败,请重启服务器再运行
安全部分
细心的小伙伴可能发现了,访问发送端和接收端是无需验证的。这也就意味着只要知道我们的IP谁都可以访问。
我们可以在设置完成后通过关闭端口的方式保证安全。
接收端(国外)关闭8081
iptables -A INPUT -p tcp --dport 8081 -j DROP
发送端(国内)关闭8080
iptables -A INPUT -p tcp --dport 8080 -j DROP
如果国内用的NAT,则关闭对应端口,比如11080
iptables -A INPUT -p tcp --dport 11080 -j DROP
如果要启用端口,在两台服务器上均执行清除规则命令
iptables -F
备注
无论发送端还是接收端,服务器重启后均会丢失数据。
意味着每次我们重启服务器都需要重新启动服务
发送端(国内)
nohup ./client >> /dev/null 2>&1 &
接收端(国外)
nohup ./server >> /dev/null 2>&1 &
且每次重启都需要重新添加规则,所以,尽量不要重启服务器。
Tg群:@yunyiya
感谢名单
本文部分内容(NAT部分)引用Yi博客(https://evlan.cc/archives/vnet-tunnel.html
)
安装部分引用原文作者徐嫦曦(https://github.com/rc452860
)
服务器防火墙部分引用小黑:(https://t.me/xiaohei2333
)
如果引用部分涉及侵权,请联系我们。
已有 34 条评论
请问可以中转http/socks代理吗
可以的,VNET只是将数据转发至IP:端口
是可以转发任意软件的,但是具体我没有测试过
大神,我这边sspannel承载用户、承载节点、端口偏移都弄好了,直连节点也没问题,不过通过tunnel走隧道的话会报错,错误信息如下:WSServer2020/06/09 16:11:38 ws_server.go:83: 获得链接成功
WSServer2020/06/09 16:11:38 ws_server.go:105: 接收到TCP链接请求
WSServer2020/06/09 16:11:38 ws_server.go:131: 建立后端链接成功
WSServer2020/06/09 16:11:38 ws_server.go:160: 复制错误: read tcp 127.0.0.1:27198->127.0.0.1:2211: read: connection reset by peer
就是在接收端接收到请求后转发到自己的2211端口,报复制错误。。。
恳请大神帮忙解决。。万分感谢
直连节点 接收端:2211可以连接吗?27198和2211端口是否为开启状态?
问个小白问题,怎么远程连接上nat机……
我在cloudiplc买了一台nat机,ping了一下ip都是超时的,更别提远程连接上,然后做一堆操作了。
NAT机器与普通机器连接并无区别,只是ssh端口通常不是22,而是其他端口映射至22.
比如IP:10000
我好多台机器都有用,唯独一台CentOS7.7的1C256NAT装了也没用,不知道是为什么。。。。
NAT检查防火墙,通常是防护墙问题
大佬,为什么同样的操作在nat和普通vps结果不一样,普通vps可以连接,国内nat显示绿色也可以ping通却无法连接,nat已经关了防火墙,也在后台开启了端口,就是无法连接?
您遇到过这样的问题吗?
通常还是防火墙问题,进行端口扫描,看一下端口是否开放状态。
还想问一下,这个是不是可以转发客户端真实ip,iptables中转好像不可以
有没用相关的教程呢
不好意思,我没有理解你所说的真实IP指什么
就是客户端源ip,如果iptables中转,客户端数量限制和速率限制就失效了。
vnet好像也会
好东西,稳得不得了,比HaProxy,IPTables之类的直接TCP转发好用得多
大佬这样搞隧道的意义是什么,比直接连境外的机器速度快,还是说这样搞不容易导致境外的那台被墙
从国内到国外的流量会经过ws隧道,不再是代理流量。可以有效避免封锁,而且可以优化链路质量。
机场之前是 多端口多用户, 现在怎么用 单端口多用户啊? 添加节点就报错。
参照单端口多用户教程
安装你得教程成功安装,节点以上线, 但就是节点无法用, 不动错在哪一步。。 心碎
那也是通过S/S-R连接客户端吗?
是的,还是通过SSR连接
那问题来了,s-sr是连接客户端还是连接服务端
如果s-sr不连接客户端,客户端如何接收s-sr的数据发送到服务端
如果s-sr不连接服务端,那如何接收客户端向服务端发送的数据再转发到s-sr上的数据
所以问题是,s-sr到底是连接客户端还是服务端,
问题不在这里,如果你仔细看就能理解其中原理。S/S-R安装在服务端,连接通过客户端进行连接。
这其中的原理其实很简单,你连接客户端-客户端通过隧道与服务端相连-服务端安装S/S-R
这其中客户端和服务端并没有特别大的区别,建立隧道连接后对所有数据进行加解密操作。由此,你通过客户端发送和接受到服务端的内容是隧道负责加密的。
你连接客户端--隧道--服务端S/S-R
感谢分享
太不稳定了,用2天就连不上了,重起端甚至重启电脑重新配置都不行,不知道什么问题
一般是防火墙问题,另外重启后会丢失数据,重新配置时一定要确保所有数据均正确。
使用多次之后udp就连不上了,大佬知道怎么回事吗
我偶尔也有连不上UDP的问题,没有细致检查
感谢谢大佬的教程
更应该感谢原作者,我只是将教程整理补充。
看了还是不会怎么办,大佬要不出个视频...
视频教程太啰嗦了,哪一部分不懂可以回复交流一下
这不是胖虎发的那个吗
就我所知的相关作者都引用了,且作者文件是公开文件。