跳过正文
  1. 博客文章/

使用 Docker Compose 部署 OpenConnect VPN 服务器

·213 字·1 分钟·
Linux 网络 Openconnect Docker-Compose Openldap
Zayn
作者
Zayn
专注 Kubernetes、CI/CD、可观测性等云原生技术栈,记录生产环境中的实战经验与踩坑复盘。
目录

环境要求
#

本文档基于以下环境进行部署:

  • Docker Compose:1.18.0
  • 操作系统:OpenWrt (x86)
  • Docker 版本:19.03.12
  • Docker 镜像yangzun/docker-openconnect-ldap:latest

说明:该镜像基于 morganonbass/ocserv-ldap 进行了修改和优化,解决了原镜像无法正常启动的问题。

部署准备
#

安装 Docker Compose
#

yum install -y docker-compose

配置部署文件
#

创建项目目录
#

mkdir -p /data/docker-compose/openConnect
cd /data/docker-compose/openConnect

创建 Docker Compose 配置
#

cat > docker-compose.yaml << EOF
version: "3"
services:
  ocserv:
    container_name: ocserv
    image: yangzun/docker-openconnect-ldap:latest
    ports:
      - "1443:443/tcp"
      - "1443:443/udp"
    environment:
      LISTEN_PORT: 443
      TUNNEL_MODE: 'split-include'
      TUNNEL_ROUTES: '192.168.8.0/24'
      DNS_SERVERS: 192.168.8.1
      CLIENTNET: 192.168.248.0
      CLIENTNETMASK: 255.255.255.128
      BASEDN: 'dc=treesir,dc=pub'
      LDAPURI: 'ldap://192.168.8.1:389/'
      BINDDN: 'cn=admin,dc=treesir,dc=pub'
      BINDPW: '123456'
      SEARCHSCOPE: 'ou=users,dc=treesir,dc=pub'
      PAM_LOGIN_ATTRIBUTE: 'uid'
      CA_CN: 'VPN CA'
      CA_ORG: 'OCSERV'
      CA_DAYS: 9999 
      SRV_CN: 'nps.treesir.pub'
      SRV_ORG: 'Example Company'
      SRV_DAYS: 9999
    volumes:
      - './config/:/config/'
    cap_add:
      - NET_ADMIN
    privileged: true
    restart: unless-stopped
EOF

配置说明:环境变量的详细说明请参考 Docker Hub 页面。OpenLDAP 的部署配置请参考 LDAP 部署文档

启动服务
#

docker-compose up -d

连接测试
#

我们使用 Cisco AnyConnect 客户端进行连接测试。

客户端下载Cisco AnyConnect 官方下载页面

内网连接测试
#

image-20210515164132639

测试结果显示,使用内网地址可以正常连接,客户端获取到的 IP 地址为配置文件中指定的地址段 192.168.248.0/25

公网连接测试
#

由于运营商未提供公网 IP,这里使用内网穿透工具 NPS 进行测试演示。

NPS 端口映射配置
#

image-20210515165420780

协议选择说明:这里使用 TCP 协议进行映射。相比 UDP 协议,TCP 具有更好的稳定性,不易被运营商拦截。在网络攻击等异常情况下,运营商通常会优先关闭 UDP 等不安全协议。虽然 UDP 在传输速度上有一定优势,但 TCP 的稳定性更适合 VPN 连接。

PC 客户端测试
#

image-20210515170037710

PC 端连接测试成功,可以正常建立 VPN 连接。

image-20210516102945530

断开连接后,服务器端会输出相应的日志信息。

移动端测试
#

使用 AnyConnect 移动端客户端进行测试:

image-20210516103818697

常见问题
#

iptables 规则报错
#

问题现象

image-20210515225610391

image-20210515225706525

解决方案

该问题由 iptables 版本不兼容导致,需要切换到 legacy 版本:

update-alternatives --set iptables /usr/sbin/iptables-legacy

说明:该修复已集成到 Dockerfile 的 docker-entrypoint.sh 脚本中,代码提交后会自动触发镜像构建。

image-20210516104420599

总结
#

OpenConnect vs OpenVPN
#

OpenConnect 相比 OpenVPN 具有以下优势:

  • 集中化路由管理:路由配置可在服务端统一控制,无需修改客户端配置文件
  • 安全性更高:避免了客户端配置文件的安全风险,便于管理员统一管控
  • 性能表现:两者都基于 TLS 证书验证,性能差异不大
  • 部署便捷:通过 Docker Compose 可实现一键部署

参考文档
#

相关文章

OpenVpn 的安装,并配置关联 openLdap 认证
·390 字·2 分钟
Linux 网络 Openvpn Install
Docker 部署 OpenLDAP 统一身份认证服务
·2305 字·11 分钟
DevOps Openldap Docker Authentication Devops
Centos7 执行 shutdown 无法正常关机的解决
·104 字·1 分钟
Linux Centos7 Shell