V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wangyucn
V2EX  ›  宽带症候群

tinyFecVРN,集成了 UDPspeeder 功能的 VРN,可以加速全流量(TCP/UDP/ICMP),开源项目

  wangyucn · 2017-10-29 11:03:16 +08:00 · 32027 次点击
这是一个创建于 2617 天前的主题,其中的信息可能已经有所发展或是发生改变。

tinyFecVРN,集成了 UDPspeeder 功能的 VРN,可以加速全流量(TCP/UDP/ICMP),开源项目

image

之前发的 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 的来回的流量都会被加速。

效果

image

image (借用了 UDPspeeder 的图)

其他

目前在 release 版的代码里故意引入了一点限制,只可以当加速器用,不能直接用来“翻出去”。

第 1 条附言  ·  2017-10-29 13:12:14 +08:00

附上原理简介和性能测试

原理简介

主要原理是通过冗余数据来对抗网络的丢包,发送冗余数据的方式支持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
测试结果

image

其他

程序支持动态改变FEC的冗余度而不断线,具体可以看--fifo选项。

tinyFecVРN跟kcptun/finalspeed/BBR 等现有方案比,主要区别是可以加速 UDP 和 ICMP,现有方案几乎都只能加速 TCP。一般加速游戏必须用到UDP。

跟UDPspeeder比,主要是使用起来更简单。

116 条回复    2018-06-23 07:21:48 +08:00
1  2  
kennylam777
    101
kennylam777  
   2017-11-16 11:22:43 +08:00
@hgjian 示範那裡把 error message 寫得很清楚了, 只要找出那 message 的 string 段就找到, 真的沒難度啊........你不會用 gcc 嗎 囧? 你都找出來了, 試一下又不會死的
hgjian
    102
hgjian  
   2017-11-16 11:50:34 +08:00
@kennylam777 好吧,谢谢指点,我试试看
zhouyut001
    103
zhouyut001  
   2017-11-20 08:20:39 +08:00 via Android
收藏一波,单用 Openvpn+UDPspeeder 还把我国内 VPS 网速拖慢了。用这个试试。
zhouyut001
    104
zhouyut001  
   2017-11-20 08:21:29 +08:00 via Android
@zhouyut001 53 端口没问题吧
jjllws
    105
jjllws  
   2017-12-10 18:49:20 +08:00
有没有可能 windows 用 OPENVPN 连接 VPS A,VPS A 上装 TinyFecVPN 和设置 iptables 转发到装了 TinyFecVPN 和 OPENVPN 服务端的 VPS B,VPS B 访问外网
vitas
    106
vitas  
   2018-01-04 18:57:02 +08:00
@hgjian 如果我没猜错的话 应该是这个文件 tun_dev.cpp 注释下面这段



if( ( ntohl(sub_net_uint32)&0xFFFFFF00 ) != ( ntohl (dest_ip) &0xFFFFFF00) )
{
string sub=my_ntoa(dest_ip);
string dst=my_ntoa( htonl( ntohl (sub_net_uint32) &0xFFFFFF00) );
mylog(log_warn,"[restriction]packet's dest ip [%s] not in subnet [%s],dropped\n", sub.c_str(), dst.c_str());
continue;
}
badman7
    107
badman7  
   2018-01-04 20:02:30 +08:00
@vitas 怎么改呢~
vitas
    108
vitas  
   2018-01-05 11:42:30 +08:00
@badman7 注释掉应该就可以了
hgjian
    109
hgjian  
   2018-02-27 16:42:09 +08:00
@vitas 感谢指点,我试试
lly8666
    110
lly8666  
   2018-02-28 23:16:58 +08:00
求问在 LEDE 多 WAN 的路由器里面,怎么指定虚拟的 tun 设备的出口呢?
wangyucn
    111
wangyucn  
OP
   2018-03-01 08:19:31 +08:00
@lly8666

新建一个类型为 unmanaged 的 interface, 然后在 physisc setting 那里把物理 interface 选成 tunXXX
lly8666
    112
lly8666  
   2018-03-01 16:13:17 +08:00
@wangyucn 不是。。我的意思是,这个怎么配置 iptables 来指定这个 tinyfecvpn 的出口走某个实体 wan 出口呢。
wangyucn
    113
wangyucn  
OP
   2018-03-01 17:25:59 +08:00
@lly8666 你看一下 tinyfecVPN 的 wiki,有个文章说的就是怎么重定向流量,用在 lede 上可能得结合这个文章自己研究一下。
lly8666
    114
lly8666  
   2018-03-01 22:31:17 +08:00
@wangyucn ok !感谢
wwwqq8254289
    115
wwwqq8254289  
   2018-06-22 22:09:50 +08:00
试试 tinyfecVPN 之前折腾的这些弄的延迟爆炸真坑
wwwqq8254289
    116
wwwqq8254289  
   2018-06-23 07:21:48 +08:00
更新了没,其它几个都更新了 @wangyucn
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2555 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 04:51 · PVG 12:51 · LAX 20:51 · JFK 23:51
Developed with CodeLauncher
♥ Do have faith in what you're doing.