Existe uma maneira de configurar o Avahi para implementar a “resolução de nomes anycast” em uma LAN?

9

Primeiro, alguns antecedentes: temos um laboratório contendo um punhado de servidores Linux dedicados que são executados em uma LAN isolada. Todos os servidores executam o mesmo SO (Debian Linux) e o mesmo software de servidor proprietário, e os processos do servidor se comunicam entre si para manter seus dados em sincronia. Isso significa que, no que diz respeito a qualquer cliente, não importa 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 para si próprios, o que significa que um cliente pode entrar, e. " link ." em seu navegador da web e se conectar ao servidor Linux # 1, e assim por diante.

Tudo isso é bom, exceto que significa que um usuário sentado na máquina do cliente (normalmente um laptop Mac ou Windows com o Bonjour instalado) precisa saber (ou descobrir) qual dos servidores Linux está atualmente on-line e ele tem que ter certeza que ele se conecta a um desses. Por exemplo, se o servidor nº 2 estiver off-line hoje e o cliente inserir " link ." em sua barra de URL, ele não obterá uma resposta. Isso não é o fim do mundo, é claro, mas é irritante para 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 um alias de nome de host mDNS no estilo anycast? O objetivo é que qualquer pessoa possa se sentar com seu laptop, digite " link ." (ou similar), e conecte-se a um dos servidores que estão atualmente on-line (novamente, não importa qual deles).

Observe que isso precisa funcionar sem qualquer configuração especial de laptops clientes, já que não temos controle sobre eles (além do requisito de instalação do Bonjour).

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

    
por Jeremy Friesner 03.06.2011 / 03:00

1 resposta

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. Assim, se você tentar publicar 2 nomes de host apontando para o mesmo IP, você terá um conflito no registro DNS reverso.

É possível fazer isso se você usar a API do Avahi para publicar manualmente um registro A e marcá-lo como não exclusivo. Você teria que 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 para o campo de flags. Isso deve funcionar então.

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 plugin do firefox ou similar para procurar serviços da web anunciados. Ou algum outro tipo de navegador de serviços.

O Bonjour costumava incluir um plug-in para o Internet Explorer para fazer isso como uma barra de favoritos, não sei se ainda faz isso.

    
por 03.06.2011 / 03:43