Instala tu propio servidor VPN Outline

En este artículo os vamos a enseñar cómo crear una VPN de forma fácil, para ello crearemos un servidor con la imagen de Docker y usaremos Outline creado por Jigsaw (Google). Outline no es bien bien una VPN, pero hace su función mediante proxy socks5. La ventaja de usar una VPN es que protegemos nuestra conexión y no puede ser vista por otros usuarios que estén conectados a la misma red que nosotros. También usaremos las buenas prácticas para usar Docker desde países bloqueados por el mismo.

Outline es una herramienta de código abierto que le permite configurar su propio servidor VPN de forma rápida y sencilla. Esto significa que ya no tiene que confiar en un servicio VPN de terceros y tiene un control total sobre los datos que van y vienen de su servidor VPN. Además, cuando instala Outline en su propio servidor, nadie más puede ver la configuración de su cliente. Solo usted tiene acceso al funcionamiento interno de cómo conectar un cliente de Outline a su servidor de Outline.

Mientras que en el pasado los beneficios que vienen con el control total sobre su servidor VPN requerían redes de computadoras avanzadas y habilidades de administración de servidores, Outline le promete una experiencia de instalación más conveniente. Outline se destaca entre las VPN de código abierto como una de las más fáciles de instalar y administrar para un uso continuo.

Para esta instalación usaremos los servicios de clouding.io la instalacion empezamos primeramente creando un servidor con Linux, en este caso usaremos ubuntu 20.04

Outline usa 2 puertos uno para la administración y otro para los accesos mediante llaves, entonces configuraremos el el cortafuego, recomendamos abrir todos los puertos en el firewall y una vez instalado lo limitan a los puertos que usan para el mismo.

Una vez creados las reglas del firewall, vas al VPS y desvincular el que tienes puesto y vinculas el mismo que acabas de crear.

Preparación del servidor

Una vez iniciado el Servidor accedemos al mismo y preparamos los requerimientos mínimos que en este caso será docker

sudo -- sh -c 'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y'

Instalamos Docker

apt-get install docker.io

Una vez instalado docker procedemos a configurar algunos mirror por si estas instalando desde un lugar donde docker no esta permitido libremente
nano /etc/docker/daemon.json

{ 
    "registry-mirrors": [ 
    "https://rw21enj1.mirror.aliyuncs.com",
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://1nj0zren.mirror.aliyuncs.com",
    "https://quay.io",
    "https://docker.mirrors.ustc.edu.cn",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com"
    ]
}

Si desea agregar un registro de mirror inseguro aquí les dejo el enlace de cómo hacerlo. Reiniciamos para que se vean los cambios.

systemctl daemon-reload 
systemctl restart docker

Este paso a continuación es para aquellos que están detrás de un proxy padre y es opcional.

Crear la carpeta docker.service.d

mkdir -p /etc/systemd/system/docker.service.d

Creamos el fichero http-proxy.conf

nano /etc/systemd/system/docker.service.d/http-proxy.conf

Dentro agregamos:
[Service]
Environment="HTTP_PROXY=http://user:password@proxyip:port/"
Environment="HTTPS_PROXY=http://user:password@proxyip:port/"
Environment="NO_PROXY= hostname.example.com,localhost,127.0.0.1"

Recargamos la config y reiniciamos el servicio:

systemctl daemon-reload
systemctl restart docker

Ahora comprobaremos que todo está bien.

Usaremos el comando:
docker info

Nos dará una salida similar a la siguiente:

Client:
 Context:    default
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.2
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 
 runc version: 
 init version: 
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.4.0-66-generic
 Operating System: Ubuntu 20.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 981.2MiB
 Name: outline.syscu.net
 ID: XAT3:I4L7:QJLM:5XKW:WAQ5:UGGD:LMHE:EMMF:GNC7:QSQI:ZWBL:UWK4
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://rw21enj1.mirror.aliyuncs.com/
  https://dockerhub.azk8s.cn/
  https://reg-mirror.qiniu.com/
  https://hub-mirror.c.163.com/
  https://docker.mirrors.ustc.edu.cn/
  https://1nj0zren.mirror.aliyuncs.com/
  https://quay.io/
  http://f1361db2.m.daocloud.io/
  https://registry.docker-cn.com/
 Live Restore Enabled: false

