Construção de uma rede Meshwork

A configuração do Meshwork se resume a garantir que cada nó conheça o próprio nome e domínio e tenha pelo menos um vizinho acessível. A partir daí, o domínio constrói sozinho as demais ligações. Todas as ações são feitas no painel de administração web; alterar as configurações do Meshwork requer a função de administrador. Os campos exatos e a sua localização estão descritos na seção Interface web.

Requisitos e acessibilidade

  • Acessibilidade de rede. O nó deve conseguir estabelecer uma conexão TCP com o servidor web administrativo do vizinho. A porta é obtida do endereço do vizinho («host:porta») ou da porta pública que o vizinho comunica sobre si mesmo (Parâmetros do nó). O Meshwork não tem porta própria: é a porta do servidor web do vizinho ou, se o vizinho tiver o HTTPS ativado, a sua porta TLS. Se o vizinho atrás de NAT definiu uma porta pública, é a porta encaminhada para o servidor web dele. Os valores para uma instalação nova estão indicados em Configurações iniciais; a porta necessária do vizinho deve estar aberta a partir dos outros nós.

  • HTTPS para a descoberta automática pela internet. Se os nós do domínio descobertos automaticamente se comunicam por endereços públicos (de internet), eles precisam estabelecer entre si uma conexão segura (HTTPS) para confirmar com segurança a autenticidade um do outro na rede aberta. Por isso, ative o HTTPS pelo menos nos nós pelos quais passa a descoberta. A ativação do HTTPS entra em vigor após um reinício do servidor. Se os nós forem acessíveis apenas por endereços públicos e nenhum usar HTTPS, as ligações diretas descobertas automaticamente não são autenticadas: o nó continua visível (por retransmissão a partir de um vizinho), mas a sua ligação direta é marcada com um motivo (ver Mapa da rede e catálogo de recursos).

  • Rede local — HTTPS não é necessário. Se os nós do domínio se comunicam por endereços privados de uma única rede confiável (10.x.x.x, 172.16–31.x.x, 192.168.x.x, bem como 127.x.x.x e 169.254.x.x), não é necessária uma conexão segura para a descoberta automática — os nós confirmam a autenticidade também por HTTP comum. Um nó é reconhecido como local pelo endereço IP, por isso, em uma rede local, defina os vizinhos justamente por endereços IP, e não por nomes de domínio. O HTTPS pode, ainda assim, ser ativado — será usado se estiver disponível. A exceção é um nó ao qual foi atribuída uma interface de anúncio com endereço privado. Ele se anuncia apenas para HTTP comum. Se um nó tiver várias redes (por exemplo, uma interna e uma pública, pela qual passa a rota padrão), sem configuração específica ele comunica aos vizinhos o endereço público. Atribua a esse nó uma interface de anúncio (Nó com várias redes).

  • Uma ligação explícita funciona também por HTTP — a exigência de HTTPS não se aplica a ela em nenhum caso.

  • O nome e o segredo são obrigatórios. Um nó participa da rede apenas se tiver definidos um nome e um segredo de assinatura.

  • Relógios sincronizados. A partir da versão 2.0.2.416, um nó recusa um vizinho cujo relógio difere do seu em mais de 5 minutos, e essa conexão é mostrada como indisponível. Mantenha a sincronização de horário (NTP) em todos os nós. Quando a diferença passa da metade da tolerância, os dois nós registram no log um aviso com o nome do vizinho e o tamanho da diferença. A tolerância é definida pelo parâmetro cluster-hello-window-sec da seção cluster do arquivo de configuração (O arquivo de configuração pss.json): 300 segundos por padrão, de 0 a 86400; 0 desativa a verificação dos relógios se não for possível sincronizá-los.

  • Restrições dos nomes. O nome de um nó tem de 2 a 16 caracteres, o nome de um domínio não excede 16 caracteres; são permitidos letras latinas, dígitos e os caracteres _, -, .. Espaços e outros caracteres não são admitidos (por exemplo, o domínio «Alex Home» não pode ser definido — use Alex_Home).

Parâmetros do nó

