今日天气
  1. 博客/

使用 Docker-Compose 部署 openConnect Vpn Server

·793 字·2 分钟· ·
linux network openconnect docker-compose openldap
Johny
作者
Johny
熟练的 云原生搬砖师
Table of Contents

环境说明
#

  • 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
#

yum install -y docker-compose

创建 docker-compose 部署文件
#

创建目录

mkdir -p /data/docker-compose/openConnect

创建部署文件

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 的部署配置部分请参考较早期 文档说明

创建配置文件后的启动

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 即可

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

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

image-20210516104420599

总结
#

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

相关文章

OpenVpn 的安装,并配置关联 openLdap 认证
·953 字·2 分钟·
linux network openvpn install
Centos7 执行 shutdown 无法正常关机的解决
·468 字·1 分钟·
linux centos7 shell
Docker 部署的 openWrt 软路由, 并解决无法与宿主机通信问题
·923 字·2 分钟·
fix openwrt n1 docker-compose docker openwrt
Git 使用问题的记录
·322 字·1 分钟·
devops linux git
Raid 阵列卡 Megacli 管理工具的使用记录
·211 字·1 分钟·
linux raid stroage
部署 Devops 必备利器 OpenLdap
·953 字·2 分钟·
devops openldap centos7