OpenVPN MySQL认证注意事项

今天配置一台OpenVPN服务器,使用MySQL认证的方式,出现了不少问题,现在总结一下:

1. 按照标准方法配置完毕后,测试testsaslauthd -u test -p test -s openvpn时,报告无法验证通过:

0: N0 “authentication failed”

找了好久才在/var/log/secure中看到如下错误:

PAM unable to dlopen(/lib64/security/pam_mysql.so): /lib64/security/pam_mysql.so: cannot open shared object file: No such file or directory

PAM adding faulty module: /lib64/security/pam_mysql

经过搜索,确实未发现pam_mysql.so

下载并编译:pam_mysql-0.7RC1.tar,得到pam_mysql.so,拷贝到/lib64/security/pam_mysql.so

测试testsaslauthd -u test -p test -s openvpn通过

这里需要注意:编译pam_mysql时,要有openssl参数,即: ./configure –with-openssl,否则虽然可用但不支持MD5加密密码;

但是客户端拨号仍然失败,/var/log/secure中错误消息:

PAM [error: /lib/security/pam_mysql.so: undefined symbol: pam_set_data]

百度了好多大侠和菜鸟的沟通记录,了解到我使用最新的plugin/auth-pam下的源码编译生成的openvpn_auth_pam.so和客户端的版本不一致,也就是说编译服务器用的版本高于客户端版本的话可能会出问题。因为我的另外一台服务器用的版本2.0.9,而且能够完美支持2.1.4的客户端,于是就把另一个服务器的openvpn_auth_pam.so拷贝到这台服务器上的/etc/openvpn,仍然不能连接,而且我关闭openvpn服务后竟然启动不了了,后来恍然大悟:我原来的那台服务器是32位的CentOS,而现在正在装的这台是64位的,拷贝当然是不行的!老老实实地把2.0.9的源码复制到新服务器上,解压,编译openvpn_auth_pam.so(只需要编译这个,其他的用新版本即可),覆盖到/etc/openvpn后,重试客户端连接,一切OK。浪费几个小时的时间,真是不值啊。下次不会再在这方面栽跟头了。

题外:

编译源码的时候出现编译器相关的问题,说明编译工具没装全,用这个命令即可:yum install gcc*

并发数计算方法

常用并发数计算公式:N=[(n×0.8×S×P) / (T×0.2)]*R

其中:n为系统用户数;

S为每个用户发生的业务笔数(QPS);

P为每笔业务所需要访问服务器的时间,单位为秒;

T为使用业务的时间,单位为秒;

R为调节因子,缺省值为1;

示意:

S = 20(每天1000个用户发生20000笔业务);
P = 30(每笔业务需要访问服务器30秒);
T = 36000(每天工作10小时);
R =2(缺省为1,复杂的业务系统可用2);

计算得出的并发数为:(1000*0.8*20*30/(36000*0.2))*2=133.33;