[关闭]
@greensea 2016-11-28T04:04:13.000000Z 字数 1211 阅读 2902

tunvpn


tunvpn 是一个使用 TUN 设备创建 VPN 的工具。它使用 FEC 来保证在较差的网络条件下也能有较好的表现。

tunvpn 可以用来组建 VPN 网络,支持客户端到客户端的访问,只要有一个中心服务器即可。

编译需求

首先需要安装以下第三方库

安装以上第三方库后,修改 Makefile,指定 include 目录和链接库,然后直接 make 即可。

性能

得益于 FEC 的使用,tunvpn 可以在网络不太好的条件下保持较好的传输速率。下面提供了在使用 FEC 和未使用 FEC 的情况下,流传输速率和 ping 丢包率的测试结果。

测试网络环境:(客户端)广西电信 10M 宽带 <--> vultr 硅谷机房(服务器)

wget 下载 10M 文件

* 直连 tunvpn [1]
115KB/s 700KB/s
200KB/s 488KB/s
265KB/s 504KB/s
251KB/s 929KB/s
平均 208KB/s 655KB/s
速度提升 1.00 3.15

ping -f -c 1000 丢包率 [2]

直连 tunvpn [1]
4.4% 0.4%
5.4% 1.6%
5.9% 0.7%
4.5% 1.1%

[1] 使用参数 --fec-n 10 --fec-k 7 --comp lzo --crypt chacha20
[2] 由于存在突发连续丢包,故分组码类型的 FEC 也无法对数据进行完整的纠错。

例子

在服务器上执行

  1. # 启动 tunvpn_server 并让其在后台运行
  2. tunvpn_server &
  3. # 设置 tun 设备的地址
  4. ifconfig tun0 up 10.0.0.1 netmask 255.255.255.0 mtu 1380

在客户端上执行

  1. # 启动 tunvpn_client 并让其在后台运行
  2. tunvpn_client &
  3. # 设置 tun 设备的地址
  4. ifconfig tun0 up 10.0.0.2 netmask 255.255.255.0 mtu 1380

自动设置 tun 设备的方法

使用 --tun-up 参数,指定一个 shell 脚本,当 tunvpn 成功启动后,会调用指定的 shell 脚本,你可以在脚本中设置 tun 的地址,以及处理其他必要的工作。
注意,脚本路径必须使用绝对路径。

  1. # tunvpn 会这样调用脚本
  2. /your/tun/up/script.sh TUNDEV SERVER_IP
  3. # 其中,TUNDEV 参数是 tun 设备的名字。在客户端上,SERVER_IP 参数是服务器的 IP 地址,在服务器上则是监听地址。

关于前向纠错

TCP 对于丢包非常敏感,如果丢包率居高不下,TCP 的流量会降到一个很低的程度。使用前向纠错后,接收方可以还原出被丢弃的数据包,从而降低丢包率,提高 TCP 的吞吐量。

tunvpn 目前使用分组码来进行前向纠错,但分组码的纠错延迟较大,TCP 对于延迟到达的包以及包乱序也比较敏感,这会在一定程度上降低 TCP 的吞吐量。

目前正考虑添加卷积码的支持,卷积码有着较低的纠错延迟,预期可以比分组码获得更大的 TCP 吞吐量。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注