CentOS 7 部署 OpenVPN AS

温馨提醒

OpenVPN 和 OpenVPN AS 的区别

  • openvpn是一个开源的 vpn 解决方案,提供基本的 vpn 功能

    openvpn as 是一个商业产品,提供用户图形界面

  • openvpn 需要手动配置,适合有技术的用户

    openvpn as 提供一个易于使用的图形界面,简化了配置和管理

  • openvpn 是社区支持的,依赖于社区文档和论坛

    openvpn as 提供官方技术支持和更新

  • openvpn 是完全开源的

    openvpn as 有免费版和商业版,商业版需要许可证,免费版只支持2个客户端连接

  • openvpn as 不是 openvpn 的 web 界面,它们是两个独立的产品,没有依赖关系,安装了 openvpn as 就不需要安装 openvpn 了

系统参数配置

内核参数配置

vim /etc/sysctl.conf

1
2
3
4
5
net.ipv4.ip_forward = 1
fs.file-max = 65535000
fs.nr_open = 65535000
kernel.pid_max=655350
vm.swappiness = 0

系统参数优化

vim /etc/security/limits.conf

1
2
3
4
* soft nproc 655350
* hard nproc 655350
* soft nofile 655350
* hard nofile 655350

安装依赖

安装 scl 源

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 安装 scl 源
yum install centos-release-scl

# 修改成阿里云地址
vim /etc/yum.repos.d/CentOS-SCLo-scl.repo

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

安装依赖

1
yum install libxslt libtool-ltdl net-tools xmlsec1-openssl xmlsec1 cyrus-sasl unzip libpcap gcc* wget unzip zip ntp

部署 OpenVPN AS

下载

1
2
3
4
wget https://openvpn.net/downloads/openvpn-as-latest-CentOS7.x86_64.rpm
wget https://openvpn.net/downloads/openvpn-as-bundled-clients-latest.rpm

yum localinstall openvpn-as*

破解用户限制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 切换到一个干净,没有任何文件的目录
cd /usr/local/src/

# 拷贝文件
cp /usr/local/openvpn_as/lib/python/python-2.0-py3.8.egg /usr/local/src/

# 解压
unzip /usr/local/src/python-2.0-py3.8.egg
cd /usr/local/src/pyovpn/lic
mv uprop.pyc uprop2.pyc

# 修改文件
vim uprop.py

from pyovpn.lic import uprop2
old_figure = None
 
def new_figure(self, licdict):
      ret = old_figure(self, licdict)
      ret['concurrent_connections'] = 4096			# 用户连接数限制
      return ret
 
for x in dir(uprop2):
      if x[:2] == '__':
         continue
      if x == 'UsageProperties':
         exec('old_figure = uprop2.UsageProperties.figure')
         exec('uprop2.UsageProperties.figure = new_figure')
      exec('%s = uprop2.%s' % (x, x))

# 编译源码
python3 -O -m compileall uprop.py
mv __pycache__/uprop.*.pyc uprop.pyc

# 压缩打包文件
cd /usr/local/src/
zip -rq pyovpn-2.0-py3.8.egg ./pyovpn ./EGG-INFO ./common

# 替换文件
mv pyovpn-2.0-py3.8.egg /usr/local/openvpn-as/lib/python/

重置密码

1
2
3
cd /usr/local/openvpn_as/scripts
./sacli --user "openvpn" --new_pass=123456 SetLocalPassword
./sacli start

配置单个用户多个会话设置

1
2
3
cd /usr/local/openvpn_as/scripts/
./sacli --key "vpn.server.duplicate_cn" --value "true" ConfigPut
./sacli start

重启服务,验证是否解除用户限制

1
systemctl restart openvpnas

浏览器访问:http://OpenVPN-AS:943/admin

1

2

管理界面的使用

登录管理界面,修改外网映射地址

3

设置客户端访问方式

4

5

如果希望客户访问内网 172.20.10.0/24 地址,客户端流量不经过VPN转发,可以修改下面两个设置

Should client Internet traffic be routed through the VPN? # 设置为 no,客户端流量不经过 VPN 转发 Do not alter clients’DNS server settings # 设置为 yes,不要更改客户端 DNS 服务器配置

添加用户

6

7

客户端登录

客户端访问:http://OpenVPN-AS:943/,输入上面创建的用户名和密码

8

9

10

把下载的密钥导入到客户端连接即可

11

12

重新初始化系统,会删除现有的账户信息,恢复到初始化安装完成的状态

1
/usr/local/openvpn_as/bin/ovpn-init --batch --force