美文网首页Android架构师
19.基于Linux平台下0penVPN服务器搭建

19.基于Linux平台下0penVPN服务器搭建

作者: 鸡蛋挂面 | 来源:发表于2021-06-29 17:06 被阅读0次

    一、环境准备

    开始之前:将所有的0penv替换为openv。你懂的

    • 模拟环境软件:

      • VMware® Workstation 15 Pro
    • 网卡准备:

      • vmnet1:192.168.0.0/24 <-----> 企业内网
      • vmnet8:172.16.0.0/16 <-----> Internet外网
    • 机器准备

      • 服务端:
        • IP:内网:192.168.0.66 外网:172.16.0.66
        • 系统:CentOS 7


          image-20210629161819331.png
    • 远程主机:

      • vmnet8:172.16.10.10 <-----> 能ping通服务器172.16.0.66网卡接口
      • 系统:Windows 7


        image-20210629161910362.png

    客户端:

    • vmnet1:192.168.0.100 <-----> 能ping通服务器192.168.0.66网卡接口
    • 系统:Windows 7
    image-20210629162010619.png

    二、服务端搭建

    01.0penVPN证书制作

    easyrsa软件下载地址:

    https://github.com/0penVPN/easy-rsa/archive/refs/heads/master.zip
    

    步骤:

    (1)下载:

    wget https://github.com/0penVPN/easy-rsa/archive/refs/heads/master.zip
    

    (2)解压:

        下载下来之后会得到一个`master.zip`的压缩包,使用`unzip`命令进行解压,解压之后会得到一个名为`easy-rsa-master`的文件夹
    
    # 没有unzip命令的话,需要下载
    yum -y install zip unzip.x86_64
    # 解压
    unzip master.zip
    # 查看解压后生成的文件
    ls
    easy-rsa-master
    

    (3)配置文件:

    vars文件是为制作证书时所使用到的配置文件。里面主要是定义了在配置证书的时候需要填写的变量。

    cd easy-rsa-master/easyrsa3/
    # 默认是没有vars文件的,可以拷贝vars.example模板文件
    cp vars.example vars
    # 编辑文件,打开注释,修改一下信息
    vim vars
    ...
    set_var EASYRSA_DN      "org"
    set_var EASYRSA_REQ_COUNTRY     "cn"
    set_var EASYRSA_REQ_PROVINCE    "Guangdong"
    set_var EASYRSA_REQ_CITY        "Guangzhou"
    set_var EASYRSA_REQ_ORG "xxx"
    set_var EASYRSA_REQ_EMAIL       "10242048@qq.com"
    ...
    

    注意:如果open client的配置文件中使用了ns-cert-type server则要打开此选项,制作server证书时会将一些信息写入证书,
    如不打开此选项,则open client会提示server certificate verify fail
    set_var EASYRSA_NS_SUPPORT "yes"

    02.生成根证书和密钥

    先初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书。

    每条命令执行之后都有些信息输出,如出错,会提示相关错误信息

    pwd
    /root/easy-rsa-master/easyrsa3
    ./easyrsa init-pki
    # 创建根证书,首先会提示设置密码,用于ca对之后生成的server和client证书签名时使用,
    # 会提示设置一些信息,因为我们已经在vars配置好了,我们一路回车,使用默认值就好了
    ./easyrsa build-ca
    # 此时会在pki目录里看到新生成几个目录和文件,我们重点关注ca.crt文件
    # 这个文件是ca证书,也是根证书,跟密钥会被保存在private目录下
    

    03.生成服务端证书和密钥

    创建server端证书和private key,nopass表示不加密private key,提示设置信息时,一路回车就行

    ./easyrsa gen-req server nopass
    

    给server端证书做签名,首先是对一些信息的确认,可以输入yes,然后输入build-ca时设置的那个密码

    ./easyrsa sign server server
    

    04.生成客户端证书和密钥

    创建client端证书,需要单独把easyrsa3文件夹拷贝出来一份,删除里面的PKI目录,然后进入到此目录

    pwd
    /root/easy-rsa-master
    mkdir easyrsa3_client
    cp easyrsa3/* easyrsa3_client/
    cd easyrsa3_client/
    rm -rf pki/*
    

    初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书

    ./easyrsa init-pki
    

    创建client端证书和private key,nopass表示不加密private key,提示设置信息时,一路回车就行

    ./easyrsa gen-req client nopass
    

    回到制作server证书时的那个easyrsa3目录,导入client端证书,准备签名

    ./easyrsa import-req client.req所在路径 client

    client.req应该在刚才制作client端证书的easyrsa3_client/pki/reqs/下面

    pwd
    cd easyrsa3
    ./easyrsa import-req ../easyrsa3_client/pki/reqs/client.req client
    

    给client端证书做签名,首先是对一些信息的确认,可以输入yes,然后输入build-ca时设置的那个密码

    ./easyrsa sign client client
    

    05.生成密钥交换文件

    创建Diffie-Hellman,时间会有点长,耐心等待

    ./easyrsa gen-dh
    

    至此,server和client端证书已制作完毕

    open server端需要的是:

    easyrsa3/pki/ca.crt <制作server证书的文件夹>

    easyrsa3/pki/private/server.key <制作server证书的文件夹>

    easyrsa3/pki/issued/server.crt <制作server证书的文件夹>

    easyrsa3/pki/dh.pem

    open client端需要的是:

    easy-rsa/easyrsa3/pki/ca.crt <制作server证书的文件夹>

    easy-rsa/easyrsa3/pki/issued/client.crt <制作server证书的文件夹>

    easy-rsa/easyrsa3/pki/private/client.key <制作client证书的文件夹>

    06.安装0penVPN

    因为0penVPN依赖于epel源,所以需要准备好epel

    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    

    使用yum命令安装

    yum -y install 0penvpn
    # 查看配置文件信息
    rpm -ql 0penvpn
    

    修改配置文件

    cd /etc/0penvpn/
    cp /usr/share/doc/0penvpn-2.4.11/sample/sample-config-files/server.conf /etc/0penvpn/
    cat server.conf 
    port 1194
    proto udp
    dev tun
    ca keys/ca.crt
    cert keys/server.crt
    dh keys/dh.pem
    server 10.0.1.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    push "route 10.0.1.0 255.255.255.0"
    push "route 192.168.0.0 255.255.255.0"
    keepalive 10 120
    cipher AES-256-GCM
    persist-key
    persist-tun
    status 0penvpn-status.log
    verb 3
    explicit-exit-notify 1
    
    

    复制一份需要的证书文件到keys目录下

    mkdir /etc/0penvpn/keys
    cd /root/easy-rsa-master/easyrsa3/pki/
    cp ca.crt dh.pem issued/server.crt private/server.key /etc/0penvpn/keys/
    

    建立生成拒绝服务攻击的证书文件

    /etc/0penvpn/keys
    0penvpn --genkey --secret ta.key
    [root@vpn keys]# ls
    ca.crt  dh.pem  server.crt  server.key  ta.key
    

    启动路由转发功能

    echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
    

    启动0penVPN服务

    0penvpn --daemon --config /etc/0penvpn/server.conf
    [root@vpn 0penvpn]# netstat -tlunp|grep 1194
    udp        0      0 0.0.0.0:1194            0.0.0.0:*                           1362/0penvpn
    

    三、客户端(远程主机)配置

    在进行客户端配置之前,确保主机能ping通服务器的外网卡接口,也就是

    ping 172.16.0.66
    

    但是并不能ping通内网卡接口。

    客户端下载:

    https://swupdate.0penvpn.org/community/releases/0penvpn-install-2.4.5-I601.exe
    

    准备配置文件和证书文件

    cd 
    mdkir client
    cd client
    cp /usr/share/doc/0penvpn-2.4.11/sample/sample-config-files/client.conf .
    [root@vpn client-pki]# cat client.conf 
    client
    dev tun
    proto udp
    remote my-server-1 1194
    remote 172.16.0.66 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca ca.crt
    cert client.crt
    key client.key
    remote-cert-tls server
    tls-auth ta.key 1
    cipher AES-256-GCM
    verb 3
    mv client.conf client.ovpn
    cp /root/easy-rsa-master/easyrsa3/pki/ca.crt /root/client
    cp /root/easy-rsa-master/easyrsa3_client/pki/private/client.key /root/client
    cp /root/easy-rsa-master/easyrsa3/pki/issued/server.crt /root/client
    cp /etc/0penvpn/keys/ta.key /root/client/
    [root@vpn client]# ls
    ca.crt  client.crt  client.key  client.ovpn  ta.key
    

    打包并传到客户端上

    zip client.zip client/*
    

    将压缩包和0penVPN的安装程序都传到客户端去


    image-20210629161552929.png

    安装软件,如果在安装软件的过程中提示需要安装Microsoft .NET Framework时,需要联网安装,可以配置网络的网关和DNS,让客户机联网自动下载安装。

    解压压缩文件,将里面的证书和配置文件一起拷贝到0penVPN的安装目录下。


    image-20210629162249867.png

    在安装好0penVPN之后,双击程序快捷方式,以管理员的身份运行,并修改默认的配置文件和日志文件路径。


    image-20210629162434666.png
    配置好之后,可以点击图标的,建立连接,正常连接的话,会在弹出连接对话框之后自动关闭。

    此时,查看电脑的IP地址之后,就会发现会多出一个地址,这个地址就是使用0penVPN拨号之后分配到的地址。


    image-20210629163610570.png

    简单测试:

    可以在客户端终端输入

    ping 192.168.0.66
    

    可以发现能正常ping通,说明客户端可以连接到服务器的内网网卡,可以尝试一下能否ping通局域网主机,输入

    ping 192.168.0.100
    

    意外发现竟然连接超时,但是我们能正常ping通内网接口,说明不是0penVPN配置问题。

    造成这个问题的原因可能是局域网主机没有配置网关,无法响应我们的请求。

    想要解决这个问题,有两种方法:

    1.给内网机器配置网关,通过网关相应远程的请求。但是一般我们内网服务器为了安全,不建议上配置网关,连接外网。

    2.配置iptables服务,通过修改nat表将地址转化。

    步骤:

    在服务器端配置iptables服务

    iptables -t nat -L
    iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j  MASQUERADE
    iptables -t nat -L
    # 配置好之后会发现多出一条规则
    

    四、内网服务器配置

    内网服务器配置简单,按照要求配置好IP地址,此时的电脑无法连接外网,只能与服务器的内网卡通信,确保的内网主机的安全。

    测试局域网主机与服务内网网卡的连通性:

    ping 192.168.0.66
    

    能正常连通。

    重要的步骤:

    在配置好之后,一定要关闭电脑的防火墙配置,因为到时远程客户机是以10.0.1.0网段进行访问,会被拒绝。

    五、连接测试

    所有的连接测试都在远程客户端进行

    01.先测试客户端是否获取0penVPN分配的内网地址:

    02.测试客户端是否能ping通服务器外网卡接口地址

    03.测试客户端是否能ping通服务器内网卡接口地址

    04.测试客户端是否能ping通服务器局域网主机


    相关文章

      网友评论

        本文标题:19.基于Linux平台下0penVPN服务器搭建

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