通过 Docker 部署 OpenConnect 服务器
什么是 OpenConnect Server
OpenConnect server (ocserv) 是一个基于 SSL 的 VPN 服务器。它是基于 OpenConnect SSL VPN 协议实现的,同时(实验性质)兼容使用 Cisco AnyConnect SSL VPN 协议的客户端。
如何部署服务器
考虑到架设 OpenConnect Server 对于大多数用户来说比较困难,所以我制作了一个 Docker 镜像。以下所有教程都是基于该 Docker 镜像的。如果你不知道什么是 Docker,请先访问 Docker 的网站了解相关信息。如果你对镜像文件不放心,可以在以下地址找到该镜像的原始 Dockerfile 和相关信息:Docker Hub,GitHub
开始前的准备工作
- 知道并了解 Docker 的运行原理和机制
- 掌握基本的服务器架设能力,熟悉 Linux 命令,并且在服务器上成功部署了 Docker
- 如果你使用的是 VPS 的话,请联系 ISP 确认是否支持 TUN 设备
OpenConnect Server 的安装
一条如此简单的命令,就可以把 OpenConnect Server (ocserv) 安装到你的服务器了:
1 | docker pull tommylau/ocserv |
使用下面的命令,就可以马上运行 ocserv 来体验了:
1 | docker run --name ocserv --privileged -p 443:443 -p 443:443/udp -d tommylau/ocserv |
上述命令会创建并运行一个新的 container,同时会添加一个用户名和密码均为 test
的用户。如果你只需要临时使用一下,不关心安全问题的话,那么看到这里就可以结束了。如果你需要更多的设置,请继续阅读。
用户操作
所有的用户操作必须在实例运行的时候才可以进行。如果你的 Docker 实例名不是 ocserv
的话,请根据实际情况自行调整。
添加用户
假如说,你想创建一个名为 tommy
的用户,使用如下命令
1 | docker exec -ti ocserv ocpasswd -c /etc/ocserv/ocpasswd tommy |
当提示输入密码的时候,输入两次密码,便可创建该用户。
删除用户
删除用户与添加用户类似,唯一的区别就是在用户名前面增加 -d
参数
1 | docker exec -ti ocserv ocpasswd -c /etc/ocserv/ocpasswd -d test |
如果你在创建实例的时候,没有使用环境变量 NO_TEST_USER
,那么上述命令将帮你删除默认的 test
用户。
修改密码
修改密码与添加用户的操作是完全一致的,请参考上面添加用户的章节。
高级使用
这个部分会介绍一些高级的使用方法,包括通过环境变量的设置来配置不同的 CA 名称等。
环境变量
对于 tommylau/ocserv
这个 Docker 镜像来说,所有的环境变量都是可选的,也就意味着你拥有一个开箱即用的产品,而不用输入任何参数。当然,如果你是一个定制狂或者有强迫症,那么下面就是为你准备的。
CA_CN
,这是用于生成 CA(Certificate Authority) 证书的名称 (common name)。
CA_ORG
,这是用于生成 CA 证书的组织名称 (organization name)。
CA_DAYS
,这是用于生成 CA 证书的有效期。
SRV_CN
,这是用于生成服务器证书的名称 (common name)。
SRV_ORG
,这是用于生成服务器证书的组织名称 (organization name)。
SRV_DAYS
,这是用于生成服务器证书的有效期。
NO_TEST_USER
,当这个变量设置为非空时,将不会创建 test
用户。你必须要手动添加你自己的用户,并设置密码。默认情况下,系统会自动创建用户名为 test
,密码也为 test
的用户。
上述变量的默认值:
变量 | 默认值 |
---|---|
CA_CN | VPN CA |
CA_ORG | Big Corp |
CA_DAYS | 9999 |
SRV_CN | www.example.com |
SRV_ORG | My Company |
SRV_DAYS | 9999 |
一些运行范例
使用开箱即用的方式,用户名和密码均为 test
1 | docker run --name ocserv --privileged -p 443:443 -p 443:443/udp -d tommylau/ocserv |
创建服务器名为 my.test.com
,组织为 My Test
,有效期为 365
天的实例
1 | docker run --name ocserv --privileged -p 443:443 -p 443:443/udp -e SRV_CN=my.test.com -e SRV_ORG="My Test" -e SRV_DAYS=365 -d tommylau/ocserv |
创建一个签发机构为 My CA
,签发组织为 My Corp
,有效期为 3650
天的实例
1 | docker run --name ocserv --privileged -p 443:443 -p 443:443/udp -e CA_CN="My CA" -e CA_ORG="My Corp" -e CA_DAYS=3650 -d tommylau/ocserv |
一个包含 CA 和服务器证书的,完全定制化的实例
1 | docker run --name ocserv --privileged -p 443:443 -p 443:443/udp -e CA_CN="My CA" -e CA_ORG="My Corp" -e CA_DAYS=3650 -e SRV_CN=my.test.com -e SRV_ORG="My Test" -e SRV_DAYS=365 -d tommylau/ocserv |
如上述的完全定制化的实例,但是不创建 test
用户
1 | docker run --name ocserv --privileged -p 443:443 -p 443:443/udp -e CA_CN="My CA" -e CA_ORG="My Corp" -e CA_DAYS=3650 -e SRV_CN=my.test.com -e SRV_ORG="My Test" -e SRV_DAYS=365 -e NO_TEST_USER=1 -v /some/path/to/ocpasswd:/etc/ocserv/ocpasswd -d tommylau/ocserv |
警告:ocserv 在启动的时候需要 ocpasswd 文件,如果你设置了 NO_TEST_USER=1
,ocpasswd 文件将不会被创建,进而导致到服务器启动后立即停止。你必须要像上面示例中那样,使用 Docker 的 -v
挂在参数,指定一个 ocpasswd 文件到 /etc/ocserv/ocpasswd
。