Nas configurações do servidor, é definido como o nó se apresenta na rede:

  • Nome do nó — um nome curto e único pelo qual os outros reconhecem o nó. Um nome vazio significa que o nó não participa da rede.

  • Nota — uma etiqueta livre do nó (por exemplo, «Moscou, rack 3»), exibida no painel de administração e sem efeito no funcionamento da rede.

  • Domínio — os nós com o mesmo domínio se encontram automaticamente, compartilham um catálogo de recursos comum e replicam os alertas. Um valor vazio desativa a descoberta automática (o nó só pode funcionar pela lista explícita de vizinhos).

  • Portas públicas (HTTP e HTTPS) — as portas que o nó comunica aos vizinhos para continuar alcançável de volta quando há tradução de endereços (NAT). Se não forem definidas, o nó comunica as próprias portas do servidor web.

  • Interface de anúncio — a interface de rede cujo endereço o nó comunica aos vizinhos em vez do nome de host do servidor web ou do seu endereço público. É necessária para um nó com várias redes (Nó com várias redes). Um endereço privado é anunciado apenas para HTTP comum; as portas públicas não se aplicam a ele. O valor «Padrão (nome de host HTTP ou endereço público)» significa que o nó comunica o endereço padrão.

  • Domínios adicionais (modo super-node) — o nó também pertence aos domínios listados. Os recursos permanecem isolados por domínio — o nó não os mistura. No domínio principal, o nó é um participante pleno da descoberta automática. Em um domínio adicional, ele está ligado apenas aos vizinhos da sua lista (Vizinhos e segredos): deles recebe o catálogo de recursos e os alertas desse domínio, e vê os demais nós do domínio por meio deles, sem se dirigir a esses nós diretamente. Por isso, para cada domínio adicional, cadastre no super-node pelo menos um vizinho desse domínio.

Vizinhos e segredos

Aqui se define com quais vizinhos o nó mantém uma ligação direta e como as partes verificam uma à outra. As solicitações entre nós são assinadas com um segredo compartilhado; por isso, sem segredos coincidentes, a ligação não se estabelece. O comprimento de cada segredo é de 16 a 128 caracteres.

A lista de vizinhos é formada por entradas do tipo «endereço — nome — segredo»:

  • Endereço do vizinho — o «host:porta» do seu painel de administração. Uma entrada pode não ter endereço: esse vizinho nunca é chamado por este nó (só ele mesmo se conecta) e é identificado pelo nome e pelo segredo. É assim que se configura um nó atrás de NAT que só consegue iniciar a conexão.

  • Nome do vizinho deve coincidir exatamente com o nome definido no próprio vizinho.

  • Segredo compartilhado da ligação com este vizinho deve ser o mesmo nas duas pontas.

  • Interface de anúncio (opcional) — a interface cujo endereço o nó comunica especificamente a este vizinho em vez da sua interface de anúncio geral (Nó com várias redes). O valor «Igual ao nó» significa que vale a interface geral.

A interface de anúncio de um vizinho está vinculada ao nome dele, e não à linha da lista:

  • enquanto a linha não tiver um nome de vizinho válido, a seleção da interface fica indisponível — não há nome sob o qual salvar a configuração;

  • ao renomear o vizinho, a configuração o acompanha;

  • ao remover o vizinho da lista, a configuração é mantida e continua valendo se esse nó permanecer na rede por meio da descoberta automática.

Essas configurações para nós que não estão na lista de vizinhos são exibidas no bloco «Interface de anúncio para outros nós», abaixo da lista: ali elas podem ser alteradas ou excluídas. Não é possível adicionar um novo nó a esse bloco — a configuração é feita na linha do vizinho.

A entrada de um vizinho indisponível não é removida apenas aqui: a ação «Esquecer nó» nas telas «Nós» e «Topologia» (Nós) também o exclui desta lista. É a mesma edição da configuração, feita a partir de uma tela de observação, e não pode ser desfeita.

Além da lista de vizinhos, o nó tem o seu próprio segredo de assinatura: com ele o nó assina as suas solicitações de saída. O vizinho verifica a assinatura com o segredo que guarda para esse nó, por isso o próprio segredo do nó deve coincidir com o segredo registrado sobre ele em cada vizinho.

