Skip to content

Instantly share code, notes, and snippets.

@ludufre
Created April 17, 2024 19:33
Show Gist options
  • Save ludufre/96393533ddfba4442c46276a683aab80 to your computer and use it in GitHub Desktop.
Save ludufre/96393533ddfba4442c46276a683aab80 to your computer and use it in GitHub Desktop.
Como configurar OpenVPN Server com ou sem OTP para executar em um Docker Container

OpenVPN Server com ou sem OTP no Docker

Crie um arquivo chamado docker-compose.yml com o seguinte conteúdo:

services:
  openvpn:
    cap_add:
     - NET_ADMIN
    image: kylemanna/openvpn
    container_name: openvpn
    environment:
      - PUID=0
      - PGID=0
      - TZ=America/Sao_Paulo 
    ports:
      - "1194:1194/udp"
    restart: always
    volumes:
      - ./openvpn:/etc/openvpn

Na mesma pasta desse arquivo execute os comandos abaixo, trocando os parâmetros:

minha.vpn.com - hostname utilizado na conexão da VPN

-N -d -D - parâmetro para não enviar todo tráfego para a VPN (se deseja enviar todo tráfego, remova esses parâmetros)

-p 'route 172.18.0.0 255.255.0.0' - rota para a rede docker (necesário para acessar outros containers no mesmo host). Também pode adicionar outras rotas repetindo esse argumento.

-2 - parâmetro para utilizar OTP (One Time Password) na autenticação remova esse parâmetro se não quer utilizar OTP

docker compose run --rm openvpn ovpn_genconfig -N -d -D -u udp://minha.vpn.com -2 -C AES-256-GCM -p 'route 172.18.0.0 255.255.0.0'
docker compose run --rm openvpn ovpn_initpki

Agora inicie o container:

docker compose up -d

Para criar um usuário execute os comandos abaixo.

usuario-vpn nome usuário da VPN (também é o Username utilizado no OTP)

Se não deseja utilizar senha de certificado, adicione o argumento nopass no comando easyrsa build-client-full

Se não deseja utilizar OTP, não execute a linha com o comando ovpn_otp_user

export CLIENTNAME="usuario-vpn"
docker compose run --rm openvpn easyrsa build-client-full $CLIENTNAME
docker compose run --rm openvpn ovpn_otp_user $CLIENTNAME
docker compose run --rm openvpn ovpn_getclient $CLIENTNAME > $CLIENTNAME.ovpn
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment