如果安裝好 OpenVPN 其實可以使用他預設的製作金鑰來連線,但是要新增帳號或者管理帳號這部分就比較麻煩,所以還是用帳號密碼做管理比較容易
首先先安裝以下編譯程式需要的日常庫
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel \ | |
libpng libpng-devel freetype freetype-devel libxml2 \ | |
libxml2-devel zlib zlib-devel glibc glibc-devel glib2 \ | |
glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl \ | |
curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn \ | |
libidn-devel openssl openssl-devel openldap openldap-devel \ | |
nss_ldap openldap-clients openldap-servers -y |
下面安装 pam 组件
yum install pam_krb5 pam_mysql pam pam-devel -y |
我們需要安裝 mysql 服務器
yum install mysql mysql-server mysql-devel mysql-libs -y |
登錄 mysql 建立一個驗證用的測試數據庫,添加使用者帳號
mysql -u root -p | |
mysql> create database vpn; | |
mysql> GRANT ALL ON vpn.* TO [email protected] IDENTIFIED BY ‘vpn123’; | |
mysql> flush privileges;mysql> use vpn; | |
mysql> CREATE TABLE vpnuser ( | |
-> name char(20) NOT NULL, | |
-> password char(128) default NULL, | |
-> active int(10) NOT NULL DEFAULT 1, | |
-> PRIMARY KEY (name) | |
-> ); | |
mysql> insert into vpnuser (name,password) values(‘user1’,password(‘123456’)); |
在 /etc/pam.d/ 下建立一個配置文件
vim /etc/pam.d/openvpn |
輸入以下內容並保存
auth sufficient pam_mysql.so user=vpn passwd=vpn123 host=localhost db=vpn table=vpnuser usercolumn=name passwdcolumn=password where=active=1 sqllog=0 crypt=2 | |
account required pam_mysql.so user=vpn passwd=vpn123 host=localhost db=vpn table=vpnuser usercolumn=name passwdcolumn=password where=active=1 sqllog=0 crypt=2 | |
#crypt(0) — Used to decide to use MySQL’s PASSWORD() function or crypt() | |
#0 = No encryption. Passwords in database in plaintext. NOT recommended! | |
#1 = Use crypt | |
#2 = Use MySQL PASSWORD() function |
現在可以測試 pam_mysql 是否工作正常,但這個動作之前需要安裝 sasl
yum install cyrus-sasl cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-lib cyrus-sasl-gssapi -y |
測試是否成功
saslauthd -a pam | |
saslauthd -a pamtestsaslauthd -u user1 -p 123456 -s openvpn |
如果成功,顯示 0: OK 「Success.」,pam_mysql 工作正常了
下面可以開始配置 OpenVPN 服務器了。
這裡需要有一部非常重要的步驟,2.1 以上的 OpenVPN 的 openvpn-auth-pam.so 都會出現驗證錯誤的問題,這裡需要我們重新編譯一個低版本的,我這裡用 2.0.7 的,大家也可以使用 2.0.9 版本的。
cd /etc/openvpn | |
mkdir tmp | |
cd tmp | |
wget http://kttsite.com/download/openvpn-2.0.7.tar.gz | |
tar zxvf openvpn-2.0.7.tar.gz | |
cd openvpn-2.0.7 | |
./configure | |
cd plugin/auth-pam/ | |
make | |
cp openvpn-auth-pam.so /etc/openvpn/ |
之後在伺服器端的 conf 檔中加入以下
client-cert-not-required | |
username-as-common-name | |
#這裡是指定 openvpn-auth-pam.so 這個插件 | |
plugin ./openvpn-auth-pam.so openvpn |
客戶端的 conf 檔
client | |
dev tun | |
proto udp | |
remote (伺服器IP) (伺服器port) | |
cipher (所使用的加密) | |
resolv-retry infinite | |
nobind | |
persist-key | |
persist-tun | |
ca ca.crt | |
auth-user-pass | |
comp-lzo | |
verb 3 |
如果要讓客戶端連線時自動輸入帳號密碼可以在客戶端 conf 中的 auth-user-pass
結尾加上 檔案名稱+副檔名
auth-user-pass account.txt
並在同一個目錄底下新增一個 account 的 txt 檔
在第一行打上帳號,第二行打上密碼儲存即可