使用 MySQL 进行 PPP 验证

回复 收藏
上篇文章  在 Linux 上搭建 L2TP/IPSec VPN 其中L2TP 的用户验证还是需要用 PPP 调用 /etc/ppp/chap-secrets 文件,跨服务器验证貌似也只能 crontab rsync,于是没用过 Radius 的我还是往 MySQL 方面想办法。搜索后发现了两个相关的开源项目:pppd-mysql 和 pppd-sql,前者简陋到只有一个 .c 文件,让人无从下手,而后者是基于前者的思路重新开发的,编译文件与文档齐全,而且支持 PostgreSQL,于是决定用之。

首先需要安装 ppp 和 openssl 的 header / lib

aptitude install ppp-dev libssl-dev下载安装 pppd-sql

cd /usr/src
wget http://freshmeat.net/urls/5649d7ea329d121d094f12544e2b70a1
tar zxvf pppd-sql-0.8.0.tar.gz
cd pppd-sql-0.8.0
./configure  <- 注意结果提示,看看你的数据库服务是否被找到了
./make
./make install另外关键的 mysql.so ppp 插件文件不知道为什么没有在 make install 时候安装到应有位置,手工 cp 吧,目标路径按照你系统里面的 pppd 版本号修改。


cp /usr/src/pppd-sql-0.8.0/src/.libs/mysql.so /usr/lib/pppd/2.4.5/下面修改 ppp 的配置文件,如果你是按照我之前的 ipsec + L2TP 文档安装的话,那么就是修改 /etc/ppp/options.xl2tpd 这个文件,加入以下内容:

plugin mysql.so
mysql-host      MYSQL-HOST
mysql-port      MYSQL-PORT
mysql-user      MYSQL-USER
mysql-pass      MYSQL-PASS
mysql-pass-encryption   AES
mysql-pass-key  SALT
mysql-database  MYSQL-DB
mysql-table     MYSQL-TABLE
mysql-column-user       username
mysql-column-pass       ppppass
mysql-column-client-ip  client_ip
mysql-column-server-ip  server_ip
mysql-column-update     status
mysql-exclusive
mysql-authoritative具体的配置请看 man pppd-mysql,数据库和表结构也很简单,我是直接在之前 OpenVPN 的表格基础上修改的。

连接试试看吧,应该没问题了,最终效果是用户名密码在所有服务器的 ipsec+L2TP 以及 OpenVPN 连接方式全部通用。如果你的 ppp 使用 CHAP2 验证密码的话,这个插件只支持 AES 加密,而 OpenVPN 用的是 mysql.PASSWORD(),所以这两个服务不能共享一个密码字段(当然明文除外)。我觉得问题不大,用 PHP 简单写个脚本即可,还可以顺便加上用户修改密码功能,如果再加上支付宝 API 调用的话。。。都可以做全自动化的 VPN 网络销售系统了。。。
2011-02-22 13:02 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: