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 vecino 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 vecino. El puerto se toma de la dirección del vecino («host:puerto») o del puerto público que el vecino anuncia sobre sí mismo (Parámetros del nodo). Meshwork no tiene un puerto propio: es el puerto del servidor web del vecino o, si el vecino tiene HTTPS habilitado, su puerto TLS. Si un vecino tras NAT ha definido un puerto público, es el puerto reenviado a su servidor web. Los valores para una instalación nueva se indican en Configuración inicial; el puerto necesario de un vecino 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 sin riesgo su 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 vecino), 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 indique los vecinos precisamente por direcciones IP y no por nombres de dominio. HTTPS puede habilitarse igualmente: se usará si está disponible. La excepción es un nodo al que se le ha asignado una interfaz de anuncio con dirección privada. Ese nodo se anuncia solo para HTTP simple. Si un nodo tiene varias redes (por ejemplo, una interna y una pública por la que pasa la ruta predeterminada), sin un ajuste específico comunica a los vecinos su dirección pública. Asigne a ese nodo una interfaz de anuncio (Nodo con varias redes).

  • 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.

  • Relojes sincronizados. Desde la versión 2.0.2.416, un nodo rechaza a un vecino cuyo reloj difiere del suyo en más de 5 minutos, y ese enlace se muestra como no disponible. Mantenga la sincronización de la hora (NTP) en todos los nodos. Cuando la diferencia supera la mitad de la tolerancia, ambos nodos escriben en el registro una advertencia con el nombre del vecino y el tamaño de la diferencia. La tolerancia la define el parámetro cluster-hello-window-sec de la sección cluster del archivo de configuración (El archivo de configuración pss.json): 300 segundos por defecto, de 0 a 86400; 0 desactiva la comprobación de los relojes si no se pueden sincronizar.

  • 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).

Parámetros 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 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 vecinos).

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

  • Interfaz de anuncio — la interfaz de red cuya dirección el nodo comunica a los vecinos en lugar del nombre de host del servidor web o de su dirección pública. La necesita un nodo con varias redes (Nodo con varias redes). Una dirección privada se anuncia solo para HTTP simple; los puertos públicos no se le aplican. El valor «Por defecto (nombre de host HTTP o dirección pública)» significa que el nodo comunica la dirección predeterminada.

  • Dominios adicionales (modo super-node) — el nodo es además miembro de los dominios listados. Los recursos permanecen aislados por dominio: el nodo no los mezcla. En su dominio principal, el nodo es un participante de pleno derecho del autodescubrimiento. En un dominio adicional solo está enlazado con los vecinos de su lista (Vecinos y secretos): de ellos recibe el catálogo de recursos y las alertas de ese dominio, y ve los demás nodos del dominio a través de ellos, sin dirigirse a ellos por sí mismo. Por eso, para cada dominio adicional, indique en el super-node al menos un vecino de ese dominio.

Vecinos y secretos

Aquí se define con qué vecinos mantiene el nodo un enlace directo y cómo se verifican las partes 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 vecinos está formada por entradas del tipo «dirección — nombre — secreto»:

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

  • El nombre del vecino debe coincidir exactamente con el nombre definido en el propio vecino.

  • El secreto compartido del enlace con este vecino debe ser el mismo en ambos extremos.

  • Interfaz de anuncio (opcional) — la interfaz cuya dirección el nodo comunica precisamente a este vecino en lugar de su interfaz de anuncio general (Nodo con varias redes). El valor «Igual que el nodo» significa que se aplica la general.

La interfaz de anuncio de un vecino está vinculada a su nombre, no a la fila de la lista:

  • mientras la fila no tenga un nombre de vecino válido, la selección de interfaz no está disponible: no hay nada bajo lo que guardar el ajuste;

  • al renombrar el vecino, el ajuste se traslada con él;

  • al eliminar el vecino de la lista, el ajuste se conserva y sigue vigente si ese nodo permanece en la red mediante el autodescubrimiento.

Estos ajustes para nodos que no figuran en la lista de vecinos se muestran en el bloque «Interfaz de anuncio para otros nodos», debajo de la lista: allí pueden modificarse o eliminarse. No se puede añadir un nodo nuevo a este bloque: el ajuste se define en la fila del vecino.

La entrada de un vecino inaccesible no se elimina solo aquí: la acción «Olvidar nodo» de las pantallas «Nodos» y «Topología» (Nodos) lo borra de esta lista. Es la misma modificación de la configuración, hecha desde una pantalla de observación, y no se puede deshacer.

Además de la lista de vecinos, un nodo tiene su propio secreto de firma: con él el nodo firma sus solicitudes salientes. Un vecino 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 vecino.

