美文网首页
Openvpn构建线上局域网

Openvpn构建线上局域网

作者: 后知不觉1 | 来源:发表于2021-11-25 17:52 被阅读0次

    前提条件

    • 一条公网ip
    • 局域网内部一台服务器A
    • 公网绑定到A

    局域网架构及原理

    • vpn原理:与ssl协议类似,ssl协议是将443端口加密,vpn是对client到server整个链路加密
    • openvpn原理:使用虚拟网卡技术,将局域网ip段映射到client端,在client访问时局域网内机器拦截虚拟网卡数据包由server端真实网卡转发出去,实现client到局域网内的访问


      image.png

    Openvpn搭建

    参考大佬链接,搭建没有问题,在调试阶段不对 CentOS 7 搭建OpenVPN服务器_Centos7搭建vpn | abcdocker运维博客 (i4t.com)

    1、证书制作

    1.1、安装制作证书工具
    mkdir /data/tools -p  #创建工作目录
    wget -P /data/tools http://down.i4t.com/easy-rsa.zip
    unzip -d /usr/local /data/tools/easy-rsa.zip
    
    1.2、修改变量
    cd /usr/local/easy-rsa-old-master/easy-rsa/2.0
    vim vars
    export KEY_COUNTRY="cn"
    export KEY_PROVINCE="BJ"
    export KEY_CITY="BJ"
    export KEY_ORG="abcdocker"
    export KEY_EMAIL="cyh@i4t.com"
    export KEY_CN=abc
    export KEY_NAME=abc
    export KEY_OU=abc
    
    
    #初始化环境边看
    source vars
    ./clean-all
     
    #注意:执行clean-all命令会在当前目录下创建一个名词为keys的目录如果存在会删除内容
    
    1.3、创建根证书
    ./build-ca
     
    # 生成根证书ca.crt和根密钥ca.key
    #因为在vars中填写了证书的基本信息,所以这里一路回车即可
    
    1.4、创建服务端证书
    #为服务端生成证书和密钥
    #一直回车,2个Y
     ./build-key-server server
    
     ....
    An optional company name []:
    Using configuration from /usr/local/easy-rsa-old-master/easy-rsa/2.0/openssl-1.0.0.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName           :PRINTABLE:'cn'
    stateOrProvinceName   :PRINTABLE:'BJ'
    localityName          :PRINTABLE:'BJ'
    organizationName      :PRINTABLE:'abcdocker'
    organizationalUnitName:PRINTABLE:'abc'
    commonName            :PRINTABLE:'abc'
    name                  :PRINTABLE:'abc'
    emailAddress          :IA5STRING:'cyh@i4t.com'
    Certificate is to be certified until Jan 31 14:01:35 2030 GMT (3650 days)
    Sign the certificate? [y/n]:y
     
     
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    
    1.5、制作client端证书
    #每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
    #为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
    ./build-key client1
    ./build-key client2
    

    每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只可以一个客户端连接(可以修改配置文件)

    1.6、现在为服务器生成加密交换时的Diffie-Hellman文件

    生成过程比较慢,在此期间不要去中断它

    ./build-dh
    # 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
    
    1.7、创建完成后证书目录如下
    [root@abc01 2.0]# ll keys
    total 84
    -rw-r--r-- 1 root root 7997 Feb  3 09:01 01.pem
    -rw-r--r-- 1 root root 7880 Feb  3 09:09 02.pem
    -rw-r--r-- 1 root root 7997 Feb  3 09:01 abc.crt
    -rw-r--r-- 1 root root 1765 Feb  3 09:01 abc.csr
    -rw------- 1 root root 3272 Feb  3 09:01 abc.key
    -rw-r--r-- 1 root root 2293 Feb  3 09:01 ca.crt
    -rw------- 1 root root 3272 Feb  3 09:01 ca.key
    -rw-r--r-- 1 root root  424 Feb  3 09:06 dh2048.pem
    -rw-r--r-- 1 root root  211 Feb  3 09:09 index.txt
    -rw-r--r-- 1 root root   21 Feb  3 09:09 index.txt.attr
    -rw-r--r-- 1 root root   21 Feb  3 09:01 index.txt.attr.old
    -rw-r--r-- 1 root root  105 Feb  3 09:01 index.txt.old
    -rw-r--r-- 1 root root    3 Feb  3 09:09 serial
    -rw-r--r-- 1 root root    3 Feb  3 09:01 serial.old
    -rw-r--r-- 1 root root 7880 Feb  3 09:09 test.crt
    -rw-r--r-- 1 root root 1765 Feb  3 09:09 test.csr
    -rw------- 1 root root 3272 Feb  3 09:09 test.key
    

    2、openvpn server端安装配置

    2.1、安装
    yum install -y openvpn
    
    2.2、配置服务端
    2.2.1、生成tls-auth key并将其拷贝到证书目录中
    openvpn --genkey --secret ta.key
    
    2.2.2、证书位置移动
    mv ./ta.key /etc/openvpn/keys/
    cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/{server.crt,server.key,ca.crt,dh2048.pem} /etc/openvpn/keys/
    
    #验证
    [root@k8s-01 ~]# ll /etc/openvpn/keys/
    total 24
    -rw-r--r-- 1 root root 2342 Feb  3 12:48 ca.crt
    -rw-r--r-- 1 root root  424 Feb  3 12:48 dh2048.pem
    -rw-r--r-- 1 root root 8089 Feb  3 12:48 server.crt
    -rw------- 1 root root 3272 Feb  3 12:48 server.key
    -rw------- 1 root root  636 Feb  3 12:47 ta.key
    
    2.2.3、服务端配置文件
    touch /etc/openvpn/server.conf
    
    vim /etc/openvpn/server.conf
    
    port 1194       #openVPN端口
    proto tcp       #tcp连接
    dev tun         #生成tun0虚拟网卡
     
    ca keys/ca.crt      #相关证书配置路径(可以修改为全路径/etc/openvpn/keys)
    cert keys/server.crt
    key keys/server.key  # This file should be kept secret
    dh keys/dh2048.pem
     
    server 10..0.0 255.255.255.0   #默认虚拟局域网网段,不要和实际的局域网冲突就可以
    ifconfig-pool-persist ipp.txt     
     
    push "route 192.168.10.0 255.255.255.0"    #可以通过局域网内的ip路由的映射到客户端
    client-to-client                 #如果客户端都是用一个证书和密钥连接VPN,需要打开这个选项
    duplicate-cn
    keepalive 10 120
    tls-auth keys/ta.key 0 # This file is secret
    comp-lzo
     
    persist-key
    persist-tun
     
    status /var/log/openvpn/openvpn-status.log   #状态日志路径,路径要存在
    log-append  /var/log/openvpn/openvpn.log     #运行日志
    verb 3                      #调试信息级别
    
    2.2.4、服务端启动
    openvpn --daemon --config /etc/openvpn/server.conf  
    #如果有问题根据/var/log/openvpn/ 下的日志排错,一般是不会有问题的
    

    启动成功会多一个 tun0的虚拟网卡


    image.png
    2.2.5、client端配置

    要导出对应的client端key 根证书 ca.crt,client.crt,client.key,ta.key

    client
    dev tun
    proto tcp
    remote 192.168.0.10 1194    #openvpn服务器的外网IP和端口(可以写多个做到高可用)
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    ca ca.crt
    cert client1.crt         #用户的证书
    key client1.key
     
    tls-auth ta.key 1
    cipher AES-256-CBC
    comp-lzo
    verb 3
    
    2.2.6、client 链接测试

    安装client http://down.i4t.com/openvpn-install-2.4.7-I606-Win10.exe

    配置如下


    image.png
    2.2.7、链接问题排错

    如果一直链接不上请确认

    • 服务存活情况
    • 安全组(服务商提供的)端口是否放开
    • iptables防火墙端口是否放开

    我是在安全组卡了很久,这两只是client 与服务端链接成功,说明我们搭建openvpn已经完成了
    这时已经可以直接登录到server端;

    4、说明

    到这我们搭建openvpn已经完成了
    这时已经可以直接登录到server端,但是无法登录局域网内的其他机器,因为server端未开转发
    开转发还会遇到安全组问题,因此要使用SNAT替换访问的ip

    3、iptables转发设置

    参考链接基础知识Iptables - 简书 (jianshu.com)

    3.1、开启内核转发
    vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1   #将此行写入配置文件,开启ipv4转发
    sysctl -p     #读取修改后的配置
    
    3.2、iptables配置
    #将客户端的虚拟ip 10.8.0.0网段的ip替换为局域网内服务端服务器的ip
    iptables -A POSTROUTING -t nat  -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.10.127
    

    Troubleshooting

    工具使用tcpdump 监听网卡 参考链接 tcpdump详细教程 - 简书 (jianshu.com)
    #监听tun0网卡上访问 192.168.10.118数据
    tcpdump -n -i tun0 host 192.168.10.118

    在客户端ping ,发现有去无会,一看ip都是10.8.x.x 肯定无法过安全组,因此用iptables替换ip,整个服务就可用了

    相关文章

      网友评论

          本文标题:Openvpn构建线上局域网

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