OpenVPN 服务 SHELL 自动化部署脚本

本贴最后更新于 1589 天前,其中的信息可能已经东海扬尘

#!/bin/bash # #******************************************************************** #Author:zhangzhuo #QQ: 1191400158 #Date: 2021-01-26 #FileName:openvpn_install.sh #URL: [https://www.zhangzhuo.ltd](https://www.zhangzhuo.ltd) #Description:The test script #Copyright (C): 2021 All rights reserved #******************************************************************** openvpn_install(){ while :;do read -p "请输入OpenVPN服务器公网IP: " IP { echo $IP | grep -E "^(([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5]).){3}([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5])$">/dev/null; } && break || echo "请输入正确的IP地址!" done while :;do read -p "请输入内网的网络地址如(192.168.10.0): " NET { echo $NET | grep -E "^(([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5]).){3}([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5])$">/dev/null; } && break || echo "请输入正确的网络地址!" done while :;do read -p "请输入内网的子网掩码如(255.255.255.0): " MASK { echo $MASK | grep -E "^(([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5]).){3}([1-9]?[0-9]|1[0-9](#)|2[0-4](#)|25[0-5])$">/dev/null; } && break || echo "请输入正确的子网掩码!" done centos_Version #版本centos版本区分,centos8缺少server文件 yum install -y openvpn easy-rsa #安装 rpm -ql openvpn &>/dev/null || { echo "openvpn服务安装失败请检查YUM是否配置EPEL源";exit ;} rpm -ql easy-rsa &>/dev/null || { echo "easy-rsa服务安装失败请检查YUM是否配置EPEL源";exit ;} #准备服务器端证书环境 cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-server #修改vars配置文件 cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa-server/3/vars #修改CA自签证书有效期 sed -ri 's/.*(set_var EASYRSA_CA_EXPIRE).*/\1 36500/' /etc/openvpn/easy-rsa-server/3/vars #修改openvpn服务器证书有效期 sed -ri 's/.*(set_var EASYRSA_CERT_EXPIRE).*/\1 3650/' /etc/openvpn/easy-rsa-server/3/vars cd /etc/openvpn/easy-rsa-server/3 #初始化PKI生成PKI相关目录和文件 ./easyrsa init-pki #创建CA机构 echo -e "\n" | ./easyrsa build-ca nopass #创建openvpn服务器证书并颁发 echo -e "\n" | ./easyrsa gen-req server nopass echo -e "yes\n" | ./easyrsa sign server server #创建Diffie-Hellman算法 ./easyrsa gen-dh #准备客户端证书环境 cp -r /usr/share/easy-rsa/ /etc/openvpn/easy-rsa-client cp /usr/share/doc/easy-rsa/vars.example /etc/openvpn/easy-rsa-client/3/vars cd /etc/openvpn/easy-rsa-client/3 ./easyrsa init-pki #修改客户端证书有效期,根据自己的实际情况可修改 sed -ri 's/.*(set_var EASYRSA_CERT_EXPIRE).*/\1 180/' /etc/openvpn/easy-rsa-client/3/vars #CA和服务器证书复制到openvpn服务的目录 mkdir /etc/openvpn/certs cp /etc/openvpn/easy-rsa-server/3/pki/ca.crt /etc/openvpn/certs/ cp /etc/openvpn/easy-rsa-server/3/pki/issued/server.crt /etc/openvpn/certs/ cp /etc/openvpn/easy-rsa-server/3/pki/private/server.key /etc/openvpn/certs/ cp /etc/openvpn/easy-rsa-server/3/pki/dh.pem /etc/openvpn/certs/ openvpn --genkey --secret /etc/openvpn/certs/ta.key #准备客户端配置文件 mkdir /etc/openvpn/client-file cp /etc/openvpn/certs/{ca.crt,dh.pem,ta.key} /etc/openvpn/client-file cat <<EOF >/etc/openvpn/client-file/client.ovpn client dev tun proto tcp remote server-ip 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-CBC verb 3 compress lz4-v2 tls-auth ta.key 1 EOF sed -ri "s/(server-ip)/$IP/" /etc/openvpn/client-file/client.ovpn #生成证书吊销列表 cd /etc/openvpn/easy-rsa-server/3 ./easyrsa gen-crl #创建openvpn日志目录 mkdir /var/log/openvpn chown openvpn: /var/log/openvpn/ #生成openvpn服务器配置文件 cat <<EOF >/etc/openvpn/server.conf port 1194 proto tcp #pexplicit-exit-notify 1 dev tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/server.crt key /etc/openvpn/certs/server.key dh /etc/openvpn/certs/dh.pem server 10.0.0.0 255.255.255.0 push "route network" keepalive 10 120 cipher AES-256-CBC compress lz4-v2 push "compress lz4-v2" ;comp-lzo max-clients 2048 user openvpn group openvpn status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 mute 20 tls-auth /etc/openvpn/certs/ta.key 0 crl-verify /etc/openvpn/easy-rsa-server/3/pki/crl.pem EOF sed -ri "s/(network)/$NET $MASK/" /etc/openvpn/server.conf #添加iptables规则和内核参数 echo net.ipv4.ip_forward = 1 >>/etc/sysctl.conf sysctl -p echo "iptables -t nat -APOSTROUTING -s 10.0.0.0/24 -j MASQUERADE" >>/etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local /etc/rc.d/rc.local #启动openvpn服务 systemctl daemon-reload systemctl enable --now openvpn@server echo -e "\033[1;31m服务安装完成,已经启动!\033[0m" } #centos系统版本区分 centos_Version(){ Version=`grep -Eo "[0-9].[0-9]" /etc/redhat-release | tr '.' '%' | tr '\n' % |cut -d% -f 1` if [ $Version = 8 ];then cat <<EOF >/lib/systemd/system/openvpn@.service [Unit] Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I After=network.target [Service] Type=notify PrivateTmp=true ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i.conf [Install] WantedBy=multi-user.target EOF chmod 644 /lib/systemd/system/openvpn@.service fi } issue(){ while :;do read -p "请输入创建证书的人名全拼如(zhangzhuo):" REQ_NAME ls -ld /etc/openvpn/client/$REQ_NAME &>/dev/null && echo "用户已经存在" || break done read -p "私钥是否设置密码(1设置,其他为不设置)" A if [ ! $A = 1 ];then NOPASS=nopass fi #生成证书申请文件 cd /etc/openvpn/easy-rsa-client/3 echo -e "\n" | ./easyrsa gen-req $REQ_NAME $NOPASS #导入申请文件到CA cd /etc/openvpn/easy-rsa-server/3 ./easyrsa import-req /etc/openvpn/easy-rsa-client/3/pki/reqs/$REQ_NAME.req $REQ_NAME #颁发 echo -e "yes\n" | ./easyrsa sign client $REQ_NAME #创建用户客户端配置文件 mkdir /etc/openvpn/client/$REQ_NAME cp /etc/openvpn/easy-rsa-server/3/pki/issued/${REQ_NAME}.crt /etc/openvpn/client/${REQ_NAME} cp /etc/openvpn/easy-rsa-client/3/pki/private/${REQ_NAME}.key /etc/openvpn/client/${REQ_NAME} cp /etc/openvpn/client-file/* /etc/openvpn/client/${REQ_NAME} mv /etc/openvpn/client/${REQ_NAME}/${REQ_NAME}.crt /etc/openvpn/client/${REQ_NAME}/client.crt mv /etc/openvpn/client/${REQ_NAME}/${REQ_NAME}.key /etc/openvpn/client/${REQ_NAME}/client.key cd /etc/openvpn/client/${REQ_NAME}/ #打包用户客户端配置文件 tar -cf ${REQ_NAME}.tar * cp ${REQ_NAME}.tar /root/ echo -e "\033[1;31m用户客户端配置文件已经生成,已经打包放置到root目录下\033[0m" echo -e "\033[1;31m原本的文件在/etc/openvpn/client/文件夹下\033[0m" } revoked(){ echo `ls /etc/openvpn/client/` while :;do read -p "请输入要吊销的用户名:" NAME ls -ld /etc/openvpn/client/$NAME &>/dev/null && { rm -rf /etc/openvpn/client/$NAME;break; } || echo "没有这个用户请重新输入!" done cd /etc/openvpn/easy-rsa-server/3 echo -e "yes\n" | ./easyrsa revoke $NAME ./easyrsa gen-crl systemctl restart openvpn@server } PS3="请选择相应的编号(1-4):" MENU=" 安装OpenVPN服务 给用户颁发证书 吊销用户证书 退出 " select menu in $MENU;do case $REPLY in 1) openvpn_install ;; 2) issue ;; 3) revoked ;; 4) break ;; *) echo -e "\e[1;31m输入错误,请输入正确的数字(1-3)!\e[0m" ;; esac done

脚本功能

  • 可以实现在 Centos7 和 8 系统部署 openvpn 服务,部署完成后 CA 证书 100 年,openvpn 证书 10 年
  • 可以自动实现客户端证书颁发,有效期 180 天
  • 脚本具体过程脚本中有注释
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Follow
    4 引用 • 12 回帖 • 4 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 2 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 596 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 677 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 463 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖
  • Anytype
    3 引用 • 31 回帖 • 24 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 733 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 254 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 395 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 763 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 12 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖 • 1 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 5 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 650 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 8 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖 • 3 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 386 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    29 引用 • 230 回帖 • 125 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 52 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 2 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖
  • AWS
    11 引用 • 28 回帖 • 3 关注