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


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

设置客户端访问方式


如果希望客户访问内网 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 服务器配置
添加用户


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



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


重新初始化系统,会删除现有的账户信息,恢复到初始化安装完成的状态
1
| /usr/local/openvpn_as/bin/ovpn-init --batch --force
|