今天配置一台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*