一款鲜为人知的杰出VPN方案 —— ACCEL-PPP

因PPTP简单、方便,无特别需要,平时需要用到VPN时一般都会首选PPTP。

数月前使用PPTP的过程中发现,Linux下的PoPToP方案极限速率仅有20 Mbps左右,而Windows下“网络策略和访问服务”提供的PPTP上限速率则高些,能达到70 – 80 Mbps。

当时了解到一款名为ACCEL-PPP的方案,尝试了一番,效果不负其名——ACCEL。

但今天发现,此方案的中文介绍、资料近乎无(英文介绍也不多),遂撰写此文,欲让更多人了解到此杰作。

 

服务器配置:

  • CPU: Intel Xeon L5520 *2
  • RAM: 48GB
  • 网络适配器: Intel 千兆网络适配器
  • 硬盘: 256GB SSD

 

网络环境:

  • ISP: 中国电信
  • 公网速率: 100 Mbps
  • 路由器: EdgeRouter X SFP (with hwnat, ipsec offload enable)

 

本文部分词语定义:

极限速率 —— 当数据传输速率在30秒内不能稳定提升,则视当前已达极限速率

 

PoPToP

PoPToP就是Linux更新源所提供的的pptpd。

达到极限速率后,使用top看到服务器上pptpd进程的CPU使用率仅有25-30%:

图1 —— PoPToP极限速率
图2 —— pptpd进程CPU使用率1
图3 —— pptpd进程CPU使用率2

速率已达极限,而资源使用却未达极限,明显问题在于PoPToP方案的资源利用率底下。

ACCEL-PPP PPTP

图4 —— ACCEL-PPP PPTP极限速率
图5 —— ACCEL-PPP PPTP CPU使用率

ACCEL-PPP的PPTP极限速率能达到50 Mbps多,使用top查看CPU使用率,可以发现大部分都被ksoftirqd占用,且使用率几乎可达一个核心的极限。

虽然未能达到我公网带宽的极限速率,但能充分利用资源达到如此高的速率已经很不错了。

ACCEL-PPP的文档没对其工作原理作出介绍,我也未深究其源码,暂不能解释其“高效”、以及受限于其“极限”的原因。

ACCEL-PPP L2TP与xl2tpd的性能对比

使用StrongSwan,IPSec PSK

xl2tpd

图6 —— xl2tpd效率1
图7 —— xl2tpd效率2

ACCEL-PPP L2TP

图8 —— ACCEL-PPP L2TP效率1
图9 —— ACCEL-PPP效率2

孰优孰劣,明显至极。

ACCEL-PPP的安装

本节以Debian 9为例,安装ACCEL-PPP。

安装编译器,cmake:

取得ACCEL-PPP源码(编写本文时,SourceForge的ACCEL-PPP 1.11.2的源码扩展名虽为.tar.bz2,但实际上只由tar打包,并无使用bzip压缩)

编译ACCEL-PPP:

ACCEL-PPP编译前需要使用cmake对所需的功能进行设置,支持的选项有以下:

  • -DBUILD_PPTP_DRIVER=TRUE —— 本选项用于编译PPTP内核模块,内核版本>= 2.6.37已内置PPTP模块,无需启用该选项。
  • -DBUILD_IPOE_DRIVER=TRUE —— 本选项用于编译IPoE内核模块。IPoE共享接口模式或VLAN监控下需要此模块。
  • -DBUILD_VLAN_MON_DRIVER=TRUE —— 编译VLAN监控模块。
  • -DKDIR=/usr/src/linux —— 若需要构建PPTP内核模块,则需要使用本选项指定内核源码目录。
  • -DCMAKE_INSTALL_PREFIX=/some/location —— 指定ACCEL-PPP安装目录,默认为/usr/local。
  • -DCMAKE_BUILD_TYPE=Debug —— 选择编译为DEBUG版本以用于调试抑或为RELEASE版本。
  • -DLOG_PGSQL=TRUE —— 编译log_pgsql模块用于使用PostreSQL数据库记录日志。
  • -DRADIUS=FALSE —— 关闭radius模块。
  • -DNETSNMP=TRUE —— 启用SNMP模块。
  • -DLUA=TRUE —— 启用LUA支持(仅用于IPoE)。
  • -DSHAPE=TRUE —— 启用流量控制功能。

本文编译为Release版本,关闭Radius,PGSQL,流量控制等功能。

重命名配置文件:

ACCEL-PPP的配置

从man可获取到accel-ppp配置文件的完整文档:

本小节仅对部分配置项进行说明。

[modules]

本部分定义了ACCEL-PPP需要启用的功能。

例如

则表示启用文件日志,pptp,l2tp等功能。

[core]

用于配置核心模块的参数。

当前版本支持的有以下两项:

[ppp]

ACCEL-PPP内置的ppp模块参数配置。

具体略。

[dns]

[client-ip-range]

[pptp]

[l2tp]

[chap-secrets]

[ip-pool]

示例配置文件

运行并使用ACCEL-PPP

客户端的使用方式与平常无差异,使用IPSec的,按照正常方式对IPSec进行配置即可。

总结

ACCEL-PPP网站有有言:

ACCEL-PPP是一个高性能的Linux VPN服务器应用。

致力于聚合各种热门的VPN技术。