Las respuestas se firman de la misma manera: un nodo acepta la respuesta de un vecino solo si está firmada con la clave con la que se firmó la solicitud — el secreto del enlace o la clave del dominio. Una respuesta con una firma incorrecta o de otro nodo no establece el enlace. La clave del dominio se transmite cifrada entre los nodos. Los nodos de versiones anteriores a 2.0.2.415 no firman las respuestas; cómo proceder en un dominio mixto se describe en Actualización de los nodos del dominio. Desde la versión 2.0.2.416, cada mensaje de un nodo lleva la hora de envío y el nombre del destinatario: un vecino rechaza un mensaje enviado de nuevo o dirigido a otro nodo, así como un mensaje con una hora fuera de la tolerancia (véase «Relojes sincronizados» en Requisitos y accesibilidad).

Nota

Regla práctica: para un sitio sencillo, defina un único secreto compartido y úselo tanto como secreto de firma propio en cada nodo como en cada entrada de vecino. 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 vecino: la dirección de su panel de administración, su nombre y el secreto compartido.

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

  4. Abra la pantalla «Nodos» del ámbito Meshwork en el panel de administración. En unos segundos, ambos nodos se verán mutuamente con el estado «Activo».

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; a los nodos que no tienen definido el nombre de host del servidor web, asígneles como interfaz de anuncio su interfaz interna (Nodo con varias redes).

  3. Enlace los nodos mediante un «punto de entrada»: en cada nodo, indique al menos un vecino 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 en la red como iniciador. Él mismo establece una conexión con un vecino 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 vecino accesible.

La información sobre un nodo NAT se propaga automáticamente por el dominio: un vecino que mantiene contacto con él retransmite su estado a los demás. En los vecinos lejanos, ese 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 Parámetros del nodo) y reenvíe este puerto en el router/cortafuegos hacia el servidor web administrativo del nodo. Del lado de los vecinos, ese nodo se mantiene con una entrada «nombre + secreto sin dirección»: el vecino 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.

Nodo con varias redes

De forma predeterminada, un nodo comunica a los vecinos la dirección por la que se le debe contactar: el nombre de host definido para el servidor web o, si no está definido, la dirección de su primera interfaz pública. Para un nodo con una sola red, esto basta. Pero si el nodo tiene varias redes, la elección predeterminada puede resultar incorrecta. Caso típico: todos los nodos del dominio están en la red interna, pero uno de ellos tiene además una interfaz pública por la que pasa la ruta predeterminada. Ese nodo comunica a los vecinos su dirección pública, y los vecinos empiezan a contactarlo a través de la red pública y por HTTPS, aunque todos los nodos están en la misma red interna.

Para que el nodo anuncie la dirección correcta, asígnele una interfaz de anuncio (Parámetros del nodo). Es la interfaz de red cuya dirección el nodo comunica a los vecinos en lugar del nombre de host y de la dirección pública:

  • si la dirección de la interfaz es privada (10.x.x.x, 172.16–31.x.x, 192.168.x.x, 127.x.x.x, 169.254.x.x), el nodo la anuncia solo para HTTP simple: en el puerto del servidor web, sin HTTPS y sin puertos públicos. Los vecinos de la red interna lo contactan por HTTP; HTTPS no es necesario para el intercambio;

  • si la dirección es pública, se anuncia igual que la dirección pública del nodo: con HTTPS si HTTPS está habilitado y teniendo en cuenta los puertos públicos.

La interfaz de anuncio determina solo qué dirección comunica el nodo sobre sí mismo. Por qué interfaz salen las conexiones propias del nodo hacia los vecinos lo sigue decidiendo la tabla de enrutamiento del servidor.

Procedimiento para configurar un dominio interno en el que un nodo tiene además una red pública:

  1. En el nodo con varias redes, asigne como interfaz de anuncio la interfaz de la red interna.

  2. En los nodos del dominio que no tienen definido el nombre de host del servidor web, asigne también como interfaz de anuncio su interfaz interna. Sin ella, un nodo que solo tiene direcciones privadas no comunica nada sobre sí mismo, y el autodescubrimiento no lo encuentra: solo está enlazado con quienes lo han indicado explícitamente.

  3. Indique los vecinos de cada nodo por sus direcciones IP internas.

  4. Compruebe el mapa de red (Mapa de red y catálogo de recursos): las direcciones de los nodos son internas, la indicación de NAT no está activada en el nodo con dos redes y los enlaces no muestran ningún motivo de autenticación fallida.

