Перейти к содержимому

Docker

  • Linux kernel: >= 6.6
  1. Создайте директорию со следующей структурой:

    • Директорияedvpn
      • docker-compose.yml
      • .env
      • Директорияssl/
  2. Отредактируйте файл конфигурации .env. Подробное описание всех параметров доступно в разделе Конфигурация.

    # Email для уведомлений Let's Encrypt
    LETSENCRYPT_EMAIL=example@example.com
    VPN_CIDR='10.13.0.0/24'
    PROXY_CIDR='10.14.0.0/16'
    DNS_UPSTREAM='1.1.1.1:53'
    CERT_ENABLED=true
    #
    ADDR=0.0.0.0:443
    DOMAIN=vpn.example.com
    CERT_FILE=/etc/edvpn/ssl/live/vpn.example.com/fullchain.pem
    KEY_FILE=/etc/edvpn/ssl/live/vpn.example.com/privkey.pem
    #
    PRIVATE_ADDR=0.0.0.0:8443
    PRIVATE_DOMAIN=admin.example.com
    PRIVATE_CERT_FILE=/etc/edvpn/ssl/live/vpn.example.com/fullchain.pem
    PRIVATE_KEY_FILE=/etc/edvpn/ssl/live/vpn.example.com/privkey.pem
    echo "LOCAL_ADMIN='$(htpasswd -nbB "admin" "password")'" >> .env
  3. Отредактируйте файл docker-compose.yml:

    services:
    egvpn:
    image: exploitdog/edvpn:1.0.0
    container_name: egvpn
    network_mode: host
    cap_add:
    - NET_ADMIN
    - BPF
    devices:
    - /dev/net/tun:/dev/net/tun
    volumes:
    - db:/var/lib/edvpn
    - pki:/etc/edvpn/pki
    - ./ssl:/etc/edvpn/ssl
    env_file:
    - .env
    restart: unless-stopped
    depends_on:
    certbot:
    condition: service_completed_successfully
    certbot:
    image: certbot/certbot
    container_name: certbot
    hostname: certbot
    env_file:
    - .env
    volumes:
    - ./ssl:/etc/letsencrypt
    ports:
    - 80:80
    command: certonly --non-interactive --keep-until-expiring --standalone --preferred-challenges http --agree-tos --email ${LETSENCRYPT_EMAIL} -d ${DOMAIN} -d ${PRIVATE_DOMAIN}
    volumes:
    db:
    pki:
  4. Запустите приложение:

    docker compose up -d
  5. Включите пересылку IPv4-пакетов между интерфейсами:

    sysctl -w net.ipv4.ip_forward=1
  6. Если нужен выход в интернет, настройте NAT (маскарадинг):

    • VPN подсеть: 10.13.0.0/24 (из env: VPN_CIDR)
    • Интерфейс выхода: ens3
    iptables -t nat -A POSTROUTING -s 10.13.0.0/24 -o ens3 -j MASQUERADE