docker: OpenVPN Client

OpenVPNのクライアント側を設定する。

サーバ同様にdocker-compose.yamlで証明書やOpenVPNのconfigをコンテナに配置する。

version: '2.3'
services:
  ovpnclientb:
    image: ovpn:alpine_3.12.0_r1
    container_name: ovpnclientb
    init: true
    cap_add:
      - NET_ADMIN
    cap_drop:
      - chown
      - dac_override
      - fowner
      - sys_chroot
      - audit_write
      - setfcap
      - fsetid
    working_dir: /etc/files/OVPN
    network_mode: "host"
    command: RUN
    restart: unless-stopped
    volumes:
      - "./files/clientb/ca.crt:/etc/files/OVPN/ca.crt"
      - "./files/clientb/clientB.crt:/etc/files/OVPN/client.crt"
      - "./files/clientb/clientB.key:/etc/files/OVPN/client.key"
      - "./files/clientb/ta.key:/etc/files/OVPN/ta.key"
      - "./files/clientb/clientB.conf:/etc/files/OVPN/config.conf"
      - "./files/clientb/log:/etc/files/OVPN/log"
      - "./files/clientb/start.sh:/etc/files/OVPN/start.sh"

OpenVPNのconfigサンプルは次。fragment含め、諸所の設定はサーバに合わせる。サーバ側はIPv4とIPv6のどちらを使っても接続可能にしているので、今回はv6アドレスで指定しておく。

# cat clientB.conf
status       /etc/files/OVPN/log/status.txt 5
status-version 2
log         /etc/files/OVPN/log/openvpn.log
verb 3

proto udp6
remote aaaa:bbbb:cccc:dddd:eeee:ffff:1111:2222 1194

client
dev tun11
float

cipher AES-256-GCM
ncp-ciphers AES-256-GCM
auth SHA256

resolv-retry infinite
nobind

persist-key
persist-tun

remote-cert-tls server
ca         /etc/files/OVPN/ca.crt
cert       /etc/files/OVPN/client.crt
key        /etc/files/OVPN/client.key
tls-crypt  /etc/files/OVPN/ta.key
ecdh-curve secp521r1

keepalive 5 30
fragment 1432
mssfix

サーバ側も同じであるが、logファイルが残るようになっているので適宜ホスト側でクリーンアップやローテートを行うと良い。