openvpn

作者: 尘曦的雨 | 来源:发表于2017-08-13 20:36 被阅读195次

    一、
    openvpn原理
    二、安装
    openvpn
    三、制作相关证书
    3.1 制作
    CA证书
    3.2 制作
    Server端证书
    3.3 制作
    Client端证书
    四、配置
    Server端
    五、配置
    Client端
    5.1 在Windows系统上
    5.2 在
    OpenVPN server上
    5.3 配置
    client段配置文件
    openvpn通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的。这种方式称为TLS加密

    openvpn使用TLS加密的工作过程是,首先VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN连接。

    然后使用对方的
    CA证书,把自己目前使用的数据加密方法加密后发送给对方,由于使用的是对方CA证书加密,所以只有对方CA证书对应的Private key才能解密该数据,这样就保证了此密钥的安全性,并且此密钥是定期改变的,对于窃听者来说,可能还没有破解出此密钥,VPN通信双方可能就已经更换密钥了。

    yum方式安装,此处统一使用aliyun中centos和epel源
    二、安装
    openvpn
    yum方式安装,此处统一使用aliyun中centos和epel源

    rm /etc/yum.repos.d/* -fr

    
    # vim /etc/yum.repos.d/ali.repo
    
     
    
    [centos6]
    
    name=centeros6 base
    
    baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/
    
    gpgcheck=0
    
    [epel]
    
    name=epel base
    
    baseurl=http://mirrors.aliyun.com/epel/6/x86_64
    
    gpgcheck=0
    
    为避免出现错误,关闭
    selinux
    
    # setenforce 0;sed -i 's/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
    
    开始安装
    openvpn server
    
    # yum install -y openvpn
    
    openvpn安装完毕后,我们来查看openvpn的版本,如下:
    
    # openvpn --version
    
    OpenVPN 2.3.10 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jan  4 2016
    
    library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.03
    
    Originally developed by James Yonan
    
    Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
    
    Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_pthread=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_iproute_path=/sbin/ip with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no
    
    openvpn安装完毕后,我们再来安装easy-rsa。
    
    easy-rsa是用来制作openvpn相关证书的。
    
    安装
    easy-rsa,使用如下命令:
    
    # yum install -y easy-rsa
    
    查看
    easy-rsa安装的文件,如下:
    
    [root@centos6 openvpn]# rpm -ql easy-rsa
    
    /usr/share/doc/easy-rsa-2.2.2
    
    /usr/share/doc/easy-rsa-2.2.2/COPYING
    
    /usr/share/doc/easy-rsa-2.2.2/COPYRIGHT.GPL
    
    /usr/share/doc/easy-rsa-2.2.2/doc
    
    /usr/share/doc/easy-rsa-2.2.2/doc/Makefile.am
    
    /usr/share/doc/easy-rsa-2.2.2/doc/README-2.0
    
    /usr/share/easy-rsa
    
     
    
    /usr/share/easy-rsa/2.0/build-ca
    
    /usr/share/easy-rsa/2.0/build-dh
    
    /usr/share/easy-rsa/2.0/build-inter
    
    /usr/share/easy-rsa/2.0/build-key
    
    /usr/share/easy-rsa/2.0/build-key-pass
    
    /usr/share/easy-rsa/2.0/build-key-pkcs12
    
    /usr/share/easy-rsa/2.0/build-key-server
    
    /usr/share/easy-rsa/2.0/build-req
    
    /usr/share/easy-rsa/2.0/build-req-pass
    
    /usr/share/easy-rsa/2.0/clean-all
    
    /usr/share/easy-rsa/2.0/inherit-inter
    
    /usr/share/easy-rsa/2.0/list-crl
    
    /usr/share/easy-rsa/2.0/openssl-0.9.6.cnf
    
    /usr/share/easy-rsa/2.0/openssl-0.9.8.cnf
    
    /usr/share/easy-rsa/2.0/openssl-1.0.0.cnf
    
    /usr/share/easy-rsa/2.0/pkitool
    
    /usr/share/easy-rsa/2.0/revoke-full
    
    /usr/share/easy-rsa/2.0/sign-req
    
    /usr/share/easy-rsa/2.0/vars
    
    /usr/share/easy-rsa/2.0/whichopensslcnf
    
    我们可以看到
    easy-rsa已经安装到/usr/share/easy-rsa/目录下。
    
    **三、制作相关证书
    ****
    **
    根据第一章节
    openvpn的工作原理,我们可以知道openvpn的证书分为三部分:CA证书、Server端证书、Client端证书。 下面我们通过easy-rsa分别对其进行制作。
    
    openvpn与easy-rsa安装完毕后,我们可以直接在/usr/share/easy-rsa/2.0 制作相关的证书,但是为了后续的管理证书的方便,我们需要在/etc/openvpn/目录下创建easy-rsa文件夹, 然后把/usr/share/easy-rsa/目录下的所有文件全部复制到/etc/openvpn/easy-rsa/下:
    
    # mkdir /etc/openvpn/easy-rsa/
    
    # cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
    
    # ll /etc/openvpn/easy-rsa/
    
    total 116
    
    -rwxr-xr-x. 1 root root   119 Apr 20 15:15 build-ca
    
    -rwxr-xr-x. 1 root root   352 Apr 20 15:15 build-dh
    
    -rwxr-xr-x. 1 root root   188 Apr 20 15:15 build-inter
    
    -rwxr-xr-x. 1 root root   163 Apr 20 15:15 build-key
    
    -rwxr-xr-x. 1 root root   157 Apr 20 15:15 build-key-pass
    
    -rwxr-xr-x. 1 root root   249 Apr 20 15:15 build-key-pkcs12
    
    -rwxr-xr-x. 1 root root   268 Apr 20 15:15 build-key-server
    
    -rwxr-xr-x. 1 root root   213 Apr 20 15:15 build-req
    
    -rwxr-xr-x. 1 root root   158 Apr 20 15:15 build-req-pass
    
    -rwxr-xr-x. 1 root root   449 Apr 20 15:15 clean-all
    
    -rwxr-xr-x. 1 root root  1471 Apr 20 15:15 inherit-inter
    
    drwx------. 2 root root  4096 Apr 26 21:31 keys
    
    -rwxr-xr-x. 1 root root   302 Apr 20 15:15 list-crl
    
    -rw-r--r--. 1 root root  7791 Apr 20 15:15 openssl-0.9.6.cnf
    
    -rw-r--r--. 1 root root  8348 Apr 20 15:15 openssl-0.9.8.cnf
    
    -rw-r--r--. 1 root root  8245 Apr 20 15:15 openssl-1.0.0.cnf
    
    -rwxr-xr-x. 1 root root 12966 Apr 20 15:15 pkitool
    
    -rwxr-xr-x. 1 root root   928 Apr 20 15:15 revoke-full
    
    -rwxr-xr-x. 1 root root   178 Apr 20 15:15 sign-req
    
    -rw-r--r--. 1 root root  2042 Apr 20 17:01 vars
    
    -rwxr-xr-x. 1 root root   740 Apr 20 15:15 whichopensslcnf
    
    在开始制作
    CA证书之前,我们还需要编辑vars文件,修改如下相关选项内容即可。如下:
    
    # vim /etc/openvpn/easy-rsa/vars 
    
    export KEY_COUNTRY="CN"    国家
    
    export KEY_PROVINCE="BJ"   省份
    
    export KEY_CITY="Changpin"  城市
    
    export KEY_ORG="kaohe"  组织
    
    export [KEY_EMAIL="caizl@msgcopy.com"](mailto:KEY_EMAIL=\"caizl@msgcopy.com\")  邮箱地址
    
    export KEY_OU="kaohe" 单元名
    
    export KEY_NAME="openvpn"  名字
    
     vars文件主要用于设置证书的相关组织信息,引号部分的内容可以根据自己的实际情况自行修改。
    
    然后使用
    source vars命令使其生效。
    
    注意:执行
    clean-all命令会删除,当前目录下
    keys
    文件夹里证书等文件。
    
    #cd /etc/openvpn/easy-rsa/
    
    # source vars.
    
    # ./clean-all
    
     
    
    现在开始正式制作
    CA证书,使用如下命令:
    
    # ./build-ca
    
    Generating a 2048 bit RSA private key
    
    ............................................................................................................+++
    
    ........................................+++
    
    writing new private key to 'ca.key'
    
    -----
    
    You are about to be asked to enter information that will be incorporated
    
    into your certificate request.
    
    What you are about to enter is what is called a Distinguished Name or a DN.
    
    There are quite a few fields but you can leave some blank
    
    For some fields there will be a default value,
    
    If you enter '.', the field will be left blank.
    
    -----
    
    Country Name (2 letter code) [CN]:
    
    State or Province Name (full name) [BJ]:
    
    Locality Name (eg, city) [TZ]:
    
    Organization Name (eg, company) [CTG]:
    
    Organizational Unit Name (eg, section) [openvpn]:
    
    Common Name (eg, your name or your server's hostname) [CTG CA]:
    
    Name [openvpn]:
    
    Email Address [admin@admin.com]:
    
    一路按回车键即可。制作完成后,我们可以查看
    keys目录
    
     
    
     ll /etc/openvpn/easy-rsa/keys/
    
    total 32
    
    -rw-r--r--. 1 root root 1639 Apr 27 13:06 ca.crt
    
    -rw-------. 1 root root 1704 Apr 27 13:06 ca.key
    
    -rw-r--r--. 1 root root  341 Apr 26 21:31 index.txt
    
    -rw-r--r--. 1 root root   21 Apr 25 23:16 index.txt.attr
    
    -rw-r--r--. 1 root root   21 Apr 25 23:16 index.txt.attr.old
    
    -rw-r--r--. 1 root root 2131 Apr 25 23:16 index.txt.old
    
    -rw-r--r--. 1 root root3 Apr 25 23:16 serial
    
    -rw-r--r--. 1 root root3 Apr 25 23:16 serial.old
    
    vim /etc/openvpn/easy-rsa/vars 
    
       85  cd /etc/openvpn/easy-rsa/
    
       86  source vars
    
       87  ./clean-all   清空原有证书
    
       88   ./build-ca    制作
    ca证书
    
       89  ./build-key-server server   制作服务器端秘钥
    
       90  ./build-key-pass chenxi1    制作客户端秘钥
     chenxi1 拨号
    登录用户名;用这个命令回车后会让你输入客户端密码;
    ./build-key 这个命令不用输入客户端密码也就不给客户端设密码了
    
       91  ./build-dh    制作交换秘钥文件
    执行时间可能有点长
    
            cp -ap keys/ /etc/openvpn/
    
    cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/server.conf /etc/openvpn/server.conf.bak
    
    cp /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf /etc/openvpn/client.conf.bak
    
     
    
    grep -vE "^#|^;|^$" server.conf.bak > server.conf
    
    vim server.conf
    
    local 172.16.253.50   外网
    ip
    
    port 1194   默认端口
    
    proto tcp     协议默认它是
    udp
    
    dev tun        采用路由模式可选
    tap tun
    
    ca /etc/openvpn/keys/ca.crt   ca路径 可以相对路径;相对当前文件所处的路径
    
    cert /etc/openvpn/keys/server.crt   服务器端证书
    
    key /etc/openvpn/keys/server.key  服务器端的私钥
    
    dh /etc/openvpn/keys/dh2048.pem   交换秘钥的文件
    
    server 10.8.0.0 255.255.255.0  客户端拨号后服务器端安照这个地址池给客户端分配地址;这个网不要和任何网段冲突
    默认就好
    
           
    
    push "route 192.168.75.0 255.255.255.0"   表示把次路由推送客户端;这个路由就是
    VPN服务器所在内网的网段
    
    ifconfig-pool-persist ipp.txt
    
    keepalive 10 120
    
    comp-lzo
    
    persist-key
    
    persist-tun
    
    status openvpn-status.log
    
    verb 3    协议版本
    
    duplicate-cn
    
    log /var/log/openvpn.log
    
    iptables -F
    
     /usr/sbin/openvpn --config /etc/openvpn/server.conf 
    
    service openvpn start  它会启动失败因为
    
    应该改配置
    init.d的
    openVPN
    的启动文件
    
     
    
    162行
    
     
    
    for c in `/bin/ls *.conf 2>/dev/null`;
    
    更改为
    
    for c in `/bin/ls server.conf 2>/dev/null`;
    
    service openvpn start 启动
    
    ss -nlt   查一下端口
    
    State       Recv-Q Send-Q                            Local Address:Port                              Peer Address:Port 
    
    LISTEN      0      1                                 172.16.253.50:1194                                         *:*  
    
    启动后服务器端会多一个虚拟网卡
    
     
    
        [root@root keys]# ip a
    
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    
        inet 127.0.0.1/8 scope host lo
    
        inet6 ::1/128 scope host 
    
           valid_lft forever preferred_lft forever
    
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    
        link/ether 00:0c:29:77:c1:89 brd ff:ff:ff:ff:ff:ff
    
        inet 192.168.75.129/24 brd 192.168.75.255 scope global eth0
    
        inet6 fe80::20c:29ff:fe77:c189/64 scope link 
    
           valid_lft forever preferred_lft forever
    
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    
        link/ether 00:0c:29:77:c1:93 brd ff:ff:ff:ff:ff:ff
    
        inet 172.16.253.50/16 brd 172.16.255.255 scope global eth1
    
        inet6 fe80::20c:29ff:fe77:c193/64 scope link 
    
           valid_lft forever preferred_lft forever
    
    7: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    
        link/[65534] 
    
        inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
    
     
    
    客户端的配置文件
    
    grep -vE "^#|^;|^$" client.conf.bak> client.conf
    
    客户端的配置文件应改成下面的文件
    
    vim client.conf
    
    client
    
    dev tun
    
    proto tcp
    
    remote 172.16.253.50 1194
    
    resolv-retry infinite
    
    nobind
    
    persist-key
    
    persist-tun
    
    ca ca.crt
    
    cert chenxi1.crt
    
    key chenxi1.key
    
    ns-cert-type server
    
    comp-lzo
    
    verb 3
    

    传到客户端
    客户端下载地址:
    https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/vpntech/openvpn-2.1.1-gui-1.0.3-install-cn-64bit.zip
    解压安装


    [root@root ~]# cd /etc/openvpn/keys/


    还有客户端的配置文件;当然也可手写注意此文件的后缀必须是ovpn结尾;前缀叫什么没有太大要求

    Paste_Image.png

    服务器端打开路由转发功能
    vim/etc/sysctl.conf


    sysctl -p 让其生效
    内网主机网关指向openVPN服务器端
    这样外网主机便可和内网通信了

    相关文章

      网友评论

          本文标题:openvpn

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