Construcción de una red Meshwork

La configuración de Meshwork se reduce a que cada nodo conozca su propio nombre y dominio y tenga al menos un par accesible. A partir de ahí, el dominio construye por sí mismo el resto de los enlaces. Todas las acciones se realizan en el panel de administración web; cambiar la configuración de Meshwork requiere el rol de administrador. Los campos exactos y su ubicación se describen en la sección Interfaz web.

Requisitos y accesibilidad

  • Accesibilidad de red. Un nodo debe poder establecer una conexión TCP con el servidor web administrativo de un par. El puerto se toma de la dirección del par («host:puerto») o del puerto público que el par anuncia sobre sí mismo (Identidad del nodo) — es siempre el puerto en el que está configurado su servidor web y, si el par tiene HTTPS habilitado, su puerto TLS. Los valores para una instalación nueva se indican en Configuración inicial; el puerto necesario de un par debe estar abierto desde los demás nodos.

  • HTTPS para el autodescubrimiento a través de internet. Si los nodos del dominio descubiertos automáticamente se comunican por direcciones públicas (de internet), necesitan establecer entre ellos una conexión segura (HTTPS) para confirmar de forma segura la autenticidad mutua a través de la red abierta. Por ello, habilite HTTPS al menos en los nodos a través de los cuales se realiza el descubrimiento. La activación de HTTPS surte efecto tras un reinicio del servidor. Si los nodos solo son accesibles por direcciones públicas y ninguno usa HTTPS, los enlaces directos descubiertos automáticamente no se autentican: el nodo sigue siendo visible (mediante retransmisión desde un par), pero su enlace directo se marca con un motivo (véase Mapa de red y catálogo de recursos).

  • Red local — HTTPS no requerido. Si los nodos del dominio se comunican por direcciones privadas de una única red de confianza (10.x.x.x, 172.16–31.x.x, 192.168.x.x, así como 127.x.x.x y 169.254.x.x), no se necesita una conexión segura para el autodescubrimiento: los nodos confirman la autenticidad también por HTTP simple. Un nodo se reconoce como local por su dirección IP, así que en una red local especifique los pares precisamente por direcciones IP y no por nombres de dominio. HTTPS puede habilitarse igualmente: se usará si está disponible.

  • Un enlace explícito funciona también por HTTP: el requisito de HTTPS no se le aplica en ningún caso.

  • El nombre y el secreto son obligatorios. Un nodo participa en la red solo si tiene definidos un nombre y un secreto de firma. Sin nombre o sin secreto, un nodo no participa en Meshwork.

  • Restricciones de los nombres. El nombre de un nodo tiene de 2 a 16 caracteres, el nombre de un dominio no supera los 16 caracteres; se permiten letras latinas, dígitos y los caracteres _, -, .. Los espacios y otros caracteres no se admiten (por ejemplo, el dominio «Alex Home» no puede definirse: use Alex_Home).

Identidad del nodo

En la configuración del servidor se define cómo se presenta el nodo en la red:

  • Nombre del nodo — un nombre corto y único por el que los demás reconocen el nodo. Un nombre vacío significa que el nodo no participa en la red.

  • Nota — una etiqueta arbitraria del nodo (por ejemplo, «Moscú, rack 3»), que se muestra en el panel de administración por comodidad y no afecta al funcionamiento de la red.

  • Dominio — los nodos con el mismo dominio se encuentran automáticamente, comparten un catálogo de recursos común y replican las alertas. Un valor vacío desactiva el autodescubrimiento (el nodo solo puede funcionar mediante la lista explícita de pares).

  • Puertos públicos (HTTP y HTTPS) — los puertos que el nodo comunica a los pares para la accesibilidad inversa bajo traducción de direcciones (NAT). Si no se definen, el nodo comunica sus propios puertos del servidor web.

  • Dominios adicionales (modo super-node) — el nodo participa en el autodescubrimiento de cada dominio listado en igualdad de condiciones con el principal. Los recursos permanecen aislados por dominio: el nodo no los mezcla.

Pares y secretos

Aquí se define con qué pares el nodo mantiene un enlace directo y cómo las partes se verifican entre sí. Las solicitudes entre nodos se firman con un secreto compartido, por lo que sin secretos coincidentes no se establece ningún enlace. La longitud de cada secreto es de 16 a 128 caracteres.

La lista de pares está formada por entradas del tipo «dirección — nombre — secreto»:

  • Dirección de un par — el «host:puerto» de su panel de administración. Una entrada puede no tener dirección: tal par nunca es llamado por este nodo (solo se conecta él mismo) y se identifica por nombre y secreto — esto se usa para un nodo tras NAT que solo puede iniciar una conexión.

  • Nombre de un par debe coincidir exactamente con el nombre definido en el propio par.

  • Secreto compartido del enlace con este par debe ser el mismo en ambos extremos.

