【www.bbyears.com--CentOS】
OpenVPN是不同于PPTP、L2TP的另一种VPN软件包,基于SSL的VPN。OpenVPN使用需要客户端支持。这里系统为CentOS6.4。
一、检查OpenVPN所需环境
OpenVPN需要TUN设备支持,还需要iptables的nat模块支持。
1、检查TUN模块:
modinfo tun
显示如下:
如果报错则不支持TUN设备。 2、在OpenVZ虚拟化的VPS上,需要管理员在母鸡上打开TUN/TAP设备。
cat /dev/net/tun
如果返回:
cat: /dev/net/tun: File descriptor in bad state
VPS的TUN/TAP已经可以使用。
如果返回:
cat: /dev/net/tun: No such device
或者其它,说明TUN/TAP设备没有被正确配置,需要与客服沟通开通TUN/TAP。
3、检查OpenVZ的VPS上iptables是否支持:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE
如果返回:
iptables: Unknown error 4294967295
说明支持。
二、编译安装OpenVPN
1、安装依赖环境
yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig
2、安装OpenVPN
wget -c http://swupdate.openvpn.org/community/releases/openvpn-2.3.0.tar.gz tar zxvf openvpn-2.3.0.tar.gz cd openvpn-2.3.0 ./configure make make install mkdir –p /etc/openvpn cp -Rf sample /etc/openvpn/ cd ..
单独下载easy-rsa,制作ca证书,服务端证书,客户端证书
#openvpn-2.3.0.tar.gz 该版本源码不包含easy-rsa,所以需要单独下载安装 easy-rsa wget -c https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master mv easy-rsa-master easy-rsa cp -Rf easy-rsa /etc/openvpn cd /etc/openvpn/easy-rsa/easy-rsa/2.0
三、生成密钥和证书
vim vars #调到最后找到一下代码 export KEY_COUNTRY="CN" export KEY_PROVINCE="JN" export KEY_CITY="DZ" export KEY_ORG="lvtao" export KEY_EMAIL="admin@lvtao.net" export KEY_OU="lvtao" #x!保存退出 ln -s openssl-1.0.0.cnf openssl.cnf chmod +x vars source ./vars ./clean-all #制作ca证书 ./build-ca #制作服务端证书 ./build-key-server server #制作客户端证书 ./build-key client1 ./build-dh #打包keys tar zcvf keys.tar.gz keys/ #终端发送到客户端备用 sz keys.tar.gz
#keys中的文件说明
Filename
Needed By
Purpose
Secret
ca.crt
server + all clients
Root CA certificate
NO
ca.key
key signing machine only
Root CA key
YES
dh{n}.pem
server only
Diffie Hellman parameters
NO
server.crt
server only
Server Certificate
NO
server.key
server only
Server Key
YES
client1.crt
client1 only
Client1 Certificate
NO
client1.key
client1 only
Client1 Key
YES
cd /etc/openvpn/sample/sample-config-files/ cp server.conf ../../ #配置server.conf,具体参数不再累述 vi ../../server.conf #复制keys cd /etc/openvpn/easy-rsa/easy-rsa/2.0/keys cp -Rf ca.crt server.crt server.key dh2048.pem /etc/openvpn/ # 编辑/etc/sysctl.conf,找到net.ipv4.ip_forward = 0改成net.ipv4.ip_forward = 1保存。然后执行: sysctl –p #设置nat转发.注意最后192.168.122.180改成你的服务器的IP地址。 iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -j SNAT --to-source 192.168.122.180 /etc/init.d/iptables save /etc/init.d/iptables restart
PS:如果iptables save报错
iptables: Saving firewall rules to /etc/sysconfig/iptables: /etc/init.d/iptables: line 268: restorecon: command not found
要安装一个软件包:
yum install policycoreutils 设置OpenVPN开机自启动
echo "/usr/local/sbin/openvpn --config /etc/openvpn/easy-rsa/2.0/conf/server.conf &" >> /etc/rc.local
启动OpenVPN
/usr/local/sbin/openvpn --config /etc/openvpn/easy-rsa/2.0/conf/server.conf >/dev/null 2>&1 &
使用密码登录配置
修改openvpn服务主配置文件,添加如下内容;如果加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录!
tail -3 /etc/openvpn/server.conf auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env client-cert-not-required username-as-common-name
验证用户登录脚本并进行相应的修改,主要改PASSFILE和LOG_FILE两个变量
#!/bin/sh ########################################################### # checkpsw.sh (C) 2004 Mathias Sundman# # This script will authenticate OpenVPN users against # a plain text file. The passfile should simply contain # one row per user with the username first followed by # one or more space(s) or tab(s) and then the password. PASSFILE="/etc/openvpn/psw-file" LOG_FILE="/var/log/openvpn-password.log" TIME_STAMP=`date "+%Y-%m-%d %T"` ########################################################### if [ ! -r "${PASSFILE}" ]; then echo "${TIME_STAMP}: Could not open password file "${PASSFILE}" for reading." >> ${LOG_FILE} exit 1 fi CORRECT_PASSWORD=`awk "!/^;/&&!/^#/&&$1==""${username}""{print $2;exit}" ${PASSFILE}` if [ "${CORRECT_PASSWORD}" = "" ]; then echo "${TIME_STAMP}: User does not exist: username="${username}", password="${password}"." >> ${LOG_FILE} exit 1 fi if [ "${password}" = "${CORRECT_PASSWORD}" ]; then echo "${TIME_STAMP}: Successful authentication: username="${username}"." >> ${LOG_FILE} exit 0 fi echo "${TIME_STAMP}: Incorrect password: username="${username}", password="${password}"." >> ${LOG_FILE} exit 1
准备用户名和密码认证文件,用户名和密码用空格隔开,同时确保openvpn启动用户可读取该文件
vi psw-file lvtao 954270
配置权限
chmod 400 psw-file chown nobody.nobody psw-file
修改客户端配置文件
注释掉
;cert lvtao.crt ;key lvtao.key
增加询问用户名和密码
auth-user-pass