一、VPN概述

VPN(virtual Private network)即虚拟专用网络,是通过建立一条专用通道进行通信的技术,可以理解为通过建立一条独有的隧道让两边通信。

应用场景

  1. client-to-site(个人对企业),如员工在家,通过VPN访问公司内网机器
  2. site-to-site(企业对企业),如上海与广州分公司内网相互访问

    二、Openvon生成密钥工具

    1、安装easy-rsa

    为了保证OpenVPN的安装,需要使用easy-rsa秘钥生成工具生成证书
    1. apt install easy-rsa -y

    2、准备vars配置文件

    1. mkdir /data/rasy-rsa && cd /data/rasy-rsa
    2. cp /usr/share/easy-rsa/* .
    修改vars.example文件
    vim vars.example
    1. set_var EASYRSA_REQ_COUNTRY "CN"
    2. set_var EASYRSA_REQ_PROVINCE "Shanghai"
    3. set_var EASYRSA_REQ_CITY "shanghai"
    4. set_var EASYRSA_REQ_ORG "wyf"
    5. set_var EASYRSA_REQ_EMAIL "wyf010530@163.com"
    6. set_var EASYRSA_REQ_OU "My Organizational Unit"
    主要修改以上几行内容

    3、初始化生成证书

    1、初始化,在当前目录创建pki目录,用于存储证书
    1. ./easyrsa init-kpi
    2、创建根证书(会提示设置密码,用于ca对之后生成server和client证书签名时使用,需要妥善保存)
    1. ./easyrsa build-ca
    3、创建server端证书和私钥文件(nopass参数表示不加密私钥文件)
    1. ./easyrsa gen-rea server nopass
    4、给server端证书签名
    1. ./easyrsa sign server server
    5、创建Diffie-Hellman文件,密钥交换时的Diffi-Hellman算法
    1. ./easyrsa gen-dh
    6、创建clientt端证书和私钥文件(nopass参数表示不加密私钥文件)
    1. ./easyrsa gen-rea client nopass
    7、给client端证书签名
    1. ./easyrsa sigin client client

    三、OpenVPN服务端部署

    1、安装OpenVPN服务端

    1. apt install openvpn -y

    2、开启内核转发功能

    1. echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    2. systemctl restart networking

    3、编辑server配置文件

    vim /etc/openvpn/server.conf
    1. port 1194
    2. proto udp
    3. dev tun
    4. ca ca.crt
    5. cert server.crt
    6. key server.key
    7. dh dh.pem
    8. server 192.168.24.0 255.255.255.0
    9. push "route 172.1.1.0 255.255.255.0"
    10. ifconfig-pool-persist ipp.txt
    11. keepalive 10 120
    12. max-clients 100
    13. status openvpn-status.log
    14. verb 3
    15. client-to-client
    16. persist-key
    17. persist-tun
    18. duplicate-cn
    配置文件详解:
    1. port 1194 #端口
    2. proto udp #协议
    3. dev tun #采用路由隧道模式tun
    4. ca ca.crt #ca证书文件相对路径
    5. cert server.crt #服务端公钥名称
    6. key server.key #服务端私钥名称
    7. dh dh.pem #交换证书
    8. server 192.168.1.0 255.255.255.0 #给客户端分配的地址池
    9. push "route 192.168.122.0 255.255.255.0" #运行客户端访问的内网网段
    10. ifconfig-pool-persist ipp.txt #地址池记录文件位置
    11. keepalive 10 120 #存活时间,10秒ping一次,如120秒未收到相应则视为断线
    12. max-clients 100 #最多运行100各客户端连接
    13. status openvpn-status.log #日志记录的相对路径
    14. verb 3 #openvpn的版本
    15. client-to-client #客户端与客户端之间支持通信
    16. persist-key #通过keeplive检测超时后,重启vpn,不重新读取keys,保留第一次使用的keys
    17. persist-tun #检测超时后,重启vpn,一直保持tun时linkup,否则网络会先link down在link up
    18. duplicate-cn #允许多个客户端使用同一个VPN帐号连接服务端

    4、拷贝证书

    根据server.conf中的定义,将需要用到的证书拷贝到server.conf同级目录下
    cp /data/easy-rsa/pki/ca.crt    .
    cp /data/easy-rsa/pki/issied/server.crt    .
    cp /data/easy-rsa/pki/private/server.key    .
    cp /data/easy-rsa/pki/dh.pem    .
    

    5、启动OpenVPN服务

    先设置启动文件再启动
    systemctl -f enable openvpn@server.serivce
    systemctl start openvpn@server.serivce
    

    四、Windows客户端连接OpenVPN

    OpenVPN客户端下载地址:Download_OpenVPN

    1、导出服务端生成的客户端密钥

    sz /data/easy-rsa/pki/ca.crt
    sz /data/easy-rsa/pki/issued/client.crt
    sz /data/easy-rsa/pki/private/client.key
    

    2、配置client

    将客户端密钥放至C:\Program Files\OpenVPN\config下,并新编辑client.ovpn文件如下
    client
    dev    tun
    proto    udp
    remote    (外网IP) 1194
    resolv-retry infinite
    nobind
    ca    ca.crt
    cert    client.crt
    key    client.key
    verb    3
    persist-key
    persist-tun
    
    配置文件详解:
    client                #指定当前是vpn客户端
    dev    tun                #采用路由隧道模式tun
    proto    udp            #协议
    remote    221.194.44.132 1194        #openvpn服务器IP 端口
    resolv-retry infinite                    #断线自动重连
    nobind                #不绑定本地特定的端口号
    ca    ca.crt        #ca证书文件相对路径
    cert    client.crt    #服务端公钥名称
    key    client.key        #服务端私钥名称
    dh    dh.pem                #交换证书
    verb    3                #openvpn的版本
    persist-key                #通过keeplive检测超时后,重启vpn,不重新读取keys,保留第一次使用的keys
    persist-tun                #检测超时后,重启vpn,一直保持tun时linkup,否则网络会先link down在link up
    

    3、启动客户端连接

    image.png
    测试连接内网服务器
    image.png

五、让客户端访问服务端内网网段

在服务端添加iptables规则

iptables -I FORWARD -i tun1 -j ACCEPT