📖 介绍

本文主要介绍如何在Linux服务器搭建使用ocserv服务的使用,主要用于公司内网的使用

云服务器上搭建ocserv,可以方便地访问内网资源,同时保证数据传输的安全性。在本文中,我们将详细介绍在CentOS 7上搭建ocserv的步骤,以帮助您更好地利用云服务器和ocserv,提高工作效率和数据安全性。官网地址 参考地址

🧰 部署

安装非常简单,只需要一条命令即可

1
$ sudo yum install -y epel-release && sudo yum install ocserv -y

配置

修改conf配置

注:ocserv可以使用tcp,udp同时提供服务,必须开启tcp端口,否则无法提供服务,而udp为了提高传输效率,根据需求配置。

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
cat /etc/ocserv/ocserv.conf
auth = "plain[passwd=/etc/ocserv/ocpasswd]" #这里用密码验证,将其他配置项注释
tcp-port = 443
udp-port = 443
run-as-user = ocserv
run-as-group = ocserv
socket-file = ocserv.sock
chroot-dir = /var/lib/ocserv
isolate-workers = true
max-clients = 16
max-same-clients = 2
keepalive = 32400
dpd = 90
mobile-dpd = 1800
switch-to-tcp-timeout = 25
try-mtu-discovery = false
server-cert = /etc/pki/ocserv/public/server.crt #如果是IP:端口的方式连接,这两项保持默认即可
server-key = /etc/pki/ocserv/private/server.key #如果是域名的方式,需要将证书地址代替此两项
ca-cert = /etc/pki/ocserv/cacerts/ca.crt
cert-user-oid = 0.9.2342.19200300.100.1.1
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"
auth-timeout = 240
min-reauth-time = 300
max-ban-score = 50
ban-reset-time = 300
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-occtl = true
pid-file = /var/run/ocserv.pid
device = vpns
predictable-ips = true
default-domain = example.com
ping-leases = false
cisco-client-compat = true
dtls-legacy = true
user-profile = profile.xml
dns = 8.8.8.8 #连接后的DNS,如果是公司内部网页有域名访问一定要修改成内部的DNS服务器
ipv4-network = 10.10.200.0 #拨通VPN后分配的网段自定义
ipv4-netmask = 255.255.255.0 #拨通VPN后分配的子网掩码

route = 172.16.0.0/255.255.0.0 #配置路由,需要从本地访问的对端网段,可以配置多段
route = 192.168.0.0/24
route = 172.16.0.0/23
# 公司内网
route = 192.168.0.0/24
# 益田网段
route = 172.18.0.0/24
route = 172.16.0.0/23
route = 172.16.0.0/16
# 盐田网段
route = 172.36.250.0/25
route = 172.36.0.0/29
# 福田网段
route = 223.2.0.0/32
route = 223.2.0.0/24
route = 223.2.84.0/27
route = 223.2.84.0/24
route = 223.2.0.0/27
route = 172.17.0.0/24
route = 172.16.0.0/24

注:需要在route中添加一条到内网网段的路由,否则虽然连接上了vpn服务器,但无法访问内网主机,若内网网段为172.31.0.0,那route就需要添加route = 172.31.0.0/255.255.255.0。

注:连接后为全局代理,建议在route配置项中配置多段,否则会影响网速

参数介绍说明

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
auth:ocserv的认证方式。在这里,我们使用的是plain方式,也就是明文方式。需要注意的是,此方式下的密码需要进行hash处理。
tcp-port:ocserv监听的tcp端口号。
udp-port:ocserv监听的udp端口号。
run-as-user:指定ocserv进程运行的用户。
run-as-group:指定ocserv进程运行的组。
server-cert:指定服务器证书的路径。
server-key:指定服务器私钥的路径。
max-clients:指定最大同时连接数。
max-same-clients:指定同一个客户端的最大连接数。
keepalive:指定连接的保持时间。
dpd:指定连接的DPD(Dead Peer Detection)时间。
mobile-dpd:指定移动设备的DPD时间。
cert-user-oid:指定证书中的用户名字段。
tls-priorities:指定TLS加密方式的优先级。
auth-timeout:指定认证超时时间。
min-reauth-time:指定最小重新认证时间。
max-ban-score:指定最大禁用次数。
ban-reset-time:指定禁用重置时间。
cookie-timeout:指定Cookie的超时时间。
deny-roaming:是否允许漫游。
rekey-time:指定重新协商密钥的时间。
rekey-method:指定重新协商密钥的方式。
use-occtl:是否使用occtl。
pid-file:指定PID文件的路径。
device:指定虚拟设备的名称。
predictable-ips:是否启用可预测的IP地址。
ipv4-network:指定IPv4地址池的网段。
ipv4-netmask:指定IPv4地址池的子网掩码。
dns:指定DNS服务器的地址。
route:指定路由的网段。

