這是本文件的舊版!


安裝 ovpn-admin (OpenVPN + 簡易 WebUI) 方案

  • 雖然已找到 DockOVPN (OpenVPN Docker方案), 但還是希望能找到有 WebUI 可方便管理 VPN 帳號的方案
  • 安裝環境
    • VM : 2 vCore, 2G RAM, 32G SSD
    • OS : Alpine 3.19 + Docker Compose
  • 規劃環境
    • OpenVPN 內部網路 : 10.16.0.0/24
    • 外部聯入 VPN : vpn.mydomain.com TCP Port 443
  1. Alpine 3.19 Kernel 啟用 ip_tables

    modprobe ip_tables
    echo 'ip_tables' >> /etc/modules
    reboot

  2. 編輯 docker-compose.yml
    services:
      openvpn:
        container_name: openvpn
        image: flant/ovpn-admin:openvpn-latest
        command: /etc/openvpn/setup/configure.sh
        environment:
          OVPN_SERVER_NET: "10.16.0.0"
          OVPN_SERVER_MASK: "255.255.255.0"
          OVPN_PASSWD_AUTH: "true"
        cap_add:
          - NET_ADMIN
        ports:
          - 443:1194 # for openvpn
        volumes:
          - ./easyrsa_master:/etc/openvpn/easyrsa
          - ./ccd_master:/etc/openvpn/ccd
          #- ./openvpn.conf:/etc/openvpn/setup/openvpn.conf
      ovpn-admin:
        container_name: ovpn-admin
        image: flant/ovpn-admin
        command: /app/ovpn-admin
        environment:
          OVPN_DEBUG: "true"
          OVPN_VERBOSE: "true"
          OVPN_NETWORK: "10.16.0.0/24"
          OVPN_CCD: "true"
          OVPN_CCD_PATH: "/mnt/ccd"
          EASYRSA_PATH: "/mnt/easyrsa"
          OVPN_SERVER: "vpn.mydomain.com:443:tcp"
          OVPN_INDEX_PATH: "/mnt/easyrsa/pki/index.txt"
          OVPN_AUTH: "true"
          OVPN_AUTH_DB_PATH: "/mnt/easyrsa/pki/users.db"
          LOG_LEVEL: "debug"
        network_mode: service:openvpn
        volumes:
          - ./easyrsa_master:/mnt/easyrsa
          - ./ccd_master:/mnt/ccd
      nginx:
        container_name: nginx
        image: nginx:latest
        ports:
          - 8080:8080 # for nginx
        volumes:
          - ./.htpasswd:/etc/nginx/.htpasswd:ro
          - ./default.conf:/etc/nginx/conf.d/default.conf:ro
  3. 編輯 default.conf
    server {
      listen 8080;
      server_name 127.0.0.1;
    
      location / {
        auth_basic           "Pass";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass http://openvpn:8080;
      }
    }
  4. 產生管理者帳號密碼檔 .htpasswd Exp. 建立管理者 jonathan

    apk add apache2-utils
    htpasswd -c .htpasswd jonathan
    cat .htpasswd

    應該可以看到類似 jonathan:$arpxxxxxxxxxxx 這樣的內容, 之後新增其他帳號就不需要 -c Exp. htpasswd .htpasswd myadm

  5. 啟動 ovpn-admin 服務

    docker compose up -d

  • 將 /etc/openvpn/setup/openvpn.conf 複製出來, 改成自己想要的版本, 在掛上去使用
  • 處理方式
    1. docker cp openvpn:/etc/openvpn/setup/openvpn.conf .

    2. vi openvpn.conf

      Exp. 加上 route 172.16.0.0/24 , route 172.16.1.0/24

      :
      push "route 172.16.0.0 255.255.255.0"
      push "route 172.16.1.0 255.255.255.0"
    3. vi docker-compose.yml

      啟用 openvpn: → volumes: → ./openvpn.conf:/etc/openvpn/setup/openvpn.conf

      services:
        openvpn:
        :
        :
          volumes:
            - ./easyrsa_master:/etc/openvpn/easyrsa
            - ./ccd_master:/etc/openvpn/ccd
            - ./openvpn.conf:/etc/openvpn/setup/openvpn.conf
        :
    4. 重新啟動 docker compose 讓設定生效

      docker compose up -d

    5. 讓所有 VPN Client 斷線重新連入
  • tech/ovpn-admin.1719245003.txt.gz
  • 上一次變更: 2024/06/25 00:03
  • jonathan