tinyFecVРN,集成了 UDPspeeder 功能的 VРN,可以加速全流量(TCP/UDP/ICMP),开源项目
之前发的 UDPspeeder 加速全流量比较麻烦(需要配合 OpenVРN),现在我把 UDPspeeder 的功能做成 VРN 了,一个程序就可以加速全流量,使用起来更简单。
repo: https://github.com/wangyu-/tinyFecVPN
中文主页: https://github.com/wangyu-/tinyFecVPN/blob/master/doc/README.zh-cn.md
编译好的 binary 下载: https://github.com/wangyu-/tinyFecVPN/releases
只要两行命令:
# 在 server 端运行:
./tinyvpn -s -l0.0.0.0:5533 -f20:10 -k "passwd" --sub-net 10.22.22.0
# 在 client 端运行:
./tinyvpn -c r44.55.66.77:5533 -f20:10 -k "passwd" --sub-net 10.22.22.0
然后在 client 端ping 10.22.22.1
,直接就可以 ping 通了。用 10.22.22.1 就可以直接访问到 server 上的所有服务了,所有经过 tinyFecVРN 的来回的流量都会被加速。
(借用了 UDPspeeder 的图)
目前在 release 版的代码里故意引入了一点限制,只可以当加速器用,不能直接用来“翻出去”。
附上原理简介和性能测试
主要原理是通过冗余数据来对抗网络的丢包,发送冗余数据的方式支持FEC(Forward Error Correction)和多倍发包,其中FEC算法是Reed-Solomon。
原理图:
细节请看UDPspeeder的repo,或者UDPspeeder在V2EX上的原帖,这里不再重复。
server 在 vulr 日本,CPU2.4GHz,内存 512mb。client 在搬瓦工美国,CPU 2.0GHZ,内存 96mb。在网路间额外模拟了10%的丢包(双向),用于加重FEC算法的负担。
在server端:
./tinyvpn_amd64 -s -l 0.0.0.0:5533 --mode 0 --sub-net 10.22.22.0
iperf3 -s
在client端:
./tinyvpn_amd64 -c -r 45.76.100.53:5533 --mode 0 --sub-net 10.22.22.0
iperf3 -c 10.22.22.1 -P10
程序支持动态改变FEC的冗余度而不断线,具体可以看--fifo选项。
tinyFecVРN跟kcptun/finalspeed/BBR 等现有方案比,主要区别是可以加速 UDP 和 ICMP,现有方案几乎都只能加速 TCP。一般加速游戏必须用到UDP。
跟UDPspeeder比,主要是使用起来更简单。
1
jhytxy 2017-10-29 11:11:14 +08:00 via iPhone 8
搞了这种东西就别遮遮掩掩了
不是说你自己阉一刀老爷就不来找你麻烦了 |
2
Loyalsoldier 2017-10-29 11:23:49 +08:00
话说是否可以实现自动检测网络质量,由此自动调整多倍发包的比例?
|
3
wangyucn OP >话说是否可以实现自动检测网络质量,由此自动调整多倍发包的比例?
这是个好主意,目前还没实现。 不过,我提供了在程序运行中动态改变码率的接口(见--fifo 选项),你可以自己用脚本统计丢包率,然后用 fifo 通知 tinyFecVРN 变换码率。 |
4
Bluef0x 2017-10-29 11:30:12 +08:00 via iPhone
怎么配合酸酸用?
|
6
0987363 2017-10-29 11:35:00 +08:00 via iPhone
udp 真的要看墙心情, 几年前墙就支持屏蔽未知流量端口。
|
7
wangyucn OP > udp 真的要看墙心情, 几年前墙就支持屏蔽未知流量端口。
搜一下 udp2raw,可以完美解决 udp 被限速的问题。 |
8
wangyucn OP >udp 真的要看墙心情, 几年前墙就支持屏蔽未知流量端口
一般做 udp 限速的是本地运营商,墙只是背锅了。我这边到同一个服务器,本地的移动有问题,北京联通没问题。 |
9
luolufang 2017-10-29 11:56:39 +08:00 via Android
我也觉得没必要自己砍一刀,国内使用也没必要上 udp
|
10
wangyucn OP >国内使用也没必要上 udp
加速游戏必须要用到 UDP。 |
11
work1949 2017-10-29 12:07:14 +08:00 via Android
支持转发吗
|
13
paul1729 2017-10-29 12:10:30 +08:00
想问下这个 VPN 是不是多线程的?然后吞吐量怎么样?
|
14
wangyucn OP >想问下这个 VPN 是不是多线程的
这个 VPN 是单线程+epoll 实现的。 >然后吞吐量怎么样? 附上在两个单核小鸡上的性能测试,server 在 vulr 日本,CPU2.4GHz,内存 512mb。client 在搬瓦工美国,CPU 2.0GHZ,内存 96mb。 在关闭 FEC 的情况下测 tinyFecVРN 本身的性能: [SUM] 0.00-10.00 sec 125 MBytes 105 Mbits/sec 794 sender [SUM] 0.00-10.00 sec 122 MBytes 102 Mbits/sec receiver 开启 FEC 后,性能受制于 Reed solomon 库,不同参数的性能有很大区别。 对于默认的 FEC 参数,每 20 个包额外发 10 个冗余包: [ 4] 0.00-10.00 sec 66.2 MBytes 55.5 Mbits/sec 114 sender [ 4] 0.00-10.00 sec 65.8 MBytes 55.2 Mbits/sec receiver |
15
wangyucn OP @paul1729
用 iperf3 -P10 去压,压榨出了更多的性能。 默认 FEC 参数下的性能: [SUM] 0.00-10.00 sec 88.9 MBytes 74.6 Mbits/sec 0 sender [SUM] 0.00-10.00 sec 85.5 MBytes 71.7 Mbits/sec receiver |
16
bjhyyc 2017-10-29 12:42:48 +08:00
是钓鱼吗?
|
17
zlfzy 2017-10-29 12:43:20 +08:00
不是很懂,先收藏一下
|
18
pisser 2017-10-29 12:47:14 +08:00
nores 哈哈!
|
19
Pigbird 2017-10-29 12:59:18 +08:00 via Android
大佬,对于联通广州出口这种大姨妈你这个能起到治疗效果么
|
20
nerozhu 2017-10-29 13:01:31 +08:00
大佬。用这个加速游戏可以稳定不?
|
21
anyele 2017-10-29 13:07:25 +08:00
之前就觉得 UDPspeeder 配置比较麻烦, 现在支持一下
|
22
wangyucn OP >大佬。用这个加速游戏可以稳定不?
这个最初就是为了加速游戏设计的,最拿手的就是加速游戏了。我自己用来加速美服的 brawl stars 和亚服的 mobile legend,从卡得没法玩,到几乎不卡。 |
24
Liqianyu 2017-10-29 13:33:15 +08:00
|
25
myliyifei 2017-10-29 13:45:19 +08:00
@wangyucn 不论是什么服务,你只要在本地用 10.22.22.1 这个 ip 去访问,就会被加速了。
那就是本地 windows 还要配一个 NAT 服务了?或者写路由指向这一条? |
26
shaoshuang 2017-10-29 13:47:17 +08:00
实测了下,韩国的机房
只开启了 BBR,看 4K 可以在 30-40M 使用了 tinyFecVРN 的情况下( MAC 酸酸乳--本地 Ubuntu 虚拟机 tinyFecVPN 客户端--服务器 tinyFecVPN 服务端--酸酸乳),看 4K 只能在 4-5M 可能是我打开方式不对 |
27
wangyucn OP @shaoshuang
youtube 那个只是带宽估计,实际上他并不会发送 30mbps 的数据来测试,不准确。 建议用 iperf3 或者 scp 用真实流量来测试 另外 bbr 已经很牛了,如果你只需要加速 tcp,又对延迟要求不高,只用 bbr 就够了 |
28
shaoshuang 2017-10-29 13:57:29 +08:00 via iPhone
@wangyucn 感谢回复明白了
|
29
wangyucn OP |
30
wangyucn OP |
31
wangyucn OP >是不是对不丢包的网络没用?
对于绝对不丢包的网络,除了用专线走一条延迟更短的线路以外,基本上任何加速器都没有用。 >对于主机 P2P 游戏,加速现今有什么好思路吗(SS\VPN 对其都不甚友好) 可以把 VPN 或者 S***搭载路由器上,在路由器上实现透明路由或透明代理。 我自己个人用的是 VPN 方法,然后在路由器上用 iptables、ip rule、ip route 来实现透明的路由策略。 |
32
mind3x 2017-10-29 14:43:16 +08:00 via Android
根据 Google 在 QUIC 协议上的实践,fec 基本上只有副作用,所以他们前两年就从 QUIC 里拿掉了 fec,供参考,并不是来挑刺的。
|
33
sublimevsatom 2017-10-29 14:46:58 +08:00
感谢楼主的分享。
在 Linux 桌面进行网游的时候,有时候就缺这么一类跨平台的游戏加速器。 |
34
HaoyangWei 2017-10-29 15:02:11 +08:00
活着难道不好吗?
|
35
sobigfish 2017-10-29 15:08:59 +08:00
|
36
wangyucn OP >根据 Google 在 QUIC 协议上的实践,fec 基本上只有副作用,所以他们前两年就从 QUIC 里拿掉了 fec,供参考,并不是来挑刺的。
具体情况不了解,可能他们的网络环境比较好。也许他们说的有副作用,是因为没法选择出一套对所有人都适用的参数,又难以做到完全自动调整参数,所以总体上造成了副作用。 这个 repo 针对的是自己的网路有丢包,又有一定动手能力的人; QUIC 从设计上是一个零门槛使用的协议。所以 QUIC 的结论并不能套用在这个 repo 上。 项目 repo 里面有性能测试,在高丢包环境下确实是有明显性能提升的,scp 从 30kb/s 提升到了 3.5mb/s。而且测试方法都公开,你自己也可以轻易复现。 >话说可以改个名字啊,VPN 关键字去了多好,只是少些不必要的麻烦 之前确实想过,想叫 tinyFecRelay。不过后来还是决定起一个最直观的名字了。 |
37
wtcoder 2017-10-29 16:52:05 +08:00
牛逼!
|
38
wwqgtxx 2017-10-29 17:09:31 +08:00
看了一下你的“透过 tinyFecVPN 免改 iptables 加速网络”这个节,感觉可以考虑写个小工具操作 iptables 自动实现端口重定向,socat 这个程序在 Tcp 转发上还好用,在 Udp 转发上大量的 fork,然后很容易爆内存,并不是个好选择
|
39
renothing 2017-10-29 17:18:19 +08:00
测试了下,不稳定,不断的重链
|
40
wangyucn OP |
41
wangyucn OP >看了一下你的“透过 tinyFecVPN 免改 iptables 加速网络”这个节,感觉可以考虑写个小工具操作 iptables 自动实现端口重定向,socat 这个程序在 Tcp 转发上还好用,在 Udp 转发上大量的 fork,然后很容易爆内存,并不是个好选择
iptables 加了之后还得清理,有点麻烦,程序被 kill -9 后还要手动删。以后我可能会实现一个基于 epoll 的 tcp 和 udp 端口转发的小工具,集成在这个 repo 里。 |
43
sw0rd3n 2017-10-29 19:28:21 +08:00 via iPhone
实现拥塞控制了嘛?
|
44
wangyucn OP |
45
zhuzhi90 2017-10-29 20:17:33 +08:00
大佬,你好,我是菜鸟。我按照你的教程一步步设置,udp2raw 有时候能脸上,有时候又会断掉。同样的,tinyvpn 也会出现 [FATAL]***exited 的情况。我是长城宽带,会不会和运营商有关系啊。 我试过成功 ssh 到 10.22.22.1 上,udp2raw 也成功握手,给出 id,但这两个都会隔一段时间自己断开了。
|
46
qyz0123321 2017-10-29 20:17:35 +08:00 via Android
就 FEC 而言,很像 QUIC..支持
|
47
ivdvef 2017-10-29 20:23:20 +08:00
1024, 先收藏下来,明天试试看
|
49
renothing 2017-10-29 20:33:49 +08:00 1
@wangyucn 一样的。环境是电信 adsl,server 是 usa vps。配置按照你的示例配置的。
貌似是你没有做心跳检测和自动重链。一段时间不发数据后,client 认为 server 已死,而 server 则把新的请求当成了新链接。 |
50
wangyucn OP @renothing
如果很长时间没有发送数据的话,nat pipe 会被中间路由设备掐掉,确实会出现重连的情况。tinyFecVPN 里现在没有做 nat pipe 保活的功能,后续我做一下。暂时的解决办法是在后台开个 ping 保活 nat pipe。 |
51
findwho 2017-10-29 21:24:26 +08:00
围观大神啊,既然名字都有了 vpn,还不如直接开放功能。。只是建议啊
|
54
skylancer 2017-10-30 00:00:58 +08:00
自己阉割一刀以为就不会被盯上么?
感觉你好天真... |
55
kurtrossel 2017-10-30 00:24:24 +08:00
妙啊~
感谢分享! |
56
artandlol 2017-10-30 09:49:20 +08:00
收藏
|
57
xxstop 2017-10-30 09:54:26 +08:00
不错。Mark
|
58
123s 2017-10-30 10:01:01 +08:00
大佬,安卓手机支持吗?
|
59
wangyucn OP >大佬,安卓手机支持吗?
在安卓手机上有问题,可以运行但是发不出数据,以后会找时间解决一下。 |
61
wangyucn OP >参考 cloudwindy 你一定要注意安全哇
这个软件只是加速器,不能直接用来科学上网。我知道你是好心提醒,但是把这个和 cloudwindy 的比较,反而可能给我带来麻烦。 >既然名字都有了 vpn,还不如直接开放功能 >话说可以改个名字啊,VPN 关键字去了多好 VPN 全名是 Virtual Private Network,虚拟专用网络。很多大学都有 VPN 系统,比如: https://vpn.pku.edu.cn/ https://sslvpn.tsinghua.edu.cn/ VPN≠科学上网,也并不一定允许你把数据包路由到外网去。VPN 只是泛指一种网络连接方式,可能很多人接触 VPN 是因为科学上网,先入为主的认为 VPN=科学上网,这个说法有一些误导性。 请各位不要把话题歪到科学上网上去。 |
62
renothing 2017-10-30 13:36:18 +08:00
我看你加了地址校验。那基本上废掉了大部分伸手党了。哈哈
|
63
cq65617875 2017-10-30 15:11:12 +08:00
|
64
hu6360567 2017-10-30 17:40:32 +08:00
用了 socat 做了个 ipv6 地址的映射,一切都好,只是酸酸乳无法链接 Google 意外的网站,不理解为什么,看流量也一切正常……
|
65
wangyucn OP |
66
hu6360567 2017-10-31 00:15:03 +08:00 via Android
@wangyucn 在服务器端使用 socat 将 v4 端口 fork 但一个 v6 端口,在客户端,用 socat 将服务器端的 v6 端口映射到本地 v4 端口。启动客户端时 r 选项添本地 v4 端口即可。ping,ssh 一切正常。不知道是不是 mtu 设置的不合理
|
69
hu6360567 2017-10-31 10:42:25 +08:00
@wangyucn 试了一下,还是不行,只有 v6 流量能通过代理,v4 不通,不知道是什么原因了……如果直接使用,没有任何问题
|
70
renothing 2017-10-31 15:44:19 +08:00
@wangyucn 更新后反而废了,指定 mtu 也不行
[2017-10-31 07:42:30][WARN]message too long len=1388 fec_mtu=1200,ignored [2017-10-31 07:42:32][WARN]message too long len=1388 fec_mtu=1200,ignored [2017-10-31 07:42:33][WARN]message too long len=1388 fec_mtu=1200,ignored [2017-10-31 07:42:37][WARN]message too long len=1388 fec_mtu=1200,ignored [2017-10-31 07:42:43][WARN]message too long len=1388 fec_mtu=1200,ignored |
71
wangyucn OP @renothing
你这个应该是自己改了参数的,这个 WARN 只有在--mode 1 时候才会报,更新后默认参数是--mode 0 --mtu 1250。你去掉--mode 1 参数就好了。 --mode 1 得配合 iptables 的 TCPMSS 选项,等我接下来在 readme 里说一下怎么用(也有可能我会在代码里实现个 mss fix 功能),暂时先用 mode 0。 |
72
wangyucn OP @renothing
今天更新的版本为了能让设置了 DF 标志的 ip packet 通过,tun 设备的默认 MTU 调大了,对--mode 1 模式产生了一些影响,所以你之前能用的参数现在不适用了。现在用默认参数就不会有 MTU 问题了。 |
74
wangyucn OP @renothing
1500 的那个只是 tun 设备的 mtu。 OpenVPN 里面 tun 设备的 mtu 一般都是固定为 1500 的,不论是你改 mssfix 还是 fragment 都不影响这个。 >而且今天的版本,传输速度神奇不在。 确保你把 --mode 1 选项去掉 |
75
wangyucn OP @renothing
想要理解为什么 tun 设备的 MTU 为什么一般应该固定为 1500,你可以从 OpenVPN 的 4 个 MTU 选项入手(这个能查到的资料比较多): --tun-mtu --link-mtu --mssfix --fragment ;另外再了解一下 DF 标志。 tinyFecVPN 里面现在有 2 个 MTU,一个是 tun 设备的 mtu,仿照 OpenVPN 推荐的方式固定为 1500 ;另一个是 FEC 编码器的 MTU,mode 0 模式下影响数据的切分。 |
76
kenshinji 2017-11-01 09:27:01 +08:00
@shaoshuang 韩国是哪里的 vps 提供商呢?我也去搞一个
|
78
apibits 2017-11-02 11:15:24 +08:00 via Android
昨天尝试在自家 nas 群辉 DSM 上做客户端 直接尝试在 raw 下嵌套 tiny 在使用 g 参数手工执行了 iptable 后 稳定下来不再提醒 rst..... 直接软件启动时自动添加好像没起作用 虽然日志显示了执行了 iptable。。。。 使用 20:5 的参数
|
79
jayx 2017-11-02 18:30:13 +08:00
在 README.zh-cn.md 里提示 2 好像写错了,"对于某些运营商,UDPspeeder 跟 tinyFecVPN 配合可以达到更好的速度",是 udp2raw 吧
|
81
xsd3169 2017-11-04 22:30:49 +08:00
您好,Windows 上有客户端吗?
|
82
wangyucn OP |
84
wangyucn OP @wwqgtxx
ssh tunnel 可以转发 tcp,虽然难用一点。如果只需要 tcp,一般都拿 ssh tunnel 来凑合了。 关心性能的人也不多,转发 udp 一般都拿 socat 来凑合了。 |
86
wwqgtxx 2017-11-05 20:20:19 +08:00
@wangyucn socat 这种 fork 模式对于 UDP 实在是太不靠谱了,比如在 DNS 这种应用下,至于 iptables 的配置正如你说的,又麻烦又容易出错,实在是比较蛋疼,可能因为一般情况下 UDP 的应用没有 TCP 那么多吧
|
87
thj007 2017-11-06 10:51:14 +08:00 via Smartisan T1
大佬,这个怎么跟 udp2raw 配合使用?
|
88
ecc 2017-11-06 13:44:28 +08:00
路由器上 比如刷了梅林固件的可以用么
|
90
jjllws 2017-11-07 11:08:21 +08:00 via Android
你好,感谢您的代码!看起来很棒!但是我对 Linux 不太熟悉,能否告诉我该如何使用?我是想要这样子做:
我的电脑 l2tp 连接 阿里云深圳 用你的 tinyvpn 转发数据到 阿里云香港 我该如何操作,请帮助我 |
91
carrionlee 2017-11-07 20:18:37 +08:00
服务器运行后,出现 [WARN]de_cook(data,len)failed 的警告,代表什么意思?
|
92
wangyucn OP @carrionlee 两端密码不一致,或者有未知的程序在访问 server 监听的端口。
|
93
wwwqq8254289 2017-11-10 17:12:38 +08:00
大佬带带我撒,现在这些加速器 ping 值看不出游戏内好坏,你这个能当加速器用,是否考虑嗯大家一起出钱用呢。
|
96
hgjian 2017-11-15 15:03:14 +08:00
|
97
hgjian 2017-11-15 15:07:58 +08:00
@cq65617875 可以指点一下注释掉哪一些不?
|
98
brickman379 2017-11-15 23:30:10 +08:00
大佬,自己编译的能 ping 通百度,为什么访问百度失败。IP 10.22.22.2.34912 > 112.80.248.73.https: Flags [S], seq 2783734512, win 29200, options [mss 1200,sackOK,TS val 2495875737 ecr 0,nop,wscale 7], length 0
|
99
wangyucn OP @brickman379
按下面链接里说的要点,详细描述一下环境。去 github 上开个 issue。 https://github.com/wangyu-/UDPspeeder/wiki/发 Issue 前请看 |
100
hgjian 2017-11-16 08:28:17 +08:00
@brickman379 请问注释哪些额?
|