Como aumentar a velocidade de resolução mDNS

Para você que utiliza MulticastDNS em seu Linux, onde o systemd-resolved está habilitado, você já deve ter notado que o tempo de consulta de alguns programas é muito maior do que o esperado. Especialmente sabendo que o resolvectl resolve em menos de um segundo, alguns programas do sistema operacional podem levar até 7 segundos para fazer a mesma consulta de DNS.

Por que isso acontece? Pois bem, muitos programas em C utilizam o arquivo de configuração chamado nsswitch.conf(5) ao invés do systemd diretamente, e isso causa uma divergência no comportamento entre os programas do sistema operacional e os programas que utilizam o systemd-resolved. Os programas em C vão seguir uma lista que contém todas as fontes que eles devem utilizar na hora de resolver nomes de domínio, essa lista está na diretiva hosts e as diretivas são seguidas uma após a outra. Pelo fato dos programas em C estarem seguindo uma lista, o tempo na resolução de nomes pode variar e pode ficar mais lento do que aqueles programas que utilizam o systemd diretamente.

Isso não é uma falha de design!

Apesar de existir essa dualidade você pode fazer com que os programas em C utilizem o systemd diretamente e acelerar a velocidade das suas consultas.

Tutorial

Essa é a configuração padrão do Fedora 40 workstation edition no arquivo /etc/nsswitch.conf:

hosts:      files myhostname mdns4_minimal resolve [!UNAVAIL=return] dns

Você pode perceber que ele primeiro consulta os arquivos como o /etc/hosts, seguido do próprio hostname para depois utilizar uma implementação em C do MulticastDNS para daí sim cair no systemd. Por fim a minha configuração ficou desse jeito:

hosts:      files myhostname resolve [!UNAVAIL=return]

No entanto você não pode simplesmente editar o arquivo e salvar. No Fedora, esse arquivo é gerenciado por um programa chamado authselect(8) e esse programa possui modelos de configuração próprios para você editar.

  1. Abra o seu terminal e faça login como usuário root.
su -
  1. Descubra o perfil atual:
authselect current
  1. Crie um novo perfil com base no perfil atual:
authselect create-profile meuperfil --base-on <perfil-atual>

Substitua <perfil-atual> com o nome do perfil atual que veio do comando anterior.

  1. Mude para o novo perfil customizado:
authselect select custom/meuperfil

O seu perfil ficará localizado em /etc/authselect/custom/meuperfil e você pode editar o arquivo nsswitch.conf nesse diretório.

vim /etc/authselect/custom/meuperfil/nsswitch.conf

Altere a linha hosts para:

hosts:      files myhostname resolve [!UNAVAIL=return]
  1. Aplique as alterações:
authselect apply-changes
  1. Garanta que o perfil esteja ativo:
authselect current

Isso deve mostrar custom/meuperfil como perfil ativo.

Esse método garante que todos os programas em C do seu sistema operacional utilizem o systemd-resolved diretamente pulando assim várias etapas na resolução de nomes. Isso também garante que o processo como um todo fique muito mais rápido.

É isso, espero ter ajudado e me desculpa se isso for muito nichado para você.