As respostas são assinadas da mesma forma: o nó aceita a resposta de um vizinho somente se ela estiver assinada com a chave com que a solicitação foi assinada — o segredo da conexão ou a chave do domínio. Uma resposta com assinatura incorreta ou de outro nó não estabelece a conexão. A chave do domínio é transmitida criptografada entre os nós. Os nós de versões anteriores à 2.0.2.415 não assinam as respostas; como proceder em um domínio misto está descrito em Atualização dos nós do domínio. A partir da versão 2.0.2.416, cada mensagem de um nó leva o horário de envio e o nome do destinatário: um vizinho recusa uma mensagem enviada de novo ou endereçada a outro nó, assim como uma mensagem com horário fora da tolerância (veja «Relógios sincronizados» em Requisitos e acessibilidade).

Nota

Regra prática: para um local simples, defina um único segredo compartilhado e use-o tanto como o próprio segredo de assinatura em cada nó quanto como o segredo em cada entrada de vizinho. Assim, qualquer par de nós se autentica da mesma forma. Para uma separação mais rigorosa, é possível manter um segredo distinto para cada ligação.

Início rápido

Variante A. Dois nós diretamente (ligação explícita)

O Meshwork mais simples são dois servidores conectados manualmente.

  1. Em cada nó, defina um nome curto e único (por exemplo, node1 e node2).

  2. Em cada nó, adicione uma entrada de vizinho: o endereço do painel de administração dele, o nome dele e o segredo compartilhado.

  3. Em cada nó, defina o próprio segredo de assinatura. O mais simples é manter um único segredo compartilhado para os dois nós.

  4. Abra no painel de administração a tela «Nós» da área Meshwork. Em poucos segundos, os dois nós se verão com o estado «Ativo».

O domínio pode ficar sem definir, mas sem um domínio comum você terá apenas a visibilidade mútua dos nós. O catálogo de recursos comum e a replicação de alertas funcionam apenas entre nós com o mesmo domínio. Se precisar deles, defina um domínio comum para os nós (variante B).

Variante B. Um domínio com descoberta automática

Quando há mais de dois nós, é mais conveniente atribuir a eles um domínio comum do que listar cada ligação manualmente.

  1. Em cada nó, defina um nome único e o domínio comum do local.

  2. Se os nós do domínio se comunicam pela internet (por endereços públicos), ative o HTTPS em pelo menos um ou dois nós do domínio e reinicie-os (ver Requisitos e acessibilidade). Em uma rede local, este passo pode ser ignorado; para os nós que não têm nome de host do servidor web definido, atribua como interface de anúncio a interface interna deles (Nó com várias redes).

  3. Ligue os nós por um «ponto de entrada»: em cada nó, cadastre pelo menos um vizinho já em funcionamento (endereço, nome, segredo compartilhado), como na variante A. O nó encontrará sozinho os demais nós do domínio.

  4. Abra o mapa da rede. Em poucos segundos aparecerão nele todos os nós do domínio: os indicados explicitamente como permanentes, os encontrados automaticamente como autodescobertos.

Nós atrás de NAT

Um nó em uma rede privada, inalcançável diretamente de fora, pode participar da rede como iniciador. Ele mesmo estabelece a conexão com um vizinho acessível e, por essa única conexão, os dados circulam nos dois sentidos — o nó se anuncia e recebe informações sobre os outros. Basta cadastrar nesse nó pelo menos um vizinho acessível.

As informações sobre um nó atrás de NAT se propagam automaticamente pelo domínio: o vizinho que está em contato com ele retransmite o seu estado aos outros. Nos vizinhos distantes, esse nó aparece como recebido por retransmissão, mas no estado «online».

Para que um nó atrás de NAT seja acessível também para conexões de entrada (por exemplo, para servir de ponto de entrada do domínio), configure a publicação da porta pública (ver Parâmetros do nó) e encaminhe esta porta no roteador/firewall para o servidor web administrativo do nó. Do lado dos vizinhos, esse nó é mantido com uma entrada «nome + segredo sem endereço»: o vizinho não tentará em vão se conectar ao endereço privado e identificará o nó pelo nome e pelo segredo quando ele mesmo se conectar.

