Giter VIP home page Giter VIP logo

docker-vpn's Introduction

Objetivo

Necesitamos pasar por una VPN para acceder a algunos servicios, pero para el resto de nuestras conexiones queremos evitar dicha VPN.

Una posible solución seria usar IPTABLES con discriminación por usuario pero puede resultar demasiado complejo.

Por ello aquí se presenta una alternativa que consiste en crear una imagen docker con un servidor SSH levantado y con la VPN configurada y activada de manera que podamos hacer conexiones a través de la imagen solo cuando nos interese ir a través de la VPN.

Piezas

  • config/default.conf debe contener la configuración de nuestra VPNC
  • config/authorized_keys debe incluir la clave pública con la que nos queremos poder conectar a la máquina docker
  • config/init.sh es el script que arrancara el servidor SSH y conectara la VPNC al iniciar la imagen docker
  • Dockerfile es la definición de nuestra imagen docker
  • install.sh es un pequeño script que crea una imagen y configura un servicio systemd para manejarla

Pasos

Clave SSH

Para crear la clave ssh podemos hacer:

$ ssh-keygen -t rsa -f ~/.ssh/docker-vpn -C "docker-vpn"
$ cp ~/.ssh/docker-vpn.pub config/authorized_keys

Instalar imagen y servicio

Para crear la imagen y arrancarla:

$ sudo ./install.sh
$ sudo systemctl daemon-reload
$ sudo systemctl start dvpn.service

Ejemplo de uso (~/.ssh/config)

Como ejemplo, podemos configurar muestro ~/.ssh/config de esta manera:

Host docker-vpn
    HostName localhost
    User vpn
    Port 52032
    IdentityFile ~/.ssh/docker-vpn

Host in
    HostName 10.2.42.162
    IdentityFile ~/.ssh/in
    User myuser
    ProxyJump docker-vpn

Host out
    HostName 10.2.42.162
    IdentityFile ~/.ssh/out
    User myuser

y cuando queramos entrar a la máquina 10.2.42.162 que es solo accesible a través de la VPN nos bastara con hacer ssh in, mientras que si queremos entrar en la máquina 10.2.42.162 que esta fuera de la VPN podremos hacer ssh out. Así ambas máquinas serán accesibles a la vez.

Nota: Si se quiere usar un puerto distinto a 52032 hay que editar ./install.sh y ~/.ssh/config

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.