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.
- Abra o seu terminal e faça login como usuário root.
su -
- Descubra o perfil atual:
authselect current
- 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.
- 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]
- Aplique as alterações:
authselect apply-changes
- 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ê.