最近需要部署openvpn服务来实现电脑与另外一个服务器环境内网互通,在网上找到的多数的OpenVPN例子都是基于客户端密钥认证的,多个客户那就要多个密钥,这样配置服务端或者客户端都非常麻烦。
本次文章主要实现功能:
- 容易安装
- 容易配置
- 多个账号
- 客户端仅需导入一个配置
- Prometheus监控
这里建议是使用TCP部署服务
环境准备
使用主机
IP | 系统 | 端口 | 作用 |
---|---|---|---|
106.212.66.32 | CentOS Linux release 7.9.2009 (Core) | 5001/tcp | OpenVPN 服务器 |
192.168.50.1 | —— | —– | 内网测试服务器 |
网络分配
IP | 作用 |
---|---|
10.80.0.0/24 | OpenVPN网段 |
192.168.50.0/24 | 内网通讯网段 |
软件资源
软件名称 | 版本 |
---|---|
easy-rsa | 3.0.8 |
openvpn | 2.4.11 |
安装环境
本文使用yum来安装openvpn,openvpn及其依赖的一些包在epel源上,首先先安装epel源。
1 | 安装epel源 |
配置环境
上面我们已经安装好了openvpn了,下面我们对openvpn进行配置。
配置证书密钥
我们通过yum方式安装的 easy-rsa 版本是3.0.8,直接从安装路径copy一份工具出来。这里用默认的 easy-rsa 3.0.8 来配置生成证书密钥。
1 | # 复制easy-rsa工具 |
配置服务端
创建使用的目录并授权
1 | # 日志存放目录 |
配置服务端配置文件
新建 /etc/openvpn/server/server.conf
文件,并写入以下内容:
1 | local 0.0.0.0 |
也可以复制一份模板文件进行改写,模板文件路径 /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf
创建用户密码文件
格式是用户 密码
以空格分割即可
1 | echo 'demo demo123.' >> /etc/openvpn/server/user/psw-file |
创建密码检查脚本
新建一个shell文件/etc/openvpn/server/user/checkpsw.sh
;用作核对登录用户密码、用户是否正确等;内容如下:
1 | #!/bin/sh |
赋予可执行的权限
1 | chmod 700 /etc/openvpn/server/user/checkpsw.sh |
路由配置
1). 防火墙配置
需要配置一条NAT的规则;这里有两种方式: iptables或者firewalld、任选其一
1 | # iptables |
1 | # firewalld |
2). 开启路由转发
1 | echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf |
启动服务端
1 | nohup openvpn /etc/openvpn/server/server.conf >/dev/null 2>&1 & |
验证是否启动成功
1 | netstat -anpt|grep -w 'openvpn'|if [[ $(wc -l) != 0 ]];then echo "openvpn启动成功";else echo "openvpn启动失败";fi |
配置客户端
客户端直接下载安装最新版安装包即可: 点我跳转(需富强)
因为我们前面配置的是账号密码认证又是集成客户端配置到一个ovpn文件内,所以我们只需要从server端将生成的ca.crt、ta.key
提取出来并嵌入到ovpn文件内即可。步骤如下:
1). 查看ca.crt
文件内容并记录
1 | cat /etc/openvpn/server/easy-rsa/pki/ca.crt |
2). 查看ta.key
文件内容并记录
1 | cat /etc/openvpn/server/easy-rsa/ta.key |
在/etc/openvpn/client
目录下新建一个文件 client.ovpn,文件内容如下:
1 | client |
使用
一切准备就绪后,将编写的client.ovpn
客户端文件下发至客户端内,启动openvpn的客户端,导入客户端文件;然后输入账号密码即可登录。
默认部署用户: demo
默认部署密码: demo123.
登陆成功后;我们可测试Ping一下之前配置可通讯的网段是否可正常连接.
监控
这里使用Prometheus openvpn_exporter 的方式来进行监控;因为前面我们已经在vpn的配置文件中写入了状态文件,所以openvpn服务端启动后,我们就可以直接进行监控。
以docker的方式在openvpn服务端启动的exrporter为例:
1 | docker run -itd -p 9176:9176 --name openvpn_exporter \ |
启动后,访问 http://127.0.0.1:9176/metrics
的方式进行请求测试,若无问题,则返回一下示例:
1 | [root@localhost ~]# curl 127.0.0.1:9176/metrics |
接着在Prometheus的配置文件prometheus.yml中配置exporter的JOB
1 | - job_name: openvpn-metrics |
Prometheus配置重载后,即可。接着在普罗米修斯中查询语句,也可正常返回数据
关于Grafana面板,则使用ID为 10562 的即可,最终效果如下:
运维
一、客户端连接是不是只需要给一个配置文件和一个账户信息就行?
1 | 是 |
二、如何查看服务端日志?
1 | tailf /var/log/openvpn/server.log |
三、如何查看用户登陆信息?
1 | tailf /var/log/openvpn/password.log |
四、如何为VPN新增/删除连接用户?
1 | # 格式是用户 密码以空格分割即可 |