环境说明

  • docker-compose:1.18.0

  • 操作系统: openwrt (x86)

  • docker version: 19.03.12

  • docker image yangzun/docker-openconnect-ldap:latest

    此镜像基于 morganonbass/ocserv-ldap 之上做了修饰修改,原因为此容器存在 bug,无法正常启动。

部署前的准备工作

安装 docker-compose

1
yum install -y docker-compose

创建 docker-compose 部署文件

创建目录

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

创建部署文件

 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
cd /data/docker-compose/openConnect

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

上述 environment 指定的变量这里不做过多的介绍说明,在对应的 readme 页面中已有详细介绍。有关于openldap 的部署配置部分请参考较早期 文档说明

创建配置文件后的启动

1
docker-compose up -d

测试验证

这里使用的测试连接的软件为anyConnect

内网本地测试

image-20210515164132639

可以看到我们这里使用 内网地址 进行连接是可以正常连接上的,获取到的客户端地址也是我们配置文件中写的的地址段中的 ip 即 192.168.248.0/25

配置公网进行测试

因为运营商这边不愿意提供 公网ip,所有我这里将展示使用 内网穿透工具 (nps) 进行测试。

nps 配置端口映射

image-20210515165420780

这里映射的端口是 tcp 协议,tcp 相较与 udp 的优势是更加稳定,且不易被运营商进行拦截,打个比方比如运营商服务器目前正在被网络流量攻击时,会优先关闭 udp协议 (不安全协议)。不过 udp 也有自己的优势,那就是速度相对与 tcp 更加的快速。

PC 测试连接

image-20210515170037710

同样的正常连接上了

image-20210516102945530

断开连接后,也有对应的日志输出

手机端测试

这里测试使用的依然是 anyConnect 手机端

image-20210516103818697

问题记录

启动时,iptables 规则提示报错

image-20210515225610391

image-20210515225706525

排查原因为 iptables 版本不兼容导致,更改使用为 /usr/sbin/iptables-legacy 即可

1
update-alternatives --set iptables /usr/sbin/iptables-legacy # 非交互式进行更改

并在 Dockerfile 对应指定的 docker-entrypoint.sh 脚本中加入,代码提交自动触发 image build

image-20210516104420599

总结

openConnect 相较于 openVpn 的优势是,服务之间的路由可以通过在 服务端进行控制 (route 配置项)。而 openVpn 要通过更改客户端这边的 config ,相较于不太安全,也不符合管理员进行掌控全局的设定。速度方向 个人使用 感觉差异不大,加密原理多是使用的 tls证书 进行验证,性能差异应该不会太大。更加高级配置请参考如下文档。