Nó com várias redes

Por padrão, o nó comunica aos vizinhos o endereço pelo qual deve ser acessado: o nome de host definido para o servidor web ou, se ele não estiver definido, o endereço da sua primeira interface pública. Para um nó com uma única rede, isso é suficiente. Mas, se o nó tiver várias redes, a escolha padrão pode estar errada. Caso típico: todos os nós do domínio estão na rede interna, mas um deles tem também uma interface pública, pela qual passa a rota padrão. Esse nó comunica aos vizinhos o endereço público, e os vizinhos passam a acessá-lo pela rede pública e via HTTPS, embora todos os nós estejam na mesma rede interna.

Para que o nó anuncie o endereço correto, atribua a ele uma interface de anúncio (Parâmetros do nó). É a interface de rede cujo endereço o nó comunica aos vizinhos em vez do nome de host e do endereço público:

  • se o endereço da interface for privado (10.x.x.x, 172.16–31.x.x, 192.168.x.x, 127.x.x.x, 169.254.x.x), o nó o anuncia apenas para HTTP comum — na porta do servidor web, sem HTTPS e sem portas públicas. Os vizinhos da rede interna acessam o nó via HTTP; o HTTPS não é necessário para a troca;

  • se o endereço for público, ele é anunciado da mesma forma que o endereço público do nó: com HTTPS quando o HTTPS está ativado e levando em conta as portas públicas.

A interface de anúncio determina apenas qual endereço o nó comunica sobre si mesmo. Por qual interface saem as conexões do próprio nó com os vizinhos continua sendo decidido pela tabela de roteamento do servidor.

Procedimento de configuração de um domínio interno em que um dos nós tem também uma rede pública:

  1. No nó com várias redes, atribua como interface de anúncio a interface da rede interna.

  2. Nos nós do domínio que não têm nome de host do servidor web definido, atribua também como interface de anúncio a interface interna deles. Sem ela, um nó que tem apenas endereços privados não comunica nada sobre si mesmo, e a descoberta automática não o encontra: ele fica ligado apenas aos nós que o cadastraram explicitamente.

  3. Cadastre os nós como vizinhos uns dos outros pelos endereços IP internos.

  4. Verifique o mapa da rede (Mapa da rede e catálogo de recursos): os endereços dos nós são internos, a indicação de NAT não está marcada no nó com duas redes e as ligações não apresentam motivo de falha de autenticação.

Se um nó precisar comunicar endereços diferentes a vizinhos diferentes (por exemplo, o endereço interno aos vizinhos da rede interna e o público a um vizinho na internet), atribua a interface de anúncio a vizinhos específicos (Vizinhos e segredos): ela vale no lugar da interface de anúncio geral do nó. Atenção: se o mesmo nó se anuncia de forma diferente em redes diferentes, um terceiro nó que recebe informações sobre ele das duas redes pode ver o endereço dele alternar entre um e outro. Por isso, endereços diferentes são atribuídos a um nó situado na fronteira entre redes, cujos vizinhos de redes diferentes não trocam informações uns sobre os outros.

O resultado aparece na tela «Nós» (Nós), na linha do próprio nó: os campos «HTTP público» e «HTTPS público» mostram o que o nó comunica aos vizinhos. Com uma interface de anúncio privada, o campo «HTTPS público» não existe, e «HTTP público» contém o endereço interno e a porta. Uma interface atribuída a um vizinho específico não aparece na linha do próprio nó — ela é visível na linha deste nó no vizinho ao qual se destina.

No painel de administração, a interface de anúncio é escolhida na lista de interfaces de rede do servidor — nome e endereço IPv4; no arquivo de configuração, ela também pode ser definida por endereço IP. Uma interface que não existe no servidor é rejeitada ao salvar, com uma mensagem do tipo cluster-bind-if: 'eth9' is neither a network interface of this host nor an IPv4 address. Se a interface desaparecer depois (por exemplo, quando uma VPN cai), a configuração é mantida: o nó continua funcionando e, até a interface voltar, comunica o endereço padrão, e na lista de seleção a interface salva é exibida apenas pelo nome, sem endereço.

