ps:上一段时间公司实施vpn,由于账号是分发key,维护不方便,包括使用人首次设置也是麻烦,每次添加注销账户都需要登录服务器端去操作,为了方便便在github上找到了支持openvpn web的一个神器openv-admin
openvpn 两种认证简介:
1、key分发:
在服务器端生成秘钥,然后下载到本地,将服务器端的ca.crt xx.crt xx.key ta.key(如果服务器启用的话需要,未开启的话不需要,功能是放在dos攻击)下载到本地 。将该几个文件和客户端配置文件xx.ovpn文件拷贝到openvpn客户端安装路径的config文件夹里面,然后修改xx.ovpn文件来指定从服务器下载过来的路径(特别注意windows下 xx.ovpn 编码为 ANSI,mac记手机下编码改为UTF-8)
2、user/pass 方式认证:
在服务器端的配置文件直接指定配置文件中添加用户名和密码,使用者只需把ca.crt 及固定的xx.ovpn 文件拷贝到openvpn 客户端安装的config文件夹中去,再连接的时候使用用户名密码登录即可,可以参考:http://blog.51cto.com/ylw6006/1009004
不过本文是讲解使用openvpn-admin。
openvpn-admin 顾名思义为openvpn管理的web端。
https://github.com/Chocobozzz/OpenVPN-Admin
openvpn 安装
可以参考各个云商,ucloud的如下:https://docs.ucloud.cn/software/vpn/openvpn4centos?s[]=openvpn
openvpn-admin
它是怎么实现在web端添加账户,在web端注销账户的?
openvpn使用user/pass 方式认证,用户及密码是保存到指定的文件中,将指定的文件保存到数据库中去。
openvpn-admin 做到什么效果:
1、输入账户在web端自动下载配置文件及ca.crt (之前是手动分发到邮箱)
2、开账号及关闭账号
3、查看登录log
实施:
环境lnmp、nodejs、git、unzip
linux 版本: centos 6.9 64位
nginx 版本: 1.5.6
php 版本:5.6
mysql 版本:5.6
lnmp 环境安装可参考:https://www.cnblogs.com/gpfeisoft/p/5999263.html
nodejs 、git 安装(参考):http://www.jianshu.com/p/8671e439a811
完成后用npm来安装bower
npm install -g bower
然后在nginx html文件夹下下载openvpn-admin的源代码
git clone https://github.com/Chocobozzz/OpenVPN-Admin openvpn-admin
解压出包直接到nginx存放页面路径(/usr/local/nginx-1.5.6/html/a/),
本文更改了页面路径,nginx页面配置路径如下:
location / {
root /usr/local/nginx-1.5.6/html/a/openvpn-admin;
index index.html index.htm index.php;
}
nginx配置文件php
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx-1.5.6/html/a/openvpn-admin$fastcgi_script_name;
include fastcgi_params;
}
将解压出来的client-conf 文件夹 放在openvpn-admin 文件夹下
cp -r /usr/local/nginx-1.5.6/html/a/openvpn-admin/installation/client-conf ../client-conf
chmod -R 777 client-conf
接着,我们进入/usr/local/nginx-1.5.6/html/a/openvpn-admin 这个目录
cd /usr/local/nginx-1.5.6/html/a/openvpn-admin
然后执行,进行安装依赖包:
bower --allow-root install
查看openvpn-admin文件
[root@h01 a]# pwd
/usr/local/nginx-1.5.6/html/a
[root@h01 a]# tree -L 2
.
└── openvpn-admin
├── bower.json
├── CHANGELOG.md
├── client-conf
├── css
├── desinstall.sh
├── include
├── index.php
├── installation
├── install.sh
├── js
├── LICENSE.md
├── migration.php
├── README.md
├── update.sh
└── vendor (是上一步安装依赖包生成的)
然后,我们需要修改/usr/local/nginx-1.5.6/html/a/openvpn-admin/include/config.php 文件中的mysql链接信息
<?php
$host = 'localhost';
$port = '3306';
$db = 'openvpn-admin';
$user = '';
$pass = '';
?>
这里需要填写你自己的db名称(这里需要说明一下需要自己创建该数据库),用户名以及密码。
然后启动apache或者nginx,然后访问安装url:http://loaclhost/index.php?installation
按照提示进行安装即可!
重新进入openvpn-admin目录(即openvpn-admin的源码目录),拷贝该目录下的installation/scripts目录和server.conf到/etc/openvpn/目录下:
cp -r installation/scripts /etc/openvpn/
cp -r installation/server.conf /etc/openvpn/ (可以先将原来配置文件备份)
然后修改/etc/openvpn/server.conf中的信息,我将拷贝过来的配置文件
将注释不然openvpn 起来,没有端口(本次为测试,如线上使用需要根据线上情况修改配置文件)
#user nobody
#group nogroup
cat /etc/openvpn/server.conf
[root@h01 form]# cat /etc/openvpn/server.conf | grep -Ev '^$|^#'
mode server
proto tcp
port 1194
dev tun
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh2048.pem
cipher AES-256-CBC
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 80.67.169.12"
push "dhcp-option DNS 80.67.169.40"
keepalive 10 120
reneg-sec 18000
persist-key
persist-tun
comp-lzo
verb 3
mute 20
status openvpn-status.log
log-append /var/log/openvpn.log
client-config-dir ccd
script-security 3
username-as-common-name
verify-client-cert none
auth-user-pass-verify scripts/login.sh via-env
max-clients 50
client-connect scripts/connect.sh
client-disconnect scripts/disconnect.sh
还需要修改/etc/openvpn/scripts/config.sh配置文件,需要和前面的/var/www/html/openvpn/include/config.php 文件一致即可!
然后在/etc/openvpn/目录下新建ccd文件夹,并将ccd目录和scripts目录的设置为可执行的权限
chmod -R 777 ccd
chmod -R 777 scripts
重启openvpn,然后即可
效果
image.pngimage.png
下载配置文件页面(需要输入开通的用户名和密码)
image.png
参考:https://github.com/Chocobozzz/OpenVPN-Admin
http://www.th7.cn/db/mysql/201703/229715.shtml
遇得到的问题:
1、点开web端下载配置文件点击跳转http500
解决方法:将client-conf 拷贝到/usr/local/nginx-1.5.6/html/a/openvpn-admin 目录下
2、下载的配置文件zip包解压失败,包不全
解决方法:
chmod -R 777 client-conf
3、/etc/openvpn/scripts/config.sh 连接数据失败
ERROR 2003 (HY000): Can't connect to MySQL server on '172.16.100.71' (13)
解决办法:selinux未关闭(之前记的是关闭的,所以浪费了点时间)
4、openvpn播入报错,openvpn-admin日志不能写入库
问题报错:ERROR 1265 (01000) at line 1: Data truncated for column 'log_received' at row 1
解决办法:修改mysql的配置文件,my.cnf ,注释掉sql_mode,重启mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
网友评论