配置openvpn的nat功能,将10.81.22.0网段(当前内网网段)(不加-s 10.81.22.0-->ip/16-->i子网掩码就表示所有网段)的包转发到ens32-->i网卡名称口
sysctl -p
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno2 -j MASQUERADE
service iptables save
service iptables restart
service openvpn start
chkconfig openvpn on
添加FORWARD白名单
iptables -A FORWARD -i tun+ -j ACCEPT
保存iptables配置
service iptables save
重启iptables
systemctl restart network.service
vim /etc/sysctl.conf
添加下列代码至文件末尾
net.ipv4.ip_forward = 1
vim /etc/sysctl.d/99-sysctl.conf
添加下列代码至文件末尾
net.ipv4.ip_forward = 1
sysctl -p
为vpn安装openvpn及所有所需软件
安装EPEL仓库
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
安装openvpn
yum install openvpn
安装openvpn最新的easy-rsa,该包用来制作ca证书,服务端证书,客户端证书。最新的为easy-rsa3
wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
unzip master.zip
将解压得到的文件夹easy-rsa-master重命名为easy-rsa
mv easy-rsa-mater/ easy-rsa/
然后将的到的easy-ras文件夹复制到/etc/openvpn/目录下
cp -R easy-rsa/ /etc/openvpn/
编辑vars文件,根据自己环境配置
先进入/etc/openvpn/easy-rsa/easyrsa3目录
cp /etc/openvpn/easy-rsa/ easyrsa3/
复制vars.example 为vars
cp vars.example vars
修改下面字段,命令:vi vars,然后修改,最后wq保存
//根据自己情况更改
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "BJ"
set_var EASYRSA_REQ_CITY "BEIJING"
set_var EASYRSA_REQ_ORG "HUANQIU"
set_var EASYRSA_REQ_EMAIL "123@qq.com"
set_var EASYRSA_REQ_OU "My OpenVPN"
创建服务端证书及key
进入/etc/openvpn/easy-rsa/easyrsa3/目录初始化
./easyrsa init-pki
创建根证书
./easyrsa build-ca
注意:在上述部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置个独一无二的。
创建服务器端证书
./easyrsa gen-req server nopass
注:该过程中需要输入common name,随意但是不要跟之前的根证书的一样
签约服务端证书
./easyrsa sign server server
注:该命令中.需要你确认生成,要输入yes,还需要你提供我们当时创建CA时候的密码。如果你忘记了密码,那你就重头开始再来一次吧。
创建Diffie-Hellman,确保key穿越不安全网络的命令
./easyrsa gen-dh
创建客户端证书
进入root目录新建client文件夹,文件夹可随意命名,然后拷贝前面解压得到的easy-ras文件夹到client文件夹,进入下列目录
cd /root/
mkdir client && cd client
cp -R easy-rsa/ client/
cd client/easy-rsa/easyrsa3/
初始化
./easyrsa init-pki
创建客户端key及生成证书(记住生成是自己输入的密码)
./easyrsa gen-req hywx //名字自己定义
将的到的hywx.req导入然后签约证书
进入到/etc/openvpn/easy-rsa/easyrsa3/
cd /etc/openvpn/easy-rsa/easyrsa3/
导入req
./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/hywx.req hywx
签约证书
./easyrsa sign client hywx
注:这里生成client所以必须为client,hywx要与之前导入名字一致
这步很重要,现在说一下我们上面都生成了什么东西(如果文件不全重新执行以上步骤)
服务端:(etc/openvpn/easy-rsa/文件夹)
/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/reqs/server.req
/etc/openvpn/easy-rsa/easyrsa3/pki/reqs/hywx.req
/etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key
/etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key
/etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/issued/hywx.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem
客户端:(root/client/easy-rsa文件夹)
/root/client/easy-rsa/easyrsa3/pki/private/hywx.key
/root/client/easy-rsa/easyrsa3/pki/reqs/hywx.req //这个文件被我们导入到了服务端文件所以那里也有
拷贝这些文件放入到相应位置。将下列文件放到/etc/openvpn/ 目录执行命令
cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn
cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn
将下列文件放到/root/client 目录下执行命令
cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/client
cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/hywx.crt /root/client
cp /root/client/easy-rsa/easyrsa3/pki/private/hywx.key /root/client
为服务端编写配置文件
当你安装好了openvpn时候,他会提供一个server配置的文件例子,在/usr/share/doc/openvpn-2.4.6/sample/sample-config-files下会有一个server.conf文件,我们将这个文件复制到/etc/openvpn
cp /usr/share/doc/openvpn-2.4.6/sample/sample-config-files/server.conf /etc/openvpn
然后修改配置vi server.conf如下
#保留以下内容,其他均注释即可
local 10.81.22.184 #本机ip
port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
comp-lzo
max-clients 100
persist-key
persist-tun
status openvpn-status.log
verb 3
注:每个项目都会有一大堆介绍,上述修改,openvpn提供的server.conf已经全部提供,我们只需要去掉前面的注释#,然后修改我们自己的有关配置。
下载openvpn客户端,并进行配置
用sftp将我们在vps生成的客户端证书和key下载到客户端电脑
ca.crt hywx.crt hywx.key //这三个文件
去官网下载openvpn客户端进行安装,然后安装目录找到simple-config
D:\develop\OpenVPN\sample-config\sample.ovpn
将client.ovpn 复制到D:\develop\OpenVPN\config下,当然我把客户端装在了D盘你根据自己情况选择.
将下载到的三个文件放入D:\develop\OpenVPN\config下然后如下
编辑client.ovpn(可以自行创建该文件将下列内容放进文件中,或只保留下列文件也可以)
client
dev tun
proto tcp
remote 101.254.175.100 18494 #对应openvpn的外网ip以及开放端口
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert hywx.crt
key hywx.key
comp-lzo
ns-cert-type server
route 10.81.22.0 255.255.0.0
verb 3
启动
服务端
systemctl start openvpn@server.service(启动)
systemctl status openvpn@server.service (查看状态)
systemctl restart openvpn@server.service (重启)
lsof -i:1194(查看启动是否成功)
客户端
打开openvpn gui启动,注意在启动后需要输入创建hywx.key时候的密码!我前面让你记住过的。然后进入如下界面
鉴于以上操作,你的openvpn已经应该可以争取运行了如下:
设置使用password登录详解
修改服务器端配置
vim /etc/openvpn/server/server.conf
在配置文件最后面添加如下几行数据
script-security 3 #允许通过环境变量将密码传递给脚本
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env #提供一个用户名密码对
client-cert-not-required #不使用客户端证书,使用密码对
username-as-common-name #使用认证用户名,不使用证书的common name
创建checkpsw.sh脚本,放在/etc/openvpn/路径下
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# 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/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
创建psw-file文件
cd /etc/openvpn
# echo "shenzhen password%1" > psw-file #创建账号密码,可以多行,每行一组
重启服务
客户端配置
client
dev tun
proto tcp
remote 10.81.22.184 1194(对应你的openvpn服务端ip+端口)
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
;cert hywx.crt
;key hywx.key
comp-lzo
ns-cert-type server
route 10.81.22.0 255.255.0.0
verb 3
auth-user-pass #客户端使用账号密码登录
reneg-sec 360000
连接成功