OpenConnect 服务搭建

基于 Ubuntu Desktop 22.04 amd64 系统进行搭建。

安装应用

由于 APT 直接安装的 ocserv 1.1.3 在 Ubuntu 22.04 上会出现崩溃,导致客户端无法连接,所以需要手动安装 1.1.6 及之后的版本。

APT 安装

直接使用 apt 安装应用。

1
2
sudo apt update
sudo apt install -y ocserv

DEB 安装

从 Ubuntu 的软件仓库中下载 ocserv 的 deb 包进行安装。

1
2
wget https://cz.archive.ubuntu.com/ubuntu/pool/universe/o/ocserv/ocserv_1.2.4-1build2_amd64.deb
sudo dpkg -i ocserv_1.2.4-1build2_amd64.deb

源码安装

安装所需依赖。

1
2
sudo apt update
sudo apt install -y libreadline-dev ipcalc-ng gnutls-bin pkg-config nettle-dev libgnutls28-dev libev-dev libprotobuf-c-dev libseccomp-dev

下载源码进行编译安装。

1
2
3
4
5
6
wget https://www.infradead.org/ocserv/download/ocserv-1.3.0.tar.xz
tar -xvf ocserv-1.3.0.tar.xz
cd ocserv-1.3.0
./configure --sysconfdir=/etc
make
sudo make install

新建目录,用于存放 ocserv 的配置文件。

1
2
sudo mkdir /etc/ocserv
sudo cp doc/sample.config /etc/ocserv/ocserv.conf

复制 ocserv.service 文件,创建 ocserv 服务。

1
sudo cp doc/systemd/standalone/ocserv.service /lib/systemd/system/

配置系统

编辑 /etc/sysctl.conf 文件,修改以下配置。

1
#net.ipv4.ip_forward=1 => net.ipv4.ip_forward=1

应用配置文件。

1
sudo sysctl -p

配置 iptables 防火墙的 NAT 功能。

1
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

制作证书

新建任意目录,用于存放制作的自签名证书。

1
2
mkdir certificates
cd certificates

新建 ca.tmpl 模板文件。

1
2
3
4
5
6
7
8
cn = "your organization’s certificate authority"
organization = "your organization"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key

新建 server.tmpl 模板文件。

1
2
3
4
5
6
7
cn = "a sever's name, usually matches hostname"
organization = "your organization"
serial = 2
expiration_days = 3650
signing_key
encryption_key
tls_www_server

生成 CA 证书。

1
2
certtool --generate-privkey --outfile ca-key.pem
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem

生成服务器证书。

1
2
certtool --generate-privkey --outfile server-key.pem
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

将服务器证书复制到 /etc/ocserv 目录。

1
sudo cp server-key.pem server-cert.pem /etc/ocserv/

配置应用

编辑 /etc/ocserv/ocserv.conf 文件,主要修改以下配置。

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
# 使用用户名和密码进行登录
auth = "plain[passwd=/etc/ocserv/ocpasswd]"

# 指定服务监听端口
tcp-port = 443
udp-port = 443

# 指定服务器证书
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem

# 允许同时连接的客户端数量
max-clients = 4

# 限制同一客户端的并行登陆数量
max-same-clients = 2

# 自动优化 MTU 属性,尝试改善网络性能
try-mtu-discovery = true

# 指定证书版本,确保服务器正确读取客户端使用的用户证书。
cert-user-oid = 2.5.4.3

# VPN 分配的网段
ipv4-network = 192.168.1.0
ipv4-netmask = 255.255.255.0

# VPN 分配的 DNS 服务器
dns = 8.8.8.8
dns = 1.1.1.1

# 注释掉所有路由,使服务器成为网关
#route = 10.0.0.0/8
#route = 172.16.0.0/12
#route = 192.168.0.0/16

# 启用 Cisco 客户端兼容性支持
cisco-client-compat = true

添加用户用于 VPN 登录。

1
sudo ocpasswd -c /etc/ocserv/ocpasswd test

运行应用

通过指定配置文件运行应用。

1
sudo ocserv -c /etc/ocserv/ocserv.conf

以调试模式运行应用。

1
sudo ocserv -c /etc/ocserv/ocserv.conf -f -d 1

启动服务,并设置开机启动。

1
2
sudo systemctl start ocserv.service
sudo systemctl enable ocserv.service

查看端口确认服务是否开启。

1
2
3
$ sudo netstat -anop | grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 4280/ocserv off (0.00/0/0)
udp 0 0 0.0.0.0:443 0.0.0.0:* 4280/ocserv off (0.00/0/0)

参考链接

使用 ocserv 搭建企业级 OpenConnect VPN 网关 | EdNovas 的小站

深海游弋的鱼 – 默默的点滴

Basic ocserv configuration - OpenConnect VPN how-to guides

使用ocserv搭建 VPN 畅游网络 | evilvoid

Generic - OpenConnect VPN how-to guides

[Bug 1975550] [NEW] OpenConnect VPN (ocserv): general protection fault in ocserv-worker when a client tries to connect