Sign inSign up

mauricioj/openvpn-ssh-proxy

By mauricioj

Updated about 1 year ago

Image
0

326

mauricioj/openvpn-ssh-proxy repository overview

openvpn-ssh-proxy

Container para executar um cliente OpenVPN isolado e expor um túnel SSH para acessar recursos privados atrás dessa VPN.

Repositório no github https://github.com/mauricioj/openvpn-ssh-proxy

Quick start

  1. Tenha um arquivo .ovpn pronto para o provedor da VPN.
  2. Execute o container:
docker run --rm -it \
 --device /dev/net/tun --cap-add NET_ADMIN \
 -v ./client-a.ovpn:/vpn/client-a.ovpn:ro \
 -e OVPN_FILE_PATH=/vpn/config.ovpn \
 -e SSH_TUNNEL_PORT=1180 \
 -e SSH_TUNNEL_USER=proxy \
 -e SSH_TUNNEL_PASS=proxy@123 \
 mauricioj/openvpn-ssh-proxy:latest

Observação: acesso a /dev/net/tun e capability NET_ADMIN são necessários em hosts Linux; em outras plataformas use um host Linux/VM ou WSL2 conforme sua arquitetura.

Docker Compose

No exemplo a baixo estamos criando dois containers, um para cada VPN e expondo eles com portas diferentes, dessa forma podemos conectar simultaneamente em recursos de rede diferentes apenas trocando a porta.

services:
 openvpn-ssh-proxy-client-a:
   image: mauricioj/openvpn-ssh-proxy:test
   container_name: openvpn-ssh-proxy-client-a
   restart: unless-stopped
   devices:
     - /dev/net/tun
   cap_add:
     - NET_ADMIN
   ports:
     - "1180:1180"
   volumes:
     - ./client-a.ovpn:/vpn/client-a.ovpn:ro
   environment:
     - OVPN_FILE_PATH=/vpn/client-a.ovpn
     - OVPN_CERT_PASSPHRASE=pass@123
     - SSH_TUNNEL_PORT=1180
     - SSH_TUNNEL_USER=proxy
     - SSH_TUNNEL_PASS=proxy@123

     
 openvpn-ssh-proxy-client-b:
   image: mauricioj/openvpn-ssh-proxy:test
   container_name: openvpn-ssh-proxy-client-b
   restart: unless-stopped
   devices:
     - /dev/net/tun
   cap_add:
     - NET_ADMIN
   ports:
     - "1181:1181"
   volumes:
     - ./client-b.ovpn:/vpn/client-b.ovpn:ro
   environment:
     - OVPN_FILE_PATH=/vpn/client-b.ovpn
     - OVPN_CERT_PASSPHRASE=pass@123
     - SSH_TUNNEL_PORT=1181
     - SSH_TUNNEL_USER=proxy
     - SSH_TUNNEL_PASS=proxy@123

Testando túneis (com curl / ifconfig.me)

Use os exemplos abaixo para validar que o tráfego passa pela VPN.

  1. SOCKS proxy (navegação / teste IP público):

    • Abra um proxy SOCKS local apontando para o servidor SSH do container:
    ssh -p 1180 proxy@localhost -N -D 1080
    
    • Verifique o IP público via SOCKS:
    curl --socks5-hostname localhost:1080 https://ifconfig.me
    

    Se o túnel estiver correto, o IP retornado será o IP de saída da VPN.

  2. Port forwarding local (acessar serviço privado dentro da VPN):

    ssh -p 1180 proxy@localhost -N -L 8080:app.internal:80
    curl http://localhost:8080
    
    

Variáveis de ambiente

  • OVPN_FILE_PATH — caminho para o .ovpn dentro do container (ex: /vpn/config.ovpn).
  • OVPN_CERT_PASSPHRASE — passphrase do certificado, se aplicável.
  • OVPN_AUTH_USER — usuario do servidor VPN, se aplicável.
  • OVPN_AUTH_PASS — senha do servidor VPN, se aplicável.
  • OVPN_OPTS — options a serem adicionados na execucao do comando openvpn
  • SSH_TUNNEL_PORT — porta que o SSH no container irá escutar.
  • SSH_TUNNEL_USER / SSH_TUNNEL_PASS — credenciais (autenticação por senha apenas).

Depuração

  • Logs do container:
docker logs -f <container-name-or-id>
  • Entrar no container para checar interface/rotas:
docker exec -it <container-name-or-id> sh
# dentro do container:
ip addr show tun0 || ifconfig tun0
ip route
tail -n 200 /var/log/openvpn.log || dmesg | tail

Segurança

  • Não comite .ovpn com credenciais em repositórios públicos.
  • Em produção, prefira Docker secrets ou um vault para senhas em vez de variáveis de ambiente.
  • Restrinja o acesso à porta SSH exposta via firewall/ACLs.

Suporte / Contribuição

Abra issues no repositório ou envie pull requests com melhorias e exemplos de uso.

Licença

Consulte o LICENSE no repositório.

Tag summary

Content type

Image

Digest

sha256:040a5adba

Size

7.7 MB

Last updated

about 1 year ago

docker pull mauricioj/openvpn-ssh-proxy