OpenVPN一键安装脚本

OpenVPN不多作解释,无论大小型企业、学校都可能会用到,多种身份验证方式以及传输的加密方式无疑比其它PVN应用面更广,除了供用户拨入企业/学校内部进行联网,还可以在企业与子公司之间进行加密传输,OpenVPN能实现二/三层的基于隧道的传输,再配合企业内部的不同Vlan,能实现很多复杂的功能。


(图片来源于互联网)

----------------------2024更新分割线------------------------------

最近因为一些原因,又需要折腾OpenVPN,发现原来写的脚本是真丑陋,特别是参考github上一些大神写的优美代码,功能实现方式简直......

所以重新写了一下,可复制以下代码执行:


wget https://github.com/qiguang0920/firstproject/raw/master/OpenVPN.sh && chmod +x OpenVPN.sh && /usr/bin/bash OpenVPN.sh


  客户端配置文件生成参考了github上其它大神的方式,脚本运行过程中生成所需证书文件,支持Redhat系的Linux,如CentOS/Rocky/AlmaLinux

  客户端下载地址:https://openvpn.net/client/client-connect-vpn-for-windows/


  一些说明:

  1、如果脚本执行过程中所有选项一路回车,会默认 UDP/1194端口/开启redirect-gateway全局转发,生成一个名为Client.ovpn的配置文件。
  2、不允许多用户使用同一配置文件同时登录,多用户请使用脚本生成多个客户端配置文件。
  3、脚本不支持配置用户名和密码登录,比如是单位或学校可能更需要所有人使用一个证书,然后再配置用户名和密码登陆,需手动打开openvpn的配置文件server.conf,取消注释auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env 、username-as-common-name、script-security 3这三行即可),然后我们编辑psw-file,这里面定义用户名和密码,一行一个,用户名和密码使用空格分开。客户端同样需要配置 auth-user-pass (取消注释即可)。
  4、如果服务器是在单位或学校,一般我们的需求是访问单位的其它服务器,上网使用本地网络,安装时可以选择不开启redirect-gateway。


  安装过程中所有的选项都是为了生成适合自己需求的/etc/openvpn/server.conf,安装完成所有需求都可以手动修改,每个常用条目我都做了中文说明,贴在下面


# 监听地址
local 0.0.0.0
# 监听端口
port 1194
# 监听协议
proto udp
#采用路由隧道模式,TUN模式是一种虚拟点对点的网络设备模式,通常用于实现点对点VPN,TAP模式是一种以太网桥设备模式
dev tun
;dev tap
# ca证书路径
ca /etc/openvpn/server/ca.crt
# 服务器证书
cert /etc/openvpn/server/server.crt
# This file should be kept secret 服务器
key /etc/openvpn/server/server.key
# 密钥交换协议文件
dh /etc/openvpn/server/dh.pem
auth SHA256
#tls-auth 和 tls-crypt 两种 TLS 握手策略,tls-crypt 更加的安全.tls-crypt 将使用预共享密钥对所有消息进行加密,隐藏了与OpenVPN服务器进行的TLS握手的初始化,能够防止 TLS 拒绝服务攻击
tls-crypt /etc/openvpn/server/tc.key
# TUN模式下运行时配置虚拟寻址拓扑
topology subnet
#VPN服务端为自己和客户端分配IP的地址池,服务端自己获取网段的第一个地址(这里为10.8.0.1),后为客户端分配其他的可用地址
server 10.8.0.0 255.255.255.0
#记录已分配虚拟IP的客户端和虚拟IP的对应关系,以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP
ifconfig-pool-persist ipp.txt
# 存活时间,10秒ping一次,120 如未收到响应则视为断线
keepalive 10 120
#通信加密 须与客户端相同
cipher AES-256-GCM
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
# 检测超时后,重新启动VPN,一直保持tun是linkup,否则网络会先linkdown然后再linkup
persist-tun
# 日志级别
verb 3
# 证书吊销,当特定密钥被泄露但整体 PKI 仍然完好无损时使用
crl-verify /etc/openvpn/server/crl.pem
#最多连接客户端数量
max-clients 50
#允许客户端访问的服务器所在网络
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
#配置密码认证,客户端需同时开启
;auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
;username-as-common-name
;script-security 3
#不使用证书登录,不建议开启
;client-cert-not-required
#UDP辅助类功能,TCP不要开启,不然服务端启动会出错。UDP不像TCP有三次握手状态 断了就是断了,所以要让客户端发送断线通知才行,如果UDP不开启,日志会不准确 
explicit-exit-notify
#开启全局代理
push "redirect-gateway def1 bypass-dhcp"
#不开启全局模式的情况下如果推送DNS可能会造成不能上网
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 1.1.1.1"

-------2024新代码结束分割线,以下是之前写的脚本,github项目没删除,不建议使用了-------------------------


2019/12/26说明:随着openvpn版本的更新,经测试使用此脚本安装完,openvpn服务并不能通过脚本中写的systemctl start openvpn@server启动,因为懒得把脚本服务启动部分重写了,如果安装完显示服务启动出错,请手动执行启动命令,如果服务不能启动请将/etc/openvpn.server.conf复制到/etc/openvpn/server内,或者直接做个硬链接 ln /etc/openvpn/server.conf /etc/openvpn/server/server.conf 。然后systemctl start openvpn-server@server应该就可以了。

脚本是根据我的需求编写的,使用生成好的密钥/证书,服务端使用脚本安装完成后启动openvpn,把/etc/openvpn目录的client.zip下载下来,解压后放在客户端修改成你的服务端ip就可以使用。  

  下载地址:https://github.com/qiguang0920/openvpn.git


脚本安装:

git clone https://github.com/qiguang0920/openvpn.git; cd openvpn;chmod +x OpenVPN_centos7.sh;./OpenVPN_centos7.sh


脚本说明:

  1. 使用的默认1194/udp端口
  2. 脚本适用于centos7系统,如果是其它redhat系列的系统,需要手动处理防火墙端口,deban系列不支持
  3. 开启了redirect-gateway,firewalld开启了转发
  4. 连接方式为tun
  5. 安装完成时会询问是否现在启动OpenVPN,输入yes启动。
  6. 默认加入了系统启动项,重新开机会自动启动OpenVPN
  7. 无论认服务器端还是客户端证书密码都是www.iewb.net,手机登陆的时候会用到证书密码


脚本适合想快速部署而且偏懒得童鞋。如果对安全要求较高,在安装完成后可以重新生成证书,再配置下server.conf指向你生成的证书就可以了。客户端同样。


OpenVPN证书的签发

进入/etc/openvpn/easy-rsa/easyrsa3


生成服务器端所需密钥

  1. ./easyrsa init-pki    //目录初始化
  2. ./easyrsa build-ca    //创建根证书CA,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置,一般设置为签发机构名或是域名。
  3. ./easyrsa gen-req server_iewb.net nopass    //创建服务器端证书,此处我输入的是server_iewb.net,也可以是别的名字,会生成两个文件server_iewb.net.req和server_iewb.net.key
  4. ./easyrsa sign server server_iewb.net        //签约服务端证书,需要提供CA密码(第二步时的密码),会生成server_iewb.net.crt
  5. ./easyrsa gen-dh    //创建Diffie-Hellman,确保key穿越不安全网络的命令


生成客户端所需密钥

  1. ./easyrsa gen-req client_iewb.net    //client为自定义,可以是别的,会生成client_iewb.net.req和client_iewb.net.key,因为没有和服务器一样使用nopass参数,所以生成时我们输入一个证书密码。
  2. ./easyrsa import-req  ./pki/reqs/client_iewb.net.req client1    //导入req。此处目录和上面生成的名字都要正确,后面的那个client1可以理解为注释,其实是一个短名称,签约证书时可以使用短名称签约。
  3. ./easyrsa sign client client_iewb.net        //签约证书 ,同签约服务端证书一样,需要输入CA密码


生成的文件所在目录分别为:

  1. easy-rsa/easyrsa3/pki/ca.crt
  2. easy-rsa/easyrsa3/pki/reqs/server_iewb.net.req
  3. easy-rsa/easyrsa3/pki/reqs/client_iewb.net.req
  4. easy-rsa/easyrsa3/pki/private/ca.key
  5. easy-rsa/easyrsa3/pki/private/server_iewb.net.key
  6. easy-rsa/easyrsa3/pki/private/client_iewb.net.key
  7. easy-rsa/easyrsa3/pki/issued/server_iewb.net.crt
  8. easy-rsa/easyrsa3/pki/issued/client_iewb.net.crt
  9. easy-rsa/easyrsa3/pki/dh.pem

  .req和.key为生成证书时生成,.crt为签约证书时生成,签约证书时都需要输入CA密码,其实我们使用的是.crt和.key,其中ca.crt服务端和客户端都会用到。如果想为更多人添加证书,可以再次运行命令,生成证书(不同名字)–导入–签约证书

  一般情况下,比如单位或学校可能更需要所有人使用一个证书,然后再配置用户名和密码登陆,我们打开openvpn的配置文件server.conf,把下面三行的注释去掉
  1. auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
  2. username-as-common-name
  3. script-security 3

  如果不使用证书,只使用用户名和密码验证,把下面一行的注释也去掉


  client-cert-not-required


  以上几行配置官方的配置默认是没有的,其它手动配置openvpn的小伙伴可以把这几行加上,使用脚本安装的小伙伴只需去掉注释就可以了。

  然后我们编辑psw-file,这里面定义用户名和密码,一行一个,用户名和密码使用空格分开。

  同样,checkpsw.sh和psw-file这两个文件官方安装包安装完也是没有的,checkpsw.sh我们可以从网上下载,psw-file自己新建一个就行。


  checkpsw.sh官方下载地址: http://openvpn.se/files/other/checkpsw.sh (PS:这个网址被墙了)


  也可以看这里:https://raw.githubusercontent.com/qiguang0920/openvpn/master/data/checkpsw.sh

  然后客户端我们也要配置下,在client.ovpn中加上一行:

  auth-user-pass

  这样服务端和客户端我们就启用了密钥和用户名密码双认证,所有用户使用同一个密钥,然后分配不同的用户名和密码。
  openvpn功能很强大,认证方式还可以选择系统用户认证,大型企业和学校如果使用openvpn的用户较多,还可以配置mysql数据库认证,就不一一讨论。





AD: 腾讯云 1核2G云服务器首年38元
推广推荐

Proudly Powered By WordPress | IEWB.NET 2009-2024 版权所有