Además de la lista de pares, un nodo tiene su propio secreto de firma: con él el nodo firma sus solicitudes salientes. Un par verifica la firma con el secreto que guarda para ese nodo, por lo que el propio secreto del nodo debe coincidir con el secreto registrado sobre él en cada par.

Nota

Regla práctica: para un sitio sencillo, defina un único secreto compartido y úselo tanto como propio secreto de firma en cada nodo como como secreto en cada entrada de par — así cualquier par de nodos se autentica de la misma manera. Para una separación más estricta, puede mantener un secreto distinto por enlace.

Inicio rápido

Opción A. Dos nodos directamente (enlace explícito)

El Meshwork más simple son dos servidores conectados manualmente.

  1. En cada nodo, defina un nombre corto único (por ejemplo, node1 y node2).

  2. En cada nodo, añada una entrada de par: la dirección de su panel de administración, su nombre y el secreto compartido.

  3. En cada nodo, defina el propio secreto de firma. Lo más sencillo es mantener un único secreto compartido para ambos nodos.

  4. Abra el mapa de red en el panel de administración. En unos segundos, ambos nodos se verán mutuamente en estado «online».

Para esto no es necesario definir un dominio, pero sin un dominio común solo obtendrá la visibilidad mutua de los nodos. El catálogo de recursos común y la replicación de alertas funcionan solo entre nodos con el mismo dominio — si los necesita, defina un dominio común para los nodos (opción B).

Opción B. Un dominio con autodescubrimiento

Cuando hay más de dos nodos, es más cómodo asignarles un dominio común que enumerar cada enlace manualmente.

  1. En cada nodo, defina un nombre único y el dominio común del sitio.

  2. Si los nodos del dominio se comunican a través de internet (por direcciones públicas), habilite HTTPS en al menos uno o dos nodos del dominio y reinícielos (véase Requisitos y accesibilidad). En una red local este paso puede omitirse.

  3. Enlace los nodos mediante un «punto de entrada»: en cada nodo, indique al menos un par ya operativo (dirección, nombre, secreto compartido), como en la opción A. El nodo encontrará por sí mismo el resto de los nodos del dominio.

  4. Abra el mapa de red. En unos segundos aparecerán en él todos los nodos del dominio: los indicados explícitamente como permanentes, los encontrados automáticamente como autodescubiertos.

Nodos tras NAT

Un nodo en una red privada, inalcanzable directamente desde el exterior, puede participar plenamente en la red como iniciador. Él mismo establece una conexión con un par accesible, y por esta única conexión los datos circulan en ambos sentidos — el nodo se anuncia y recibe información sobre los demás. Para tal nodo basta con indicar al menos un par accesible.

La información sobre un nodo NAT se propaga automáticamente por el dominio: un par que está online con él retransmite su estado a los demás. En los pares lejanos, tal nodo se mostrará como recibido mediante retransmisión, pero en estado «online».

Para que un nodo tras NAT sea accesible también para conexiones entrantes (por ejemplo, para servir como punto de entrada del dominio), configure la publicación del puerto público (véase Identidad del nodo) y reenvíe este puerto en el router/cortafuegos hacia el servidor web administrativo del nodo. Del lado de los pares, tal nodo se mantiene con una entrada «nombre + secreto sin dirección»: el par no intentará en vano llamar a la dirección privada, sino que identificará el nodo por nombre y secreto cuando este se conecte por sí mismo.

Problemas comunes

  • Los nodos no se ven entre sí. Compruebe: ambos tienen definido un nombre de nodo; cada uno tiene un secreto de firma y coincide con el registrado sobre él en el par; la dirección del par es correcta y su puerto de administración está abierto desde el otro nodo.

  • Un par está en estado «offline». El nodo ha superado la ventana de espera: compruebe la red y el funcionamiento de su servidor web. Para un nodo tras NAT, asegúrese de que él mismo inicia la conexión con un par accesible o de que están configurados la publicación y el reenvío de puerto.

  • Un par autodescubierto está marcado con un motivo, el enlace directo no funciona. En el dominio no se logra confirmar la autenticidad de los nodos. Si se comunican a través de internet, habilite HTTPS en al menos un nodo del dominio y reinícielo; en una red local, compruebe que los pares están indicados por direcciones IP y no por nombres de dominio. Por un enlace explícito (nodos permanentes) el enlace funciona también sin HTTPS.

  • Indicación de NAT falsa. Si los nodos están indicados por nombres de dominio y no por IP, la indicación de NAT puede no determinarse a partir de la dirección — esto no interfiere con el funcionamiento. Para un diagnóstico de NAT fiable, use direcciones IP.

  • El cambio de dominio «reinició» el mapa. Cambiar el dominio o el conjunto de dominios adicionales reconstruye la pertenencia: los enlaces autodescubiertos y el catálogo común se reinician temporalmente y se reconstruyen. Esto es normal.