美文网首页
CentOS7安装部署Openvpn

CentOS7安装部署Openvpn

作者: super_pcm | 来源:发表于2019-10-18 12:02 被阅读0次

    本文主要参考的博客文章链接 https://www.fandenggui.com/post/centos7-install-openvpn.html

    网上多数的Openvpn例子都是基于客户端密钥认证的,多个客户那就要多个密钥,这样配置服务端或者客户端都非常麻烦。这里使用账号密码认证来配置,可以轻松实现多人登录使用VPN。


    1. 软件版本

    • Centos - 7.4
    • easy-rsa - 3.0.6
    • OpenVPN - 2.4.7

    2. 安装

    本文使用yum来安装openvpn,openvpn及其依赖的一些包在epel源上,首先先安装epel源。

    #安装epel源
    yum install -y epel-release
    #安装依赖包
    yum install -y openssl lzo pam openssl-devel lzo-devel pam-devel
    yum install -y easy-rsa
    #安装openvpn
    yum install -y openvpn
    

    3. 配置

    上面我们已经安装好了openvpn了,下面我们对openvpn进行配置。

    3.1 使用路由还是桥接?

    建议使用路由,除非你有一些需要桥接的特定场景,例如:

    • VPN需要能够处理非ip协议,如IPX
    • 通过VPN运行应用程序,该VPN依赖于网络广播(如局域网游戏)
    • 希望允许跨VPN浏览Windows文件共享,而无需设置Samba或WINS服务器

    3.2 确定私有子网

    Server 与 Client 的VPN通道子网,不要与已有环境的网络冲突即可。

    默认:10.8.0.0/16

    3.3 配置证书密钥

    我们通过yum方式安装的 easy-rsa 版本是3.0.6,直接从安装路径copy一份工具出来。这里用默认的 easy-rsa 3.0.6 来配置生成证书密钥。

    #复制easy-rsa工具
    cp -rf /usr/share/easy-rsa/3.0.6 /etc/openvpn/server/easy-rsa
    cd /etc/openvpn/server/easy-rsa
    #生成证书密钥
    ./easyrsa init-pki
    ./easyrsa build-ca nopass
    ./easyrsa build-server-full server nopass
    #下面这步可能要几分钟
    ./easyrsa gen-dh
    openvpn --genkey --secret ta.key
    

    3.4 配置 Server 端

    3.4.1 创建使用的目录

    # 日志存放目录
    mkdir -p /var/log/openvpn/
    # 用户管理目录
    mkdir -p /etc/openvpn/server/user
    # 配置权限
    chown -R openvpn:openvpn /var/log/openvpn
    

    3.4.2 创建Server配置文件

    编辑/etc/openvpn/server/server.conf文件,并写入以下内容:
    (也可以复制一份模板文件进行改写,模板文件路径 /usr/share/doc/openvpn-2.4.7/sample/sample-config-files/server.conf)

    port 55555
    proto tcp
    dev tun
    user openvpn
    group openvpn
    
    #配置证书信息
    ca /etc/openvpn/server/easy-rsa/pki/ca.crt
    cert /etc/openvpn/server/easy-rsa/pki/issued/server.crt
    key /etc/openvpn/server/easy-rsa/pki/private/server.key
    dh /etc/openvpn/server/easy-rsa/pki/dh.pem
    tls-auth /etc/openvpn/server/easy-rsa/ta.key 0
    
    #配置账号密码的认证方式
    auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env
    script-security 3
    verify-client-cert none
    username-as-common-name
    client-to-client
    duplicate-cn
    
    #配置网络信息
    server 10.8.0.0 255.255.255.0
    push "dhcp-option DNS 223.5.5.5"
    push "dhcp-option DNS 114.114.114.114"
    push "route 192.168.1.0 255.255.255.0"
    push "route 192.168.2.0 255.255.255.0"
    
    compress lzo
    cipher AES-256-CBC
    keepalive 10 120
    persist-key
    persist-tun
    verb 3
    
    log /var/log/openvpn/server.log
    log-append /var/log/openvpn/server.log
    status /var/log/openvpn/status.log
    

    3.4.3 创建用户密码文件

    格式是用户 密码以空格分割即可

    echo 'mytest mytestpass' >> /etc/openvpn/server/user/psw-file
    chmod 600 /etc/openvpn/server/user/psw-file
    chown openvpn:openvpn /etc/openvpn/server/user/psw-file
    

    3.4.4 创建密码检查脚本

    新建一个shell文件/etc/openvpn/server/user/checkpsw.sh,内容如下:

    #!/bin/sh
    
    PASSFILE="/etc/openvpn/server/user/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
    

    赋予可执行的权限

    chmod 700 /etc/openvpn/server/user/checkpsw.sh
    chown openvpn:openvpn /etc/openvpn/server/user/checkpsw.sh
    

    3.4.5 防火墙配置

    需要配置一条NAT的规则,这里我使用的是iptables,下面也有firewalld的示例:

    • iptables
    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    
    • firewalld
    firewall-cmd --permanent --add-masquerade
    firewall-cmd --permanent --add-service=openvpn
    # 或者添加自定义端口
    # firewall-cmd --permanent  --add-port=1194/tcp
    firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    firewall-cmd --reload
    

    3.4.6 启动服务

    nohup openvpn /etc/openvpn/server/server.conf >/dev/null 2>&1 &
    

    3.5 配置客户端

    客户端我们同样使用2.4.7的版本,下载点我

    因为我们前面配置的是账号密码认证,所以我们只需要下载ca.crt、ta.key文件即可,从server上将生成的ca.crtta.key下载到客户端的安装目录 config下。
    在config目录下新建一个文件 client.ovpn,文件内容如下:

    client
    proto tcp
    dev tun
    auth-user-pass
    remote your.domain.com 55555
    ca ca.crt
    tls-auth ta.key 1
    remote-cert-tls server
    cipher AES-256-CBC
    auth-nocache
    persist-tun
    persist-key
    compress lzo
    verb 3
    mute 10
    

    保存退出之后,我们启动openvpn的客户端,然后输入账号密码即可登录。

    相关文章

      网友评论

          本文标题:CentOS7安装部署Openvpn

          本文链接:https://www.haomeiwen.com/subject/axzbmctx.html