Automatización de despliegue de proxy reverso mas red privada virtual y servidor DNS. Esta combinación permite alojar servicios localmente, pasando a través de cualquier instalación de red, sin necesidad de NAT, port-forwarding, etc.
Go to file
2024-11-26 14:24:20 -03:00
group_vars feat: chasqui y fauno 2024-10-15 10:30:16 -03:00
roles fix: aumentar el límite de archivos de nodo 2024-11-08 13:09:11 -03:00
tasks feat: chasqui y fauno 2024-10-15 10:30:16 -03:00
.gitignore repositorio inicial de proxy reverso, basado en Latina.Red 2024-08-22 14:15:39 -04:00
.gitmodules rap como submodulo en git 2024-09-06 12:27:48 -04:00
abyayala.yml terminales VPN noviembre 2024-11-26 14:24:20 -03:00
ansible.cfg feat: acelerar ssh 2024-09-10 10:50:21 -03:00
deploy.yml Merge branch 'master' into knsupdate 2024-09-11 17:36:17 -03:00
hosts.local deploy a localhost para desarrollo 2024-09-02 13:11:18 -04:00
hosts.production la verdad acerca del vps: se llama hetzner 2024-09-11 15:58:32 -03:00
README.md doc: cómo dar de alta waykis 2024-10-15 10:32:41 -03:00

QUE ES ESTO?

Es un programa para para mantener una infraestructura como código. Es como la receta de todo lo que hay que hacer para crear nodos pero ejecutable.

La idea es reducir todo a un minimo de comandos de consola para conectarse al vpn y al proxy.

Reducir todo a un solo comando. -- one ring to rule'm all... y un solo archivo de configuración que es abyayala.yml

Ese comando se llama Ansible y ejecuta un playbook.

ansible-playbook 

Recetas, playbooks, script. Son todas infusiones que hacen bailar tods lxs enanites que mantienen los servicios andando. Y especificando un par de parámetros, que se detallan más abajo, se ejecutan todos los demás comandos necesarios para crear un nodo en la red llamada Abyaya.la

En realidad, a medida que se adentren en el juego, verán que hay un par de recetas más para tareas específicas en tasks/. Este es un juego de roles donde cada rol es uno de los softwares que interoperan para mantener el sistema.

Hay un archivo en especial que define est despliegue de interfaces virtuales disponibles por URLs en que consiste ABYAYA.LA

Abyayala.yml

Es un archivo YAML (Yet Another Markup Lang., como una especie de XML pero bien legible) en donde se define declarativamente la infraestructura del Proxy Nginx conectado con un VPN (Red Autónoma Pirata)

La RAP tiene capacidad de DHCP en una red.comun para circumnavegar redes privativas que puedan tener NAT, no permitir Port Forwarding, aplicar Firewalls y todas esas chingaderas nasty.

EL proxy tiene capacidad de SSL/TLS con Let's Encrypt de la E.F.F. El certbot tiene capacidad wildcard *.subm.abyaya.la, validando por registros DNS.

Cómo probarlo

En consecuencia, el resultado de esto debiera ser (dis)administrar una red de servidoras en una VPN comun,

El resultado del deploy de la primera parte (RAP), la máquina nodo debe conectarse a la red comun en IPv4 y en el rango 10.13.12.1/24 y poder pingear al server, que es 10.13.12.1

El server puede pingear a cada nodo por su nombre de host en la red comun. por ej.

root@proxy-reverso-escuela-comun:~# ping ka.comun
PING ka.comun (10.13.12.129) 56(84) bytes of data.
64 bytes from ka.comun (10.13.12.129): icmp_seq=1 ttl=64 time=169 ms

Por otra parte, como resultado del despliegue de la segunda parte (PROXY), es que el servidor debe publicar el subdominio DNS node. abyaya.la

En este, cada organizacion puede publicar sus servicios en internet. Estos son accesibles a través de SSL/DNS en sub-sub- dominios.

Por ej. https://sitio.node.abyaya.la y convivir como vástagxs con una nube en https://nube.node.abyaya.la

Los servidores DNS los provee Sutty, infraestructura autonoma de Argentina quienes ademas cuentan con redundancia y mas.

P.S:

Lo que está resaltado así es código fuente

¿Sería dificil, mas no imposible, la realización de trabajos semejantes en la selva Amazónica?)

