使用Docker快速部署Ocserv 搭建Cisco AnyConnect VPN服务端

58849bbbf8145251-1000x500-1

ocserv是Cisco Anyconnect的开源实现,为了降低对系统的依赖和免除linux不同发行版有不同的部署体验,建议不论你是新手还是老手,都使用docker(docker-compose)进行快速部署,部署完毕之后,你可以使用自己的配置进行替换。目前的版本为ocserv主线最新版本,内置证书自动部署和密码登录。在docker容器镜像的制作上,直接使用alpine做docker容器的系统,这样整个镜像可以做到22MB。

部署前的准备工作

安装docker

直接按照官方教程进行,以下为Linux安装脚本,注意不要直接使用系统自带的源发布的docker.io这个包,要使用官方推荐的方式进行安装:

# curl -sSL https://get.docker.com | sh

## ubuntu
# source /usr/share/bash-completion/completions/docker
# cp /usr/share/bash-completion/completions/docker /etc/bash_completion.d/

安装docker-compose

如果你使用较新的Linux发行版,可以直接使用包管理器进行docker-compose的安装,否则一律建议从官方github直接安装二进制版本,如下:

# curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

开始部署

创建docker-compose.yml

version: '3'

services:
  ocserv:
    image: icodex/ocserv
    volumes:
      - ./opt/ocserv:/etc/ocserv:rw
    environment:
      - VPN_DOMAIN=ocserv.eu.org
      - VPN_PORT=443
      - IPV4_NETWORK=10.8.8.0/21
      - IPV6_NETWORK=fda9:4efe:7e3b:03ea::/48
      - VPN_USERNAME=username
      - VPN_PASSWORD=password
    privileged: true
    network_mode: host
    cap_add:
      - NET_ADMIN
    restart: always

使用vim编辑docker-compose.yml,编辑VPN_DOMAINVPN_PORTUSERNAMEPASSWORD这几个值,分别对应了连接使用的域名、端口、用户名、密码等。

然后先运行一次,运行完毕之后即可退出,待进一步配置ssl证书等操作。

# docker-compose up

当屏幕不再滚动时,即可按ctrl+c退出。

进一步配置

替换web ssl证书

在上一步运行之后,会在当前目录下的./opt/ocserv看到当前运行的配置文件,默认镜像中是自签名证书,不带管理web ssl证书的功能,这部分你可以使用acme.sh自动签发,或者购买证书,然后将证书链替换生成的自签名web ssl证书。如果你不介意自签名证书的警告提示,可以忽略这步

所需替换的证书有:

证书文件:./opt/ocserv/certs/server-cert.pem
私钥文件:./opt/ocserv/certs/server-key.pem

注意替换证书文件时,要使用fullchain,即包含中间证书的。

管理用户证书

默认会自动创建用户证书,你可以将./opt/ocserv/certs/client.pfx拷贝到本地设备上,然后在anyconnect导入即可。如果要管理更多用户证书,建议使用xca进行GUI管理,这个软件是跨平台开源软件,可以自己签发ca和管理用户证书。具体使用可以自行搜索。

添加用户密码

如果你不想使用用户证书这种方式登录服务器,可以使用用户密码登录,如新增用户:

docker exec -it $(docker ps -a | grep ocserv | awk '{print $1}') ocpasswd yourname

更多信息,请参考官方文档:https://ocserv.gitlab.io/www/recipes.html

客户端下载

ocserv是Cisco Anyconnect的开源实现,因此这里可以直接使用Cisco Anyconnect的客户端,ocserv虽然有自己的openconnect,但这个体验在桌面系统上是不如Anyconnect的。

Anyconnect全平台下载地址,已经整理在这个网站内,请移步 https://anyconnect.eu.org/

openconnect也有好用的地方,比如你是Linux命令行终端的,可以使用证书直接一步登录到服务器,首先安装openconnect客户端

#Ubuntu/Debian
apt install openconnect
#Centos
yum install openconnect

使用时只需一行命令就可以了,注意ocserv.eu.org更换为自己的服务器,-c后面跟的是证书,-k后面跟的是密钥

openconnect ocserv.eu.org -c user.crt -k user.key

你也可以把上述命令放进.sh文件中,例如保存为vpn.sh,后续只需要执行这个vpn.sh就好。

#!/bin/sh

openconnect $1 -c user.crt -k user.key

使用时

# ./vpn.sh ocserv.eu.org

注意,openconnect连接时是需要直接提供服务器地址的,它并不能用到profile.xml

profile.xml是兼容Cisco Anyconnect的服务器列表描述信息,方便管理员在维护时及时下发准确的服务器列表,后面有机会的时候再仔细说说。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享