配置证书

1、生成证书

创建一个名为 ca.tmpl 的CA证书模板

1
2
3
4
5
6
7
8
9
10
cat > ca.tmpl << EOF
cn = "ocdxbim.com"
organization = "ocdxbim.com"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key
EOF

2、生成服务器证书,这里注意cn项必须对应你服务器的域名或IP,模板名称是 server.tmpl

1
2
3
4
5
6
7
8
cat > server.tmpl << EOF 
cn = "demo.dxbim.com"
organization = "ocdxbim.com"
expiration_days = 3650
signing_key
encryption_key
tls_www_server
EOF

3、执行证书生成脚本

1
2
3
4
5
6
7
8
9
[dx@openconnect certificates]$ cat generat.sh 
#生成CA密钥
certtool --generate-privkey --outfile ca-key.pem
#生成CA证书
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
#生成密钥
certtool --generate-privkey --outfile server-key.pem
#生成server证书
certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem

4、拷贝证书到服务运行目录

1
2
mkdir -p /etc/ocserv/ssl
cp -r *.pem /etc/ocserv/ssl

创建用户账号

在完成配置文件的修改后,需要创建一个新的用户账号为登录使用。

后续需要增加和删除用户,只需要管理这个配置文件即可

1
2
3
4
5
6
7
8
9
10
#其中,username是您要创建的用户名。
sudo ocpasswd -c /etc/ocserv/ocpasswd hongtao.yang


VPN-使用Ciso客户端链接,刚给你创建了一个账号
地址:szvpn.daxiangyun.com:8866
账号:sudo ocpasswd -c /etc/ocserv/ocpasswd hong.he
密码:dxDXZLP@@11
# 设置开启自启动
systemctl start ocserv && systemctl enable --now ocserv

防火墙路由配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1、开启系统数据包转发
sysctl -w net.ipv4.ip_forward=1
#永久设置
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p

2、设置iptables 转发策略,注意网卡写本机出口网卡
iptables -t nat -A POSTROUTING -s 10.10.200.0/24 -o ens192 -j MASQUERADE
iptables -A FORWARD -i vpns+ -j ACCEPT
iptables -A FORWARD -o vpns+ -j ACCEPT

eno2
iptables -t nat -A POSTROUTING -s 10.10.200.0/24 -o eno2 -j MASQUERADE

映射端口(可选)

防火墙映射到443端口(可选)

如果是公司内部服务器没有外网的情况下 这个时候使用防火墙的公网IP,添加Nat映射规则,映射好以后可以使用域名绑定这样链接就可以使用域名链接加端口号即可

使用anyconnect 客户端链接即可链接使用防火墙映射的IP+映射端口

开启日志功能

默认ocserv的日志是由systemd去管理的,这个时候查看日志会很不方便,为了方便查看日志可以使用rsyslog管理ocserv日志

1
2
3
4
5
6
7
8
9
10
11
12
vim /etc/ocserv/ocserv.conf
## 写入日志
LogLevel = 4
SyslogFacility = daemon
SyslogLevel = 4

cat /etc/rsyslog.conf
# 这个配置表示把所有 daemon 日志级别的日志消息都重定向到 /var/log/ocserv.log 文件中。
daemon.* /var/log/ocserv.log

# 重启服务,当看到日志写入代表成功
systemctl restart rsyslog

下载客户端连接工具

可以在官网自行下载,不过需要登录Cisco的账号才可以下载

也可以使用我自己提前下载的好的包,下面是网盘地址

具体使用参考下图,客户端打开以后点击设置按钮取消勾选Disable Captive Portal Detection

然后输入用户名密码允许弹框允许即可