WARNING: No swap limit support
WARNING: No blkio weight support
WARNING: No blkio weight_device support

Aquí solo deben fijarse si les reconoce el proxy(si se lo pusieron) y los mirrors alternos(Registry Mirrors).

Configuramos docker para que inicie automáticamente

sudo systemctl enable docker

Comprobamos que docker este iniciado sin problema

sudo sudo systemctl status docker

Instalación del Servidor Outline

Si todo esta corriendo bien procedemos a instalar entonces el Outline con el siguiente comando:
Nota: Si desean personalizar los puertos y el host mirar al final del artículo.

sudo wget -qO- https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh | bash

De ahí tenemos que guardar los datos que nos dan, ya que son las llaves de acceso para el Outline Manager, es decir debe guardar la información siguiente:

CONGRATULATIONS! Your Outline server is up and running.

To manage your Outline server, please copy the following line (including curly
brackets) into Step 2 of the Outline Manager interface:

{"apiUrl":"https://185.254.204.115:63058/lUcKsF3obk36qPLVUTB3bQ","certSha256":"85C84BA2BF7F44AC52216480AAAEF00B31F89743261CA704B1580A44029B0AC5"}

If you have connection problems, it may be that your router or cloud provider
blocks inbound connections, even though your machine seems to allow them.

Make sure to open the following ports on your firewall, router or cloud provider:
- Management port 63058, for TCP
- Access key port 6972, for TCP and UDP

Como notaron en la imagen anterior ya tenemos las llaves de acceso para el manager de outline y los puertos que usará el mismo para cada cosa tanto manager como para los clientes.

Antes de seguir podemos cerrar ya en nuestro cortafuegos limitando a esos 2 puertos y desactivando las reglas que creamos permitiendo todos los puertos

Outline Manager

Ya una vez configurado el firewall en el cortafuego procedemos a descargar el Outline Manager:
Outline Manager para Windows

Outline Manager para Linux

Outline Manager para macOS

Una vez instalado procedemos a configurar la llave de acceso a la administración.
En la página de configuración, seleccione «Configurar esquema en cualquier lugar» y pegue la clave de administración del servidor, como mostramos a continuación:

Una vez que hayas configurado tu servidor, genera claves de acceso únicas directamente desde la aplicación Administrador para ordenadores. Esta aplicación te permite enviar invitaciones para conectarse a tu servidor a través de tu plataforma de comunicación preferida. Las claves de acceso sirven para conectar dispositivos a Administrador de Outline y protegerlos mediante tu servidor. Cada clave de acceso es única, y todas se pueden gestionar o eliminar directamente desde el servidor. Puedes fijar límites de datos para controlar cuánto ancho de banda puede usar cada clave.
Para conectar la pc actual con la que estamos administrando a través del outline clientes damos click en el icono que mostramos acá y copiamos la llave de acceso

Si una persona quiere conectarse a tu servidor, basta con que acepte la invitación que le hayas enviado. Una vez que se haya conectado, podrá conectarse o desconectarse fácilmente desde la aplicación.

Outline Client

Pueden descargar el cliente de outline:
Cliente para Android
Cliente para Windows
Cliente para Chrome
Cliente para Iphone
Cliente para macOS
Cliente para Linux

Cuando un cliente se conecta la app se pone en verde como ven

Probamos desde el sitio ifconfig.io que estemos saliendo por el ip del servidor

Estadisticas de los accesos, podemos verlo en el Outline Manager como les muestro aca

En el mismo podemos limitar llaves el consumo de datos que queremos que tengan

Actualizaciones a su servidor Outline VPN