REQUISITOS DE INSTALACIÓN

Deben tener Ansible . Si tienen Python (sí, tienen), se puede instalar por pip

$ pip install ansible

También deben tener sus llaves públicas de SSH añadidas tanto al nodo como al servidor de destino.

Si despliegan a localhost es posible que necesiten añadir su llave de SSH a su propia máquina, para auto-conectarse por SSH (Sí, se puede).

DISPOSITIVOS DE DESARROLLO

En realidad recomendaríamos mantener en mente que son dos dispositivos, la torre de control (su laptop), que da órdenes a la otra node que está configurando.

En desarrollo se puede emular con máquinas virtuales a las cuales configura su laptop. O se puede invocar directamente sobre un juguete para animarlo de vida.

CÓMO SE USA

ALTA DE WAYKIS

  • Copiar la(s) llave(s) pública(s) de cada wayki en tasks/files/ssh/WAYKI.pub.
  • Agregarle en group_vars/all/ssh_users.yml (copiando la estructura de otre wayki)
  • Correr ansible-playbook tasks/users.yml -e "host=hetzner"

DEPLOY LOCAL

En este ejemplo, intentamos convertir nuestro localhost en un nodo

ansible-playbook --become tasks/rap.yml -e "host=localhost nodo=chem" -i hosts.local

INSTALACION "EN 2 PASOS" ;)

1 - RAP

Esta se hace en dos partes, pues hay que configurarlo primero en el nodo de destino y después en el servidor del proxy.

1.1 - RAP en el nodo

Para desplegar la RAP en nuestro nodo destino, utilizamos el script tasks/rap.yml especificando sus paráemtros en -e "..."

ansible-playbook --become tasks/rap.yml -e "nodo=chem host=rakiduam"

En donde:

  • host: es el nodo a configurar, según su definición en el inventario de ansible
  • nodo: es el nombre que le daremos, el cual debe coincidir con el que desplegamos en el proxy más adelante

1.2 - RAP en el proxy

El proxy también se define en el archivo abyayala.yml en el server_name: vpn En la lista de nodos mantenemos los nodos autorizados para conectarse a la RAP

  - service_name: vpn
    roles:
      - rap
    nodos:
      - marmite
      - ka

DEPLOY.YML

De ahora en adelante, trabajaremos en el proxy. El único comando que vamos a necesitar es **deploy.yml"" y le especificaremos parámetros. Vamos viendo.

Cada vez que ejecutamos

ansible-playbook deploy.yml -e "alt=abyayala host=hetzner"

Desplegamos los servicios definidos en el archivo abyayala.yml a nuestro servidor que esta en hetzner.

Los parámetros obligatorios son:

  • alt: nombre de nuestro servidor autonomo, en este caso siempre es 'abyayala'
  • host: nombre del servidor de destino en el archivo de inventario hosts.production

Los parámetros opcionales pueden ser:

  • service: limita al despliegie a un servicio específico, en lugar de actualizar todos

1.3 - DEPLOY DE LA RAP EN EL PROXY

Para ser mas especificos, aqui utilizaremos el parametro service para ejecutar solamente la vpn.

ansible-playbook deploy.yml -e "alt=abyayala host=hetzner service=vpn" --skip-tags=installation

En este ejemplo, estamos salteando la parte de instalación para mayor velocidad.

2 - DEPLOY DEL DEL PROXY CON HTTPS Y ACTUALIZACION DEL DNS

Cada nodo debe tener una entrada en el archivo abyayala.yml de esta forma:

  - service_name: chem
    domains:
      - 2012K.abyaya.la
    nodo: ka.comun
    ssl: yes

Donde

  • service_name: es un nombre arbitrario
  • domains: la unica entrada de domains es el subdominio principal
  • nodo: es el hostname del nodo en la RAP
  • ssl: habilita la conexión SSL/TLS en ese dominio y sus subdominios

Luego, volvemos a ejecutar comando deploy para actualizar el estado del host.

ansible-playbook deploy.yml -e "alt=abyayala host=hetzner"

O también podemos actualizar la configuración del proxy de solamente un nodo especificandolo con service.

ansible-playbook deploy.yml -e "alt=abyayala host=hetzner service=chem"

Esto ademas actualiza a los servidores DNS de Sutty acerca de la creacion del nuevo nodo.