配置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

连接成功