Si un nodo debe comunicar direcciones distintas a vecinos distintos (por ejemplo, la dirección interna a los vecinos de la red interna y la pública a un vecino en internet), asigne la interfaz de anuncio a vecinos concretos (Vecinos y secretos): se aplica en lugar de la interfaz de anuncio general del nodo. Tenga en cuenta que, si un mismo nodo se anuncia de forma distinta en redes distintas, un tercer nodo que recibe datos sobre él desde ambas redes puede ver su dirección alternar entre una y otra. Por eso las direcciones distintas se asignan a un nodo situado en la frontera entre redes, cuyos vecinos de las distintas redes no comunican datos unos sobre otros.

El resultado se ve en la pantalla «Nodos» (Nodos), en la fila del propio nodo: los campos «HTTP público» y «HTTPS público» muestran lo que el nodo comunica a los vecinos. Con una interfaz de anuncio privada no existe el campo «HTTPS público», y «HTTP público» contiene la dirección interna y el puerto. Una interfaz asignada a un vecino concreto no se refleja en la fila del propio nodo: se ve en la fila de este nodo en el vecino al que está destinada.

En el panel de administración, la interfaz de anuncio se elige de la lista de interfaces de red del servidor (nombre y dirección IPv4); en el archivo de configuración también puede indicarse mediante una dirección IP. Una interfaz que no existe en el servidor se rechaza al guardar con un mensaje del tipo cluster-bind-if: 'eth9' is neither a network interface of this host nor an IPv4 address. Si la interfaz desaparece más tarde (por ejemplo, al desconectarse una VPN), el ajuste se conserva: el nodo sigue funcionando y, hasta que la interfaz vuelva, comunica la dirección predeterminada, y en la lista de selección la interfaz guardada se muestra solo con su nombre, sin dirección.

Actualización de los nodos del dominio

Desde la versión 2.0.2.415, los nodos verifican la firma de las respuestas de los vecinos y transmiten cifrada la clave del dominio (Vecinos y secretos). Los nodos de versiones anteriores no firman las respuestas, por lo que el orden de actualización importa:

  • si es posible, actualice todos los nodos del dominio de una sola vez;

  • si no es posible, actualice primero los nodos a los que se conectan los demás (nodos centrales y nodos con direcciones públicas) y después los nodos detrás de NAT.

Mientras en el dominio funcionan nodos de versiones distintas:

  • un nodo antiguo y uno nuevo siguen viéndose mutuamente en funcionamiento;

  • los datos del nodo antiguo (sesiones de inicio de sesión automático, el catálogo de recursos común, alertas) llegan al nodo nuevo cuando el antiguo se conecta a él por sí mismo, normalmente en un plazo de 30 segundos;

  • un nodo antiguo que no puede conectarse al nuevo (por ejemplo, por NAT) se muestra hasta su actualización solo como en funcionamiento, sin sus datos;

  • la protección completa contra el reenvío de intercambios grabados se aplica cuando todos los nodos del dominio funcionan con la versión 2.0.2.415 o posterior.

Volver a la versión anterior es seguro.

Desde la versión 2.0.2.416, los nodos comprueban además la hora de envío de los mensajes, por eso:

  • antes de actualizar, compruebe que la sincronización de la hora (NTP) funciona en todos los nodos del dominio (Requisitos y accesibilidad);

  • actualice el dominio completo: mientras contenga nodos de versiones anteriores, sus mensajes todavía se pueden repetir;

  • a un nodo devuelto de 2.0.2.416 a una versión anterior lo rechazan sus vecinos en 2.0.2.416 hasta que se reinician. Revierta el dominio completo o reinicie los nodos en 2.0.2.416 después de revertir.

Problemas comunes

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

  • Un vecino está en estado «Inactivo». 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 vecino accesible o de que están configurados la publicación y el reenvío de puerto. Si en el registro hay una advertencia de diferencia de relojes con este vecino, sincronice la hora en ambos nodos (NTP).

  • Un vecino dejó de estar disponible tras revertir un nodo. Los vecinos en 2.0.2.416 rechazan un nodo devuelto a una versión anterior hasta que se reinician: reinícielos o revierta el dominio completo.

  • Un vecino 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 vecinos están indicados por direcciones IP y no por nombres de dominio, y que el nodo con varias redes tiene asignada una interfaz de anuncio. Un enlace explícito (nodos permanentes) funciona también sin HTTPS.

  • Los vecinos contactan con el nodo por su dirección pública, aunque el dominio está en la red interna. El nodo tiene varias redes y, de forma predeterminada, comunica a los vecinos su dirección pública. Asígnele como interfaz de anuncio la interfaz interna (Nodo con varias redes).

  • 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, lo que no interfiere con el funcionamiento. Para el diagnóstico de NAT, 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.