VPS 搭建简单加速器
一、准备工具软件
-
udp2raw。将UDP伪装成TCP或者ICMP,不同于UDP over TCP,其本质上还是UDP,另外不会处理TCP数据包。
-
tinyfecVPN。工作在网络层的双边网络加速工具,可以加速全流量(TCP/UDP/ICMP),输出流量类型为UDP。
-
tinyPortMapper。将远程的UDP与TCP端口同时映射到本地。
-
SSTAP。控制本机路由,转发数据包。
-
可以转发UDP的不可描述的代理软件。就是那种软件,简单的Socks代理也可以。
上述前三个软件开发者都为同一人,最新版本可以前往开发者Github主页下载。软件更多功能及参数介绍可以去主页相应软件项目下的wiki查看
下文介绍的命令参数请根据自己实际情况进行替换
二、整体结构
-
首先,本地电脑跟远程服务器建立起udp2raw隧道连接
-
然后,在udp2raw隧道中建立本地与服务器的tinyfecVPN连接,tinyfecVPN的UDP流量通过udp2raw进行流量伪装
-
在本地与远程服务器建立好连接之后,使用tinyPortMapper将远程服务器上代理软件的端口映射到本地(包括TCP跟UDP)
-
最后,在电脑上使用SSTAP连接映射到本地的代理端口
三、服务端搭建
以下命令都是基于amd64位架构,路径跟文件名根据实际替换
3.1 tinyfecVPN
tinyfecVPN服务监听在服务器8855端口:
./tinyvpn_amd64 -s -l 127.0.0.1:8855 --sub-net 10.222.2.0 --tun-dev tun100 --report 10 -k "yourpassword" -f2:2 --timeout 0
-
-s
以服务端模式运行 -
-l
服务端监听端口 -
--sub-net
指定子网 -
--tun-dev
指定tun设备名称 -
--report
打开发送/接收报告并设置报告周期,单位:秒 -
-k
指定一个字符串,开启简单的异或加密 -
-fx:y
每x个数据包发送y个冗余包,决定消耗流量的倍数,比如-f20:10
是消耗1.5倍流量,-f2:2
则是每2个数据包发送额外2个冗余包,合计发送出4个数据包,最多允许丢包2个。 -
--timeout
其值决定允许的最大延迟,UPDSpeeder会尝试积攒t毫秒的数据包一起做FEC,这个过程会引入额外的延迟
如果你的线路丢包率很低,那么可以将-f2:2
和--timeout 0
参数替换为--disable-fec
即关闭冗余发包,这样也不会出现额外的延迟,但失去了抗丢包能力,不推荐
如果相同时节省一点流量,可以将-f2:2
和--timeout 0
参数替换为-f2:2
和--timeout 1
,--timeout 1
可以更好的控制流量,稳定2倍流量,相对于--timeout 0
延迟增加约为2ms。如果线路非常好,那可以将-f2:2
替换成-f2:1
,即每3个数据包允许丢包1个,消耗1.5倍流量
3.2 udp2raw
将udp2raw设定成伪装icmp模式
./udp2raw_amd64 -s -l 0.0.0.0:1000 -r 127.0.0.1:8855 --raw-mode icmp --cipher-mode none -a -k "yourpassword"
-
-s
以服务端模式运行 -
-l
服务监听位置(ip:port
)。在和 udp2raw 客户端连接时有用,虽然icmp没有端口的概念,但是这个参数依然不可省略。 -
-r
远程服务位置(ip:port
)。接收客户端的流量解密后转发的位置,这里接收的就是tinyfecVPN发来的流量 -
--raw-mode
伪装的流量类型。可选值为facetcp
、icmp
和udp
-
--cipher-mode
加密模式。如果代理软件已经进行过传输加密,那么这里就不需要加密,减少性能损耗,这里选择none
-
-a
自动添加/删除iptables规则 -
-k
口令
四、客户端搭建
udp2raw现在已经有了Windows客户端,可以去Github主页相应项目下下载。本文使用的是虚拟机方式,网络为桥接模式。以下操作均在虚拟机中进行。
4.1 udp2raw
./udp2raw_amd64 -c -r YOUR_SERVER_IP:1000 -l 127.0.0.1:8855 --raw-mode icmp --cipher-mode none -a -k "yourpassword"
-
YOUR_SERVER_IP
远程服务器的IP地址 -
-c
以客户端模式运行 -
-r
udp2raw远程服务端(ip:port
)。连接到udp2raw服务端 -
-l
客户端本地监听地址(ip:port
),相当于将远程服务器的端口地址映射到了这里 -
-k
口令,需要与服务端相同
其他参数含义与上文服务端相同。
4.2 tinyfecVPN
./tinyvpn_amd64 -c -r 127.0.0.1:8855 --sub-net 10.222.2.0 --tun-dev tun100 --keep-reconnect --report 10 -k "yourpassword" -f2:2 --timeout 0
-c
以客户端模式运行-r
上述udp2raw客户端本地监听地址(ip:port
)。--sub-net
指定子网,跟服务端一致--tun-dev
指定tun设备名称--report
打开发送/接收报告并设置报告周期,单位:秒-k
口令,需要跟服务端相同-fx:y
同服务端--timeout
同服务端
至此,就建立好了服务端到客户端的连接。
4.3 tinyPortMapper
假定远程服务器端12345端口有不可描述的代理服务:
./tinymapper_amd64 -l0.0.0.0:1080 -r10.222.2.1:12345 -t -u
-
-l
本地监听地址端口。远程服务器端口将映射到此端口。本地电脑代理直接连接此地址 -
-r
映射的远程地址端口。这里的地址为tinyfecVPN子网中的IP地址。 -
-t
转发TCP -
-u
转发UDP
至此,搭建完成。本地电脑使用代理软件连接tinyPortMapper映射的地址端口就可以使用,实际地址就是虚拟机在本地局域网中的IP加上述命令中的端口号,即虚拟机局域网IP:1080
。