目錄表

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

安裝設定

  1. Alpine 3.21 Kernel 啟用 ip_tables

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

  2. 加上 tun device

    mkdir -p /dev/net
    mknod /dev/net/tun c 10 200
    chmod 666 /dev/net/tun
    # 檢查模組是否已載入
    lsmod | grep tun
    # 如果沒有載入,則執行:
    modprobe tun
    echo "tun" >> /etc/modules

  3. 編輯 docker-compose.yml
    services:
      openvpn:
        container_name: openvpn
        restart: unless-stopped
        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
        devices:
          - /dev/net/tun 
        ports:
          - 443:1194 # for openvpn
        volumes:
          - ./easyrsa_master:/etc/openvpn/easyrsa
          - ./ccd_master:/etc/openvpn/ccd
          - ./Dockovpn:/tmp
          #- ./openvpn.conf:/etc/openvpn/setup/openvpn.conf
      ovpn-admin:
        container_name: ovpn-admin
        restart: unless-stopped
        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
      openvpn-monitor:
        container_name: openvpn-monitor
        restart: unless-stopped
        image: ruimarinho/openvpn-monitor
        environment:
          TZ: "Asia/Taipei"
          OPENVPNMONITOR_DEFAULT_DATETIMEFORMAT: "%%Y/%%m/%%d %%H:%%M:%%S"
          OPENVPNMONITOR_SITES_0_SHOWDISCONNECT: "False"
          OPENVPNMONITOR_SITES_0_PORT: "8989"
          OPENVPNMONITOR_SITES_0_NAME: "openvpn"
          OPENVPNMONITOR_SITES_0_HOST: "localhost"
          OPENVPNMONITOR_SITES_0_ALIAS: "openvpn"
          OPENVPNMONITOR_DEFAULT_SITE: "My OpenVPN Sever"
          OPENVPNMONITOR_DEFAULT_MAPS: "True"
          OPENVPNMONITOR_DEFAULT_LONGITUDE: "121.51"
          OPENVPNMONITOR_DEFAULT_LOGO: ""
          OPENVPNMONITOR_DEFAULT_LATITUDE: "24.98"
        network_mode: service:openvpn
      nginx:
        container_name: nginx
        restart: unless-stopped
        image: nginx:latest
        ports:
          - 8080:8080 # for nginx
        volumes:
          - ./.htpasswd:/etc/nginx/.htpasswd:ro
          - ./default.conf:/etc/nginx/conf.d/default.conf:ro
  4. 編輯 default.conf
    server {
      listen 8080;
      server_name 127.0.0.1;
    
      location /mon {
        rewrite /mon(.*) /$1 break;
        proxy_pass http://openvpn:80;
      }
    
      location / {
        auth_basic           "Pass";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass http://openvpn:8080;
      }
    }
  5. 產生管理者帳號密碼檔 .htpasswd Exp. 建立管理者 jonathan

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

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

    如果要驗證 htpasswd 設定的密碼是否正確, 可以用 htpasswd -vb .htpasswd 帳號 密碼 進行驗證 Exp.

    ovpn-admin-246:~# htpasswd -vb .htpasswd myadm MyPasswod***
    Password for user everstar correct.
  6. 啟動 ovpn-admin 服務

    mkdir -p Dockovpn
    chmod a+w Dockovpn
    docker compose up -d

安裝 openvpn-snmp-stats 強化監控

FAQ

1. 想修改 server.conf

2. 想修改 Openvpn 為 UDP 模式

參考網址