继续折腾服务器的 VPN。之前已经配置好了 ipsec+L2TP 以及 OpenVPN,还做了 OpenVPN 的 MySQL 验证以实现用户跨服务器,但是 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 网络销售系统了。。。
Pingback: Tweets that mention 使用 MySQL 进行 PPP 验证 | gkp's post -- Topsy.com
Pingback: Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记 | gkp's post
Pingback: NO777 » Blog Archive » CentOS 5 安装 IPSEC / L2TP VPN
具体如何添加用户名和密码?
直接按照配置文件在相应的mysql表格中添加记录即可
救命啊,用了ppp-sql 在账户认证阶段,本地和VPN的连接就断了,也就是说本地(局域网中的机子)突然ping不通VPN了(但非本局域网中别的机子能ping通VPN),但是不用ppp-sql认证一切okay。好奇怪啊!是路由的问题?还是局域网的问题?但是不用ppp-sql神马问题都没有啊。。
下面是ppp和xl2tp的日志。
Jan 28 03:59:59 vpn xl2tpd[1399]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
Jan 28 03:59:59 vpn xl2tpd[1399]: Forked by Scott Balmos and David Stipp, (C) 2001
Jan 28 03:59:59 vpn xl2tpd[1399]: Inherited by Jeff McAdams, (C) 2002
Jan 28 03:59:59 vpn xl2tpd[1399]: Forked again by Xelerance (www.xelerance.com) (C) 2006
Jan 28 03:59:59 vpn xl2tpd[1399]: Listening on IP address 0.0.0.0, port 1701
Jan 28 03:59:59 vpn ipsec__plutorun: 002 added connection description "L2TP-PSK-NAT"
Jan 28 03:59:59 vpn ipsec__plutorun: 002 added connection description "L2TP-PSK-noNAT"
Jan 28 03:59:59 vpn ipsec__plutorun: 003 NAT-Traversal: Trying new style NAT-T
Jan 28 03:59:59 vpn ipsec__plutorun: 003 NAT-Traversal: ESPINUDP(1) setup failed for new style NAT-T family IPv4 (errno=19)
Jan 28 03:59:59 vpn ipsec__plutorun: 003 NAT-Traversal: Trying old style NAT-T
Jan 28 04:02:04 vpn kernel: alg: No test for stdrng (ansi_cprng)
Jan 28 04:02:04 vpn kernel: alg: No test for stdrng (krng)
Jan 28 04:02:04 vpn kernel: alg: No test for authenc(hmac(sha1),cbc(aes)) (authenc(hmac(sha1-generic),cbc(aes-i586)))
Jan 28 04:02:07 vpn xl2tpd[1399]: Connection established to 125.114.135.116, 52683. Local: 9293, Remote: 30 (ref=0/0). LNS session is 'default'Jan 28 04:02:07 vpn xl2tpd[1399]: Call established with 125.114.135.116, Local: 25117, Remote: 289, Serial: 1
Jan 28 04:02:08 vpn pppd[1564]: Plugin /usr/local/lib/mysql.so loaded.Jan 28 04:02:08 vpn pppd[1564]: Plugin mysql: pppd-sql-0.8.0 initialized, compiled pppd-2.4.4, linked mysql-5.0.77Jan 28 04:02:08 vpn kernel: CSLIP: code copyright 1989 Regents of the University of California
Jan 28 04:02:08 vpn kernel: PPP generic driver version 2.4.2
Jan 28 04:02:08 vpn pppd[1564]: pppd 2.4.4 started by root, uid 0Jan 28 04:02:08 vpn pppd[1564]: Using interface ppp0
Jan 28 04:02:08 vpn pppd[1564]: Connect: ppp0 /dev/pts/1Jan 28 04:02:14 vpn kernel: PPP Deflate Compression module registeredJan 28 04:02:15 vpn pppd[1564]: Unsupported protocol 'IPv6 Control Protovol' (0x8057) receivedJan 28 04:02:15 vpn pppd[1564]: found interface eth0 for proxy arp
Jan 28 04:02:15 vpn pppd[1564]: local IP address 125.114.135.116
Jan 28 04:02:15 vpn pppd[1564]: remote IP address 216.24.198.101Jan 28 04:03:12 vpn xl2tpd[1399]: Maximum retries exceeded for tunnel 9293. Closing.Jan 28 04:03:40 vpn pppd[1564]: Terminating on signal 15
Jan 28 04:03:40 vpn pppd[1564]: Modem hangupJan 28 04:03:41 vpn pppd[1564]: Connect time 1.5 minutes.
Jan 28 04:03:41 vpn pppd[1564]: Sent 0 bytes, received 0 bytes.Jan 28 04:03:41 vpn pppd[1564]: Connection terminated.
Jan 28 04:03:41 vpn pppd[1564]: Exit.Jan 28 04:03:41 vpn xl2tpd[1399]: Connection 30 closed to 125.114.135.116, port 52683 (Timeout)
centos5.4 安装时的提示
configure: error: *** pppd.h is required, install ppp header files
yum install ppp-dev libssl-dev
No package ppp-dev available.
No package libssl-dev available.
centos 的包名字可能不一样,yum search ppp 看看
配置文件應該怎麽修改?我無論怎麽修改都連不通?
數據庫的結構是否按照scripts/ppp-login-mysql.sql導入就可以?
数据库结构在 /etc/ppp/options.xl2tpd 这个文件里面设置,之后自己建表即可
Pingback: Linode CentOS/Debian 部署 ipsec+l2tpd | MGJ的地盘
您所说的自动化售卖系统我已经实现了……pppd-sql的代码我也经过更改不用每个用户指定ip,可以自动化地去分配~
Pingback: Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记 | gkp’s post | Share