一期
部署
V直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OV无疑是Linux下开源V的先锋,提供了良好的性能和友好的用户GUI。
下面通过在如下拓扑图环境下搭建OV Server,介绍如何在CentOS7下搭建OV Server
由于没有公网IP进行模拟,在路由器LAN一侧(192.168.60.X)的CentOS7服务器上搭建OV Server,在路由器WAN一侧(192.168.31.X)的Windows机器上使用V Client拨入V进行测试
下面先介绍OV Server的搭建
1)安装
yum install -y epel-release
yum -y install OV easy-rsa net-tools bridge-utils
2)创建CA和证书
cd /usr/share/easy-rsa/3
./easyrsa init-pki
./easyrsa build-ca
./easyrsa build-server-full server1 nopass
./easyrsa build-client-full client1 nopass
./easyrsa gen-dh 生成DH需要等待一段时间
[root@CentOS7_DIY 3]# ./easyrsa gen-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..................................................................................+...
.......
..................................................................................+........++*++*
DH parameters of size 2048 created at /usr/share/easy-rsa/3/pki/dh.pem
3)创建TLS-Auth Key
OV --genkey --secret ./pki/ta.key
cp -pR /usr/share/easy-rsa/3/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/oV**/server/
4)内核参数中开启ipv4 forwarding
vim /etc/sysctl.conf
追加net.ipv4.ip_forward = 1
然后执行 sysctl -p
5)配置OV Server
cp /usr/share/doc/OV-2.4.8/sample/sample-config-files/server.conf /etc/OV/server/
vi /etc/OV/server/server.conf
需要修改的地方如下
local 192.168.0.5
port 1194
;proto tcp
proto udp
;dev tap
dev tun
;dev-node MyTap
ca ca.crt
cert issued/server1.crt
key private/server1.key # This file should be kept secret
dh dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.200
;server-bridge
push "route 192.168.0.0 255.255.255.0"
push "route 192.168.100.0 255.255.255.0"
push "route 192.168.6.0 255.255.254.0"
push "route 192.168.7.0 255.255.254.0"
push "route 192.168.9.0 255.255.255.0"
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script
;push "redirect-gateway def1 bypass-dhcp"
;push "dhcp-option DNS 8.8.8.8"
;push "dhcp-option DNS 202.106.0.20"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
;compress lz4-v2
;push "compress lz4-v2"
comp-lzo
max-clients 100
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log /var/log/ov.log
log-append /var/log/ov.log
verb 3
;mute 20
explicit-exit-notify 1
6)启动OV-server服务并设置开机自启动
systemctl start oV-server@server
systemctl enable oV-server@server
7)路由器上需要将V Server 192.168.60.13服务端口udp 1194映射到外网192.168.31.22的1194端口
你懂得
8)路由设置(非常重要)来源:Tutorials | DigitalOcean
到目前为止,您已经在服务器上安装了OV,对其进行了配置,并生成了客户端访问V所需的密钥和证书。但是,您尚未向OV提供任何有关从客户端向何处发送传入Web流量的说明。您可以通过建立一些防火墙规则和路由配置来规定服务器应如何处理客户端流量。
假设您已按照本教程开始时的先决条件进行操作,则应该已经在服务器上安装了防火墙并在其中运行了防火墙。要允许OV通过防火墙,您需要知道什么是活动的防火墙区域。使用以下命令找到它:
firewall-cmd --get-active-zones
Output
trusted
Interfaces: tun0
接下来,将ov
服务添加到活动区域中firewalld允许的服务列表中,然后通过再次运行命令但--permanent
添加选项来使该设置成为永久设置:
firewall-cmd --zone=trusted --add-service ov
firewall-cmd --zone=trusted --add-service ov --permanent
您可以使用以下命令检查是否已正确添加服务:
firewall-cmd --list-services --zone=trusted
Output
ov
接下来,将伪装添加到当前的运行时实例,然后再次添加它,并带有--permanent
将伪装添加到所有未来实例的选项:
firewall-cmd --add-masquerade
firewall-cmd --permanent --add-masquerade
您可以使用以下命令检查是否正确添加了化装舞会:
firewall-cmd --query-masquerade
Output
yes
接下来,将路由转发到您的OV子网。为此,您可以先创建一个变量(SHARK
在我们的示例中),该变量将代表服务器使用的主要网络接口,然后使用该变量永久添加路由规则:
SHARK=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $SHARK -j MASQUERADE
确保通过重新加载firewalld对防火墙规则进行以下更改:
firewall-cmd --reload
9)V** Client端下载安装V**
oV**官网可以下载
并将如下四个文件从V Server上sz下载下来,拷贝到V Client的安装目录下config文件夹
/etc/oV**/server/ca.crt /etc/oV**/server/ta.key /etc/oV**/server/issued/client1.crt
/etc/oV**/server/private/client1.key
并从C:\Program Files\OV**\sample-config拷贝client.oV**文件到config目录下进行编辑
添加及修改如下字段
client
remote 124.204.78.18 1194
;dev tap
dev tun
;dev-node MyTap
;proto tcp
proto udp
;remote my-server-1 1194
;remote my-server-2 1194
;remote-random
resolv-retry infinite
;redirect-gateway def1
nobind
;user nobody
;group nobody
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]
;mute-replay-warnings
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3
;mute 20
修改完成后重命名为client1.oV**
10)打开OV GUI 连接V**
11) 连上V后,获取到V**地址为10.8.0.X段地址,ping 内网OVServer的内网地址 192.168.60.113可以ping通
ov 2.4 设置用户密码认证,实现一账号多用户登陆
1.创建用户认证脚本(checkpsw.sh)
[root@localhost ~]# cat /etc/openv**/checkpsw.sh
#!/bin/sh
###########################################################
PASSFILE="/etc/openv**/psw-file"
LOG_FILE="/etc/openv**/openv**-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
给予脚本执行权限:
chmod 755 /etc/openv**/checkpsw.sh
2.配置用户密码文件
[root@localhost ~]# cat /etc/openv**/psw-file
user1 passwd1
user2 passwd2
3.修改服务端配置文件
在server.conf末尾添加如下几行信息:
script-security 3
auth-user-pass-verify /etc/openv**/checkpsw.sh via-env #指定用户认证脚本
username-as-common-name
verify-client-cert none
4.修改客户端配置文件(不注释就需要输入两次密码)
注释掉cert和key(客户端不需要crt和key文件,但是需要服务器的CA证书)
;cert eva.crt
;key eva.key
添加如下内容:
auth-user-pass
cat /etc/openv**/client.ov**
client
dev tun
proto tcp
remote 123.xxx.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
tls-auth ta.key 1
remote-cert-tls server
ca ca.crt #该文件一定要与服务器端ca.crt是同一个文件
;cert client.crt #定义客户端的证书文件,此处注释即可
;key client.key #定义客户端的密钥文件,此处不需要开启
comp-lzo #启用允许数据压缩,和Server端保持一致
verb 3
cipher AES-256-CBC
auth-user-pass #使用用户名密码登录openv**服务器
配置客户端固定IP(只需要修改server端配置文件即可)
用户密码认证
mkdir /etc/openv**/ccd #新建目录
1.服务端添加下面一行配置
cat server.conf
...
...
client-config-dir /etc/openv**/ccd #添加此行
2.配置具体用户的IP
cat user1 #user1对应pws-file文件里面设置的用户名
ifconfig-push 172.16.0.56 172.16.0.57
3.重启服务
service openv** restart #服务端重启服务
#linux客户端,kill掉进程重新执行下:
ps -ef| grep openv**
root 10674 10658 0 11:48 pts/0 00:00:00 grep open**
root 32466 1 0 May25 ? 00:01:33 openv** --daemon --cd /etc/openv**/ --config client.ov** --log-append /var/log/openv**.log
kill -9 32466
openv** --daemon --cd /etc/openvpn/ --config client.ovpn --log-append /var/log/ov**.log
#windows客户端:
断开连接再重新连接
证书认证
如果是使用证书认证的方式,那么只需要将ccd目录下的用户名命名的文件改成客户端证书名即可生效。
例如:
如上面所设置/etc/ov/ccd/user1对应用户user1;则/etc/ov/ccd/client即对应客户端证书名client的配置。
二期
前言
前面章节的介绍 轻松搭建 VPN 服务器 里,我们已经安装好了 OVPN 服务器,创建用户的操作以及维护相关的配置文件都需要在后台命令行下操作,使用起来还是有些不方便。
今天来介绍一个开源的 OVPN 管理软件 - OpenVPN-Admin-Plus 。
环境
先来看看服务器端的环境配置,安装好的服务器配置目录为 /etc/openvpn/server/ ,其相关的配置文件目录结构如下:
|-- etc/
| |-- openvpn/
| |-- client/
| |-- server/
| |-- ca.crt
| |-- ca.key
| |-- client-common.txt
| |-- crl.pem
| |-- dh.pem
| |-- easy-rsa/
| |-- ipp.txt
| |-- server.conf
| |-- server.crt
| |-- server.key
| |-- tc.key
OpenVPN-Admin-Plus 管理的 OVPN 目录为 /etc/openvpn/ ,懂编程的同学可以自己去源码中进行调整配置目录并重新编译打包。文章最后会给出一个修改好的版本,大家可以直接下载使用。
为了避免文件被修改和覆盖,我们先把服务的配置文件给打包进行备份:
cd /etc/openvpn
tar czvf openvpn-server.tgz server
部署
启动管理服务
我们把下载好的程序压缩包进行解压
tar xvf openvpn-admin-plus.tar.gz
然后进入到解压目录
cd openvpn-admin-plus
看到的目录结构如下,其中 openvpn-admin-plus 文件就是启动程序文件
我们先来启动服务
./openvpn-admin-plus
从启动日志中,我们看到绑定的 web 服务端口是 38080 ,我们打开浏览器直接访问
http://192.168.0.88:38080/
地址栏中的IP地址为openvpn-admin-plus所在服务器的IP
自动跳转到登录页面
默认的账号是 admin ,密码为 b3secure 。点击登录按钮后可能需要等待几秒钟才会进入首页
可以从日志上看到是因为在寻找 OVPN 的管理地址。
进入首页之后,会看到一些异常的提示信息,我们只需要进行一些设置就可以正常显示了
OVPN开启管理功能
为了能在 OpenVPN-Admin-Plus 上管理 OVPN ,我们需要开启管理功能,执行以下命令
echo "management 0.0.0.0 2080" >> /etc/openvpn/server/server.conf
systemctl restart openvpn-server@server.service
以上命令是在OVPN中开启管理端口2080,然后重启服务使配置生效
为了能看到OVPN服务运行状态,可以开启日志:
echo "status /etc/openvpn/server/openvpn-status.log" >> /etc/openvpn/server/server.conf
echo "log /etc/openvpn/server/openvpn.log" >> /etc/openvpn/server/server.conf
systemctl restart openvpn-server@server.service
配置管理服务
再回到管理页面上,我们点击顶部的【Configuration】菜单
在设置页面中,我们需要调整三个配置信息:
1. OVPN的管理地址和端口,即前边我们开启的管理功能
2. OVPN客户端程序访问的IP地址
3. OVPN的配置目录
保存成功后提示设置已经更新
之后我们进入【Status】页面,可以看到已经成功连接上 OVPN 并显示了连接信息
调整配置信息
1. 客户端认证信息
管理软件读取证书的路径与 OVPN 不一致,我们需要创建一个文件的软链接,使得管理软件能读取里边的信息
ln -s /etc/openvpn/server/tc.key /etc/openvpn/server/easy-rsa/pki/ta.key
2. 认证证书配置
管理软件可以维护用户和证书,所以需要指定一些证书相关的配置信息,这些信息保存在管理软件目录下的文件 conf/vars 里
里边有定义生成证书的信息,根据个人需要进行修改
vi conf/vars
然后把这个文件复制到 OVPN 目录下
cp conf/vars /etc/openvpn/server/easy-rsa/
之后停掉管理软件的服务(ctrl + c),再重新启动
./openvpn-admin-plus
使用
我们重新访问管理软件,来看一下如何生成用户并下载客户端认证文件。
用户管理
点击菜单【Certificates】进入证书管理页面。在这里,我们可以管理用户,进行权限回收和删除用户。同时也可以创建用户。
可以点击账号名称下载客户端的配置文件
查看日志
点击菜单【Logs】查看日志
管理账号
修改管理账号信息
写在最后
有了 WEB 管理 OVPN 也就轻松多了,觉得不错的点个赞。
官网源码地址为
https://github.com/bnhf/openvpn-admin-plus.git