Como participante voluntario en [LaOtraRed en La Paz](https://lapaz.laotrared.net) (LOR), fue el turno de mi nodo de actualizarse y en este post voy a mostrar el nuevo nodo y cómo ha cambiado respecto a [la primera versión del Nodo Chersky](/posts/nodo-chersky-LaOtraRed).

Esta primera parte abarca una descripción y detalle del diseño de infraestructura de red y configuración. La [segunda parte](/posts/renovando-nodo-Chersky-parte-2) describirá mejor el montado de servicios incluidos DNS, servidor web, *streaming de audio* y otros (aún no está lista).

### Índice

* [Razones](#razones)
* [Definiendo la infraestructura de red](#definiendo-la-infraestructura-de-red)
* [Configuraciones](#configuraciones)
* [Interfaces de Red](#interfaces-de-red)
* [Conexiones inalámbricas](#conexiones-inalambricas)
* [Protocolo de enrutamiento (conexión a LOR)](#protocolo-de-enrutamiento-conexion-a-lor)
* [firewall](#firewall)
* [DNS](#dns)
* [Pruebas de conexión](#pruebas-de-conexion)
* [Conclusión preliminar](#conclusion-preliminar)

## Razones ##

La red libre ha estado evolucionando, por ejemplo se ha cambiado el protocolo de enrutamiento de babel a bmx7 y se han definido reglas de conexión, objetivos y recomendaciones, que se pueden revisar en la [primera versión estable (1VE)](https://wiki.lapaz.laotrared.net/red-estable/1ve).

La anterior estructura del nodo Chersky no contaba con conexión a internet y en este nuevo diseño se aprovecha esta conexión para también conectarse a LaOtraRed a través de una vpn privada ya que mi nodo aún no tiene contacto físico directo con otros nodos. Principalmente en esta actualización se utiliza IPv6 para el enrutamiento hacia otros nodos.

## Definiendo la infraestructura de red ##

![Nodo Chersky 2018 infraestructura](/static/imgs/posts/thumb_nodo-chersky-2018-infraestructura.jpeg) --> [ver tamaño original](/static/imgs/posts/nodo-chersky-2018-infraestructura.jpeg)

Son básicamente cinco componentes principales:

1. Enrutador maestro (TL-WDR3600)
2. Enrutador/módem a internet
3. Servidor público
4. Equipos "clientes" que consumen servicios desde la red interna.
5. Conexión a la red troncal de LaOtraRed vía VPN.

Este nodo tiene asignado el bloque IPv4 `10.64.3.64/27` (un total de hasta 30 direcciones IP) y el bloque IPv6 `fc01:1934:1:0200::/56` (millones de ipv6). ([ver registro de direcciones](https://wiki.lapaz.laotrared.net/redlibre/registro_ips))

A diferencia de la primera implementación no hay subredes separadas para equipos visibles al resto de LOR y equipos protegidos dentro de la red privada. La nueva estrategia para aislar intentos de conexión **desde nodos externos** hacia equipos dentro mi **red privada**, es bloquear todo el tráfico entrante.

Sin embargo, como quiero poner al menos un servidor disponible para que el resto de LOR, lo que tengo que hacer es agregar reglas en el firewall del enrutador para **permitir acceso hacia este equipo**. Este comportamiento se puede ilustrar así:

![Nodo Chersky 2018 intentos conexión](/static/imgs/posts/nodo-chersky-2018-intentos_conexion.jpeg)

Replicando este comportamiento en el resto de LOR, se consigue una red distribuida con equipos consumidores y equipos servidores.

## Configuraciones ##

Todas las configuraciones se hacen en el enrutador principal del nodo, en mi caso el TL-WDR3600. Como es típico, primero le instalé la última versión de openwrt ([ver cómo](https://wiki.lapaz.laotrared.net/guias/instalar_openwrt)). Luego pasé a configurarlo manualmente en el siguiente orden; Interfaces de red, conexiones inalámbricas, protocolo de enrutamiento / conexión a LOR, *firewall*, *dns* y conexión *VPN*.

Todos los pasos salvo la conexión *VPN* serán similares para cualquier nodo en LaOtraRed y pronto automatizaremos este proceso para unirse a la red libre en unos cuantos clicks ;-)

### Interfaces de Red ###

He seguido la guía descrita en la wiki de LOR en [https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_de_red](https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_de_red) haciendo unas cuantas modificaciones por mi conveniencia.

El archivo ``/etc/config/network`` ha quedado más o menos así:

	:::bash
    # Interfaz principal
    config interface 'lan'
          option type 'bridge'
          option proto 'static'
          option ifname 'eth0.1'
          option ipaddr '10.64.3.65' # direccion ipv4 del router
          option netmask '255.255.255.224' # mascara ipv4
          option ip6addr 'fc01:1934:1:200::1/64' # direccion ipv6 del router con mascara
    
    # Interfaz de conexión a internet (propia de cada nodo)
    config interface 'wan'
    # ...

    # Se define la interfaz bmx7 para la conexión con el resto de los nodos
    # dentro LaOtraRed.
    config interface 'bmx7'
            option type 'bridge'
            option proto 'static'

La configuración se simplifica a dos interfaces `lan` y `bmx7`, la primera para conectar los equipos internos de mi red y la segunda para conectarme al resto de LaOtraRed.

### Conexiones inalámbricas ###

Este paso es opcional pero como utilizo WiFi en mi nodo, sólo me ha hecho falta definir una conexión wifi común conectada a la red ``lan`` en modo maestro o también llamado modo AP.

Esta configuración es más sencilla hacerla desde la interfaz gráfica de openwrt (LUCI).

### Protocolo de enrutamiento (conexión a LOR) ###

Desde 2018 utilizamos el protocolo bmx7 para conectarse a la [Red Troncal](https://wiki.lapaz.laotrared.net/red-estable/1ve#red_troncal_core). Si quieres más información de cómo funciona este protocolo y una configuración básica puedes revisar un [post anterior sobre unas pruebas que hice con bmx7](/posts/probando-bmx7).

Es necesario primero instalar bmx7 y las extensiones que utilizamos en LOR, se logra ejecutando en el enrutador:

    opkg update
    opkg install bmx7 bmx7-uci-config bmx7-iwinfo bmx7-json bmx7-table bmx7-topology bmx7-tun 

Luego editando el archivo `/etc/config/bmx7` siguiendo estrictamente la guía descrita en la wiki [https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_de_la_sesion_de_routing](https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_de_la_sesion_de_routing), el archivo queda mas o menos así:

    :::bash
    config 'bmx7' 'general'
    # anuncios uHNAs
    config 'unicastHna' 'miPrefijoGlobal'
    	option 'unicastHna' 'fc01:1934:1:0200::/56'
    # anuncios de tuneles
    config 'tunDev' defaultbmx7
    	option 'tunDev' 'defaultbmx7'
    	option 'tun4Address' '10.64.3.65/27'
    	option 'tun6Address' 'fc01:1934:1:0200::1/128'
    # otras configs mostradas en la wiki
    # ...

    # plugins necesarios
    config 'plugin'
            option 'plugin' 'bmx7_tun.so'
    config plugin
    	option plugin 'bmx7_config.so'
    config plugin
    	option plugin 'bmx7_json.so'
    config plugin
    	option plugin 'bmx7_topology.so'

### firewall ###

De igual manera he seguido al pie de la letra la guía de la wiki [https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_del_firewall](https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_del_firewall), salvo unas cuantas modificaciones en el archivo `/etc/config/firewall`.

    :::bash
    config zone
        option input 'ACCEPT'
        option forward 'REJECT'
        option output 'ACCEPT'
        option name 'laotrared'
        option network 'bmx7'
        list device 'X7+'
    # otras configuraciones descritas en la wiki
    # ...
	
    # permitir el acceso hacia el servidor público via ipv4
    config rule
    	option target 'ACCEPT'
    	option src 'laotrared'
    	option name 'ServerPiPublico'
    	option dest_ip '10.64.3.66' # direccion que he asignado al servidor
    	option proto 'all'
    	option dest 'lan'
    # permitir acceso hacia mi servidor via ipv6
    config rule
    	option enabled '1'
    	option target 'ACCEPT'
    	option src 'laotrared'
    	option name 'ServerPiPublicoIpv6'
    	option family 'ipv6'
    	option proto 'all'
    	option dest 'lan'
    	option dest_ip 'fc01:1934:1:0200::2' # ipv6 del servidor

Vale la pena recalcar que en las configuraciones mostradas en la wiki el tráfico recibido en la zona `laotrared`, se está refiriendo al tráfico recibido desde otros nodos de LaOtraRed y el tráfico que sale a través de la zona `laotrared` va dirigido hacia otros nodos de LaOtraRed.

### DNS ###

Esta configuración permite que yo pueda acceder a servicios dentro de LaOtraRed de manera más "humana" por ejemplo escribiendo en un navegador `chersky.lor` redirigirá a `10.64.3.66` que es el servidor público del nodo chersky, de igual manera para cualquier dominio `.lor` utilizaré el servidor dns que tenemos en LaOtraRed.

Otra vez siguiendo la wiki :) [https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#dns](https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#dns) el archivo `/etc/config/dhcp`.

El servicio DNS en `10.64.64.53` redirije peticiones hechas a `chersky.lor` hacia el servidor que he abierto como público, sin embargo para no depender demasiado del servidor `10.64.64.53` (servidor DNS de LOR), se podría montar un servidor DNS autoritativo en el nodo Chersky que ayude a resolver cualquier dominio .chersky.lor, por ejemplo `radio.chersky.lor` `botadero.chersky.lor` `chat.chersky.lor` `*.chersky.laotra.red`, etc. Pero ese trabajo irá en la segunda parte de esta reseña acompañado de algunos servicios y configuración del servidor de mi nodo para el resto de la red.

## Pruebas de conexión

Lo más importante es ‒asegurar la conexión hacia la red distribuida‒ y de esto se encarga el protocolo bmx7. Para esta tarea podemos usar dos herramientas, la primera es usando `bmx7` que está instalado en el enrutador y hacer consultas directas al demonio bmx7.

Ingresamos al enrutador por `ssh` y como usuario `root` ejecutamos `bmx7 -c show=originators`, que muestra los otros nodos en la red que se están conectando con nosotros, ahí deberíamos ver los nombres de elos otros nodos junto con una dirección ipv6 que el protocolo bmx7 usa para identificarlos de manera única, la interfaz a través la cual nos conectamos y otros detalles.

La segunda forma es desde la interfaz gráfica LUCI, ingresando a `Network -> BMX7 -> Nodes` que muestra en mi caso:
	
![Nodo Chersky 2018 rutas bmx7](/static/imgs/posts/nodes_test_chersky1.jpg)

Muestra que existe conexión hacia muchos otros nodos de la red :D

Para comprobar que existe conexión hacia y desde los otros nodos de LaOtraRed se pueden utilizar herramientas como `traceroute ping ping6` dirigidos hacia los demás nodos de la red por ejemplo al servidor DNS `10.64.64.53`.

Finalmente para deberíamos pedirle a otro nodo que compruebe la conexión hacia nuestro nodo y en mi caso al servidor que he conectado. Por ejemplo que otro nodo pruebe `ping 10.64.3.66` que devuelve:

    PING 10.64.3.66 (10.64.3.66) 56(84) bytes of data.
    64 bytes from 10.64.3.66: icmp_seq=1 ttl=61 time=27.6 ms
    64 bytes from 10.64.3.66: icmp_seq=2 ttl=61 time=28.3 ms
    64 bytes from 10.64.3.66: icmp_seq=3 ttl=61 time=27.5 ms

De igual forma ping6 hacia `fc01:1934:1:200::2` que es la dirección IPv6 del servidor del nodo.

Un resultado más detallado lo podemos ver pidiendole a un nodo que ejecute `traceroute6 fc01:1934:1:200::2` que debería devolver algo así:

![Nodo Chersky 2018 rutas bmx7](/static/imgs/posts/test_nodes_chersky2.jpg)

## Conclusión preliminar

Con los cambios hechos, el nodo Chersky aprovecha mejor el principio de comunicación distriuida, usa IPv6 e IPv4 según la necesidad de conexión y la red es más flexible, entendible, robusta y segura. La mejor parte es que está conectado a LaOtraRed y **colabora** con su crecimiento.

----
En la [segunda parte](/posts/renovando-nodo-Chersky-parte-2) veremos las configuraciones de servicios que brinda el nodo Chersky, un poco sobre la conexión por VPN y algunos detalles adicionales.

Espero tenerla lista lo antes posible, hasta entonces me despido agradeciendo por leer el post :-)
