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
.ovpn pronto para o provedor da VPN.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.
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
Use os exemplos abaixo para validar que o tráfego passa pela VPN.
SOCKS proxy (navegação / teste IP público):
ssh -p 1180 proxy@localhost -N -D 1080
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.
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
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 openvpnSSH_TUNNEL_PORT — porta que o SSH no container irá escutar.SSH_TUNNEL_USER / SSH_TUNNEL_PASS — credenciais (autenticação por senha apenas).docker logs -f <container-name-or-id>
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
.ovpn com credenciais em repositórios públicos.Abra issues no repositório ou envie pull requests com melhorias e exemplos de uso.
Consulte o LICENSE no repositório.
Content type
Image
Digest
sha256:040a5adba…
Size
7.7 MB
Last updated
about 1 year ago
docker pull mauricioj/openvpn-ssh-proxy