单VPN上,对比如今广泛使用的PoPToP与xl2tp,ACCEL-PPP的优势非常明显,但如此杰作却鲜为人知,实为作者感到不平。

若你尝试ACCEL-PPP后,觉得好用,记得推荐给你身边的朋友!

ACCEL-PPP官网:http://accel-ppp.org/

SourceForge项目:https://sourceforge.net/projects/accel-ppp/

社区:http://accel-ppp.org/forum/

Freeradius Server & Freeradius Client with Poptop Server and L2TP Over IPSec(可统计流量)

本文于2014年3月22日发布,2014年9月8日更新。

此Shell Script可选择安装Freeradius Server,Freeradius Client,Poptop Server(PPTP),L2TP Over IPSec。

其中Freeradius Server是提供验证服务,Freeradius Client与Freeradius Server通讯,至于Poptop Server和L2TP嘛,你懂的。

目前支持的Linux发行版本有:CentOS 6,Debian 6/7/8,Ubuntu 12/13/14。

要安装Freeradius Server,要求有一个可用的MySQL Server。


 

安装前服务器的配置:

先确定服务器的hostname为正确的FQDN格式。不带“.”的hostname是错误的。

执行:

输出的内容应该是你服务器的IP(使用NAT网络,输出的是内网IP),否则请执行:

 

1. 安装各种相关程序:

CentOS 6:

安装并启动MySQL Server:

设置MySQL root用户密码:

安装wget:

Ubuntu/Debian:

安装并启动MySQL Server:

安装wget:

2. 开始安装

填写的相关信息:

安装信息

选项2会额外要求输入Freeradius Server的IP以及通讯密钥。

看到“Enjoy it now.”,即表示已成功安装。


添加用户:

在radcheck中添加响应的记录即可,例如添加一个用户名为username,密码为password的用户,密码以明文保存,可执行:

 

流量统计&限制:

使用本Shell Script安装的Freeradius Server,可使用三种不同周期的流量统计&限制方式,分别为一小时(Hourly-Traffic),一天(Daily-Traffic)和一个月(Monthly-Traffic)。

例如要限制用户名为username的用户一个月流量为1GB,即1024 MB,则在表radcheck中插入响应的记录,执行:

其中流量的单位为Mbytes。

至于更多的功能,我就不在此作文章了,各位可自行查看Freeradius的WIKI。


 

关于OpenVZ的问题:

可能有人会问支不支持OpenVZ。

如果准确来说的话,各位不应该问我的Shell Script支不支持OpenVZ,而应该问你的OpenVZ VPS支不支持我的Shell Script。

OpenVZ须具备下述条件方可使用PPTP,L2TP以及IPSec:

1. OpenVZ VPS拥有以下设备文件以及对其操作的权限:

2. 物理服务器已开启以下模块:

3. OpenVZ VPS拥有IPTABLES NAT模块的权限。

可通过执行此命令进行检查:

不出现

则表示拥有IPTABLES NAT模块的权限。


 

PPTP,L2TP的使用方法:http://www.ipfog.com/knowledgebase.php?action=displaycat&catid=5

WHMCS模块——Freeradius MySQL(可实时查看流量使用情况)

上周完成了个Freeradius Server & Freeradius Client with Poptop Server and L2TP Over IPSec的安装程序,考虑到可能有需要与WHMCS对接的,因此特意弄了个WHMCS的模块。

下载地址:http://soft.yzs.me/freeradius.tar.bz2

使用方法:

解压下载的文件,把freeradius目录上传至WHMCS的modules/servers/目录中。

登录Freeradius Server的MySQL Server,添加允许远程连接MySQL的用户,且对Freeradius Server的数据库拥有所有权限。另外,my.cnf中如果有bind 127.0.0.1,需要注释掉。

登录WHMCS管理员区域,添加服务器,用户名是MySQL的用户名,密码是该MySQL用户的密码。

添加产品,到“Module Settings”标签页设置参数:

“Freeradius Database Name”为Freeradius Server使用的数据库名;“Password Type”为MySQL中密码的保存方式,可选MD5加密或明文保存(用MD5方式保存,虽然radtest是回应Accept,但PPTP仍然提示密码错误,所以用PPTP的还是用明文保存吧);“User Group Name”为新建的用户加入的组名称,留空则不加入任何组。

“Radcheck”为添加用户时往radcheck表中额外加入的记录,不需要输入id和用户名,不同字段以“|”隔开,不同记录以“,”隔开。例如“Hourly-Traffic|:=|1024”,Hourly-Traffic属于attribute,:=属于op,1024属于value,id与用户名会自动填写。

“Radreply”为添加用户时往radreply表中额外加入的记录。id与用户名自动填写,不同字段以“|”隔开,不同记录以“,”隔开。例如“Framed-IP-Netmask|:=|255.255.255.0”,Framed-IP-Netmask属于attribute,:=属于op,255.255.255.0属于value。

例如图中的设置:

settings

则添加用户后radcheck表该用户的记录为:radcheck

radreply表该用户的记录为:

radreply

 

 

切换到“Custom Fields”标签页,添加一个名为“Traffic Usage”的Custom Fields,“Field Type”为“Text Area”,并勾选“Admin Only”:Custom Fields

 

如果设置无误,即可正常使用:

Freeradius MySQL

 

NOTE:有任何的问题或建议,欢迎提出。