Existe uma maneira de configurar o Avahi para implementar a "resolução de nome anycast" em uma LAN?

9

Primeiro, alguns antecedentes: temos um laboratório que contém um punhado de servidores Linux dedicados que são executados em uma LAN isolada. Todos os servidores executam o mesmo sistema operacional (Debian Linux) e o mesmo software de servidor proprietário, e os processos do servidor se comunicam entre si para manter seus dados sincronizados. Isso significa que, no que diz respeito a qualquer cliente, não importa em qual servidor o cliente se conecta - qualquer servidor retornará os mesmos dados que qualquer outro.

Todos esses servidores Linux executam o avahi-daemon para publicar nomes de host mDNS, o que significa que um cliente pode inserir, por exemplo, " http: //linux-server-1.local ". em seu navegador e conecte-se ao servidor Linux nº 1, e assim por diante.

Tudo está bem, exceto que significa que um usuário sentado na máquina cliente (normalmente um laptop Mac ou Windows com o Bonjour instalado) precisa saber (ou descobrir) quais servidores Linux estão atualmente online e ele precisa verifique se ele se conecta a um desses. Por exemplo, se o servidor nº 2 estiver offline hoje, e o cliente digitar " http: //linux-server-2.local ". na barra de URL dele, ele não receberá uma resposta. Esse não é o fim do mundo, é claro, mas é irritante para os usuários novatos que esperam que tudo "simplesmente funcione" e também torna o desenvolvimento de scripts robustos do lado do cliente mais complicado (desde o script do lado do cliente precisaria saber como lidar com servidores offline explicitamente).

Com isso em mente, minha pergunta é a seguinte: é possível configurar o Avahi para publicar também um alias de nome de host mDNS no estilo anycast? O objetivo é que qualquer pessoa possa se sentar com seu laptop e digitar " http: //any-linux-server.local ". (ou similar) e conecte-se a um dos servidores atualmente online (novamente, não importa qual).

Observe que isso precisa funcionar sem nenhuma configuração especial dos laptops clientes, pois não temos controle sobre eles (exceto o requisito de que o Bonjour esteja instalado).

Observe também que não podemos confiar na presença de um servidor de nomes ou caixa de proxy separada ou na presença de qualquer servidor Linux em particular, pois isso introduziria um único ponto de falha, o que estamos tentando evitar.

Jeremy Friesner
fonte

Respostas:

13

Trent Lloyd aqui, um dos autores do projeto Avahi.

Isso é teoricamente possível, mas não é fácil de fazer. Infelizmente, o mecanismo padrão para publicar um nome de host no Avahi também publicou um registro DNS reverso, listado como exclusivo. Portanto, se você tentar publicar dois nomes de host apontando para o mesmo IP, ocorrerá um conflito no registro DNS reverso.

É possível fazer isso se você usar a API Avahi para publicar manualmente um registro A e marcá-lo como não exclusivo. Você precisaria escrever um pequeno processo em segundo plano para cada servidor em Python, C ou similar.

A chamada da API a ser usada é avahi_entry_group_add_record e você precisa passar AVAHI_PUBLISH_ALLOW_MULTIPLE no campo de sinalizadores. Isso deve funcionar.

Uma alternativa é usar a descoberta de serviço da maneira pretendida e fazer com que cada cliente publique um serviço HTTP e use um plug-in do firefox ou similar para navegar pelos serviços da web anunciados. Ou algum outro tipo de navegador de serviço.

Bonjour costumava incluir um plugin para o Internet Explorer para fazer isso como uma barra de favoritos, não tenho certeza se ainda o faz.

Trent Lloyd
fonte
2
Eu consegui funcionar, obrigado! No caso de alguém estiver interessado, eu postei o código-fonte C aqui: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner
hm. que não parecem funcionar com versões mais recentes do avahi :( O programa imprime que publicou com sucesso os nomes, mas eles não aparecem quando se navega a partir de outra máquina na rede.
Frederick Nord