kkwen

openvpn自动化部署脚本
昨天大数据部门过来让我帮他们搭建一个vpn环境,于是拿出我写好的脚本,三五分钟帮他搭建完成,效率杠杠滴。
扫描右侧二维码阅读全文
08
2018/07

openvpn自动化部署脚本

昨天大数据部门过来让我帮他们搭建一个vpn环境,于是拿出我写好的脚本,三五分钟帮他搭建完成,效率杠杠滴。

openvpn需求常见

  1. 有时候在家,却要访问公司内部网络 ==>在入口机器做server端
  2. 公司的云服务器只能从公司的ip访问,我需要在家访问 ==>公司服务器入口或者跳板机上起一个server端,云上内网机器安装client端
  3. 把家里的虚拟机,和其他网络的内网机器打通 ==>中间要借助有外网ip的机器做server端,家里的机器和其他内网机做client端
  4. 今天的需求是:云服务器不能开放外网web端口(8080),在公司要访问云内的10.x.x.x的私网地址的(8080端口)

程序组成

其中包括:

  1. 一个openvpn的源码压缩包
  2. 一个easy-rsa 2版本的加密用的包
  3. 一个openvpn安装脚本(v5.0版本)
  4. 一个openvpn客户端证书生成脚本 (v5.0版本)
  5. 一个ovpn.ini配置文件

下载地址 注:完美支持Centos7,Centos7以前版本功能可用但systemd脚本不可用

openvpn_install.sh 脚本使用方法

  1. 下载项目包 wget https://github.com/kwen94/openvpn-install-scirpt/archive/master.zip
[root@Tencent-host opt]# wget https://github.com/kwen94/openvpn-install-scirpt/archive/master.zip
--2019-03-09 08:09:33--  https://github.com/kwen94/openvpn-install-scirpt/archive/master.zip
Resolving github.com (github.com)... 13.229.188.59, 13.250.177.223, 52.74.223.119
Connecting to github.com (github.com)|13.229.188.59|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/kwen94/openvpn-install-scirpt/zip/master [following]
--2019-03-09 08:09:33--  https://codeload.github.com/kwen94/openvpn-install-scirpt/zip/master
Resolving codeload.github.com (codeload.github.com)... 13.229.189.0, 54.251.140.56, 13.250.162.133
Connecting to codeload.github.com (codeload.github.com)|13.229.189.0|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’
    [   <=>                                                                                  ] 1,353,690   2.25MB/s   in 0.6s
2019-03-09 08:09:35 (2.25 MB/s) - ‘master.zip’ saved [1353690]
  1. 解压,并进入压缩目录
[root@Tencent-host opt]# yum -y install unzip && unzip master.zip
[root@Tencent-host opt]# cd openvpn-install-scirpt-master
[root@Tencent-host openvpn-install-scirpt-master]# ll
total 1368
-rw-r--r-- 1 root root   58487 Mar  8 17:15 easy-rsa-2.2.0.zip
-rw-r--r-- 1 root root 1292639 Mar  8 17:15 openvpn-2.3.17.tar.gz
-rw-r--r-- 1 root root    7001 Mar  8 17:15 openvpn_create_client.sh
-rw-r--r-- 1 root root   18229 Mar  8 17:15 openvpn_install.sh
-rw-r--r-- 1 root root    3833 Mar  8 17:15 openvpn扩展配置手册
-rw-r--r-- 1 root root    1303 Mar  8 17:15 ovpn.ini
  1. 编辑当前目录下的ovpn.ini配置文件,给出必填项,非必填项根据需要填写
    ovpn.png
  2. 运行脚本,]# bash openvpn_install.sh -o openvpn-2.3.17.tar.gz -e easy-rsa-2.2.0.zip
    vpn_install.png
  3. 使用systemctl start openvpn启动服务,这里我启动失败了,因为云服务器网卡上并没有我的外网IP地址,因此我修改/uer/local/openvpn-2.3.17/config/server.conf中服务端监听的地址为0.0.0.0
    listen.png
  4. 重启openvpn服务,查看服务启动状态
    start.png

服务启动成功

openvpn_create_client.sh 脚本使用方法

  1. 此脚本用来生成客户端证书,安装好服务端后,这个脚本位于/usr/local/openvpn-xxx/目录下
  2. 生成客户端证书如下,运行脚本时需要指定客户端证书输出路径,本例为/tmp,证书名为company
    client_company.png
  3. 查看客户端证书目录下的文件
    client_start.png
  4. linux客户端将客户端文件目录拷贝至对应主机,cd到该目录中,运行启动脚本脚本openvpn_service.sh即可
    start.sh.png
  5. windows客户端先安装windows版openvpn安装包,再下载生成的客户端证书.tar.gz压缩包到windows,解压将里面的config目录替换openvpn安装路径下的config目录
    windows.png

连接vpn,测试ping 云服务器局域网IP

  • 连接服务器
    connect.png

ping.png

路由环境分析

  1. 此脚本中有两个选择项,一是让所有网络都走openvpn,这样网络出口相当于使用了云服务器的IP出口了,连接openvpn之后,上网IP为服务器IP
  2. 二是部分网络走openvpn,此时可以达到访问云服务器内部局域网的特性

扩展配置选项

    路由:
        服务端推送路由规则:
        push "route 10.0.0.0 255.0.0.0 vpn_gateway"  #vpn网关
        push "route 10.0.0.0 255.0.0.0 net_gateway" #本地net上网网关
    客户端:
        route 10.0.0.0 255.0.0.0 vpn_gateway  #vpn网关
        route 10.0.0.0 255.0.0.0 net_gateway  #本地net上网网关

    固定客户端IP地址
        client-config-dir /etc/openvpn/ccd  #cdd目录下对应的文件名为客户端证书名
        /etc/openvpn/ccd/client1:  ifconfig-push 10.8.0.2 10.8.0.3   
        ifconfig-push 后面是紧跟着两个连续的成组IP地扯,以第一个为客户端的IP地扯
        
    其他:
        duplicate-cn   #允许一个客户端证书同时被多个终端使用
        max-clients 1000  #客户端链接最大数量
最后修改:2019 年 03 月 29 日 02 : 04 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论

1 条评论

  1. 茶碗

    牛逼,献上一对膝盖