Atualização dos nós do domínio

A partir da versão 2.0.2.415, os nós verificam a assinatura das respostas dos vizinhos e transmitem a chave do domínio criptografada (Vizinhos e segredos). Os nós de versões anteriores não assinam as respostas, por isso a ordem de atualização importa:

  • se possível, atualize todos os nós do domínio de uma só vez;

  • se não for possível, atualize primeiro os nós aos quais os demais se conectam (nós centrais e nós com endereços públicos) e depois os nós atrás de NAT.

Enquanto nós de versões diferentes funcionam no domínio:

  • um nó antigo e um novo continuam vendo um ao outro em funcionamento;

  • os dados do nó antigo (sessões de entrada automática, o catálogo de recursos comum, alertas) chegam ao nó novo quando o antigo se conecta a ele por conta própria — normalmente em até 30 segundos;

  • um nó antigo que não consegue se conectar ao novo (por exemplo, por causa do NAT) aparece, até ser atualizado, apenas como em funcionamento, sem os seus dados;

  • a proteção completa contra o reenvio de trocas gravadas vale quando todos os nós do domínio funcionam na versão 2.0.2.415 ou mais recente.

Voltar à versão anterior é seguro.

A partir da versão 2.0.2.416, os nós também verificam o horário de envio das mensagens; por isso:

  • antes da atualização, verifique se a sincronização de horário (NTP) está funcionando em todos os nós do domínio (Requisitos e acessibilidade);

  • atualize o domínio inteiro: enquanto houver nele nós de versões anteriores, as mensagens deles ainda podem ser repetidas;

  • um nó revertido da 2.0.2.416 para uma versão anterior é recusado pelos vizinhos na 2.0.2.416 até que eles reiniciem. Reverta o domínio inteiro ou reinicie os nós na 2.0.2.416 após a reversão.

Problemas comuns

  • Os nós não se veem. Verifique: os dois têm um nome de nó definido; cada um tem um segredo de assinatura, e ele coincide com o registrado sobre ele no vizinho; o endereço do vizinho está correto e a porta de administração dele está aberta a partir do outro nó.

  • Um vizinho está no estado «Inativo». O nó excedeu a janela de espera: verifique a rede e o funcionamento do servidor web dele. Para um nó atrás de NAT, certifique-se de que ele mesmo inicia a conexão com um vizinho acessível ou de que a publicação e o encaminhamento de porta estão configurados. Se o log tiver um aviso de diferença de relógio com esse vizinho, sincronize o horário nos dois nós (NTP).

  • Um vizinho ficou indisponível após a reversão de um nó. Os vizinhos na 2.0.2.416 recusam um nó revertido para uma versão anterior até que reiniciem: reinicie-os ou reverta o domínio inteiro.

  • Um vizinho autodescoberto está marcado com um motivo, a ligação direta não funciona. No domínio não é possível confirmar a autenticidade dos nós. Se eles se comunicam pela internet, ative o HTTPS em pelo menos um nó do domínio e reinicie-o; em uma rede local, verifique se os vizinhos estão definidos por endereços IP, e não por nomes de domínio, e se o nó com várias redes tem uma interface de anúncio atribuída. A ligação explícita (nós permanentes) funciona também sem HTTPS.

  • Os vizinhos acessam o nó pelo endereço público, embora o domínio esteja na rede interna. O nó tem várias redes e, por padrão, comunica aos vizinhos o endereço público. Atribua a ele como interface de anúncio a interface interna (Nó com várias redes).

  • Falsa indicação de NAT. Se os nós estão definidos por nomes de domínio e não por IP, a indicação de NAT pode não ser determinada pelo endereço — isso não atrapalha o funcionamento. Para diagnosticar o NAT, use endereços IP.

  • A mudança de domínio «reiniciou» o mapa. Alterar o domínio ou o conjunto de domínios adicionais reconstrói a participação nos domínios: as ligações autodescobertas e o catálogo comum são temporariamente reiniciados e montados de novo. Isso é normal.