Con Outline VPN, no tiene que hacer nada por su parte para mantener su servidor actualizado. Las últimas correcciones de errores y mejoras de seguridad se instalan automáticamente. Esto se logra mediante el contenedor de Docker denominado “Watchtower” en su servidor. Watchtower es una aplicación de código abierto que busca e instala actualizaciones en el contenedor Shadowbox.

Además de las actualizaciones del servidor de Outline, cuando configura su servidor usando el Administrador de Outline, se configurará un trabajo cron para actualizar automáticamente el sistema operativo del host y reiniciar cuando sea necesario.

Personalizar la Instalacion del Servidor Outline

sudo bash -c "$(wget -qO- https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh)"  --hostname=WGAPI --keys-port=443 --api-port=8080

Básicamente, api-port es para Outline Manager, donde simplemente puede agregar eliminar usuarios desde una aplicación simple conectada al servidor

El keys-port es el puerto para cada usuario o clave de acceso creada en el administrador de esquemas

El hostname es su nombre personalizado indicado en el esquema de usuario de VPN

Asegurar servidor con Cortafuegos

Después de la instalación, es posible que deba proteger Outline Server con UFW (cortafuegos sencillo):
– Cómo proteger Outline Server:

En primer lugar, instale UFW si no lo está.

sudo apt-get install ufw

después de instalar UFW, puede configurar el firewall sin habilitarlo.

sudo ufw allow /

sudo ufw allow 8080/tcp
sudo ufw allow 8080/udp
sudo ufw allow 443/tcp
sudo ufw allow ssh

Nota: estas reglas de cortafuegos es en el servidor como tal y usando los puertos que pusimos en la personalización, el cual puede cambiarlo a los que su servidor requiera sino lo personalizo.

Habilitación de UFW:

sudo ufw enable

Esto tendrá la siguiente salida: Firewall is active and enabled on system startup

Aún así, no se establece la limitación de velocidad del usuario, lo que significa que sus conexiones dependiendo de su servidor y la velocidad de Internet del usuario pueden alcanzar hasta 150 MB por clave de acceso.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 6

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Armando Felipe Fuentes Denis 82 artículos
Cloud Architect | DevOps | SecOps | SRE | Cloud | SysAdmins

7 comentarios

  1. Firefox 127.0 Firefox 127.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0

    necesito saber como reiniciar las estadisticas de trafico para las claves de acceso

  2. Google Chrome 101.0.4951.54 Google Chrome 101.0.4951.54 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36

    AAlguien le funciona el outline ???

  3. Firefox 99.0 Firefox 99.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0

    Buenas, este tutorial me sirve para montar la vpn sin tener docker?

  4. Firefox 98.0 Firefox 98.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0

    Hola, he estado tratando de leer documentación etc, pero no encuentro respuesta, en Outline se agregan servers de tipo l2tp, openvpn, etc? o el utiliza sus propios protocolos?

    Saludos Armando

  5. Opera 83.0.4254.27 Opera 83.0.4254.27 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36 OPR/83.0.4254.27

    hola q tal , en mi caso obtuve un error del tipo 403 al intentar instalar el outline, desactive el firewall y aun asi seguia dandome el mismo error, agradeceria cualkier tipo de ayuda
    les adjunto el error q obtengo:
    Last error: curl: (22) The requested URL returned error: 403
    curl: (22) The requested URL returned error: 403
    Failed to determine the server’s IP address. Try using –hostname .

    Sorry! Something went wrong. If you can’t figure this out, please copy and paste all this output into the Outline Manager screen, and send it to us, to see if w e can help you.
    Full log: /tmp/outline_logqSn

  6. Google Chrome 92.0.4515.107 Google Chrome 92.0.4515.107 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36

    la conexion por ste vpn, me funcionaba asta ace 2 meses, pero ya no, sera que debo actualizar el cliente


  7. Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
    Firefox 90.0 Firefox 90.0 Ubuntu x64 Ubuntu x64
    Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:90.0) Gecko/20100101 Firefox/90.0

    Me sirve, pero sin docker

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*