Eu olhei para o systemd-networkd e systemd-resolved:
e estou confuso com algumas palavras:
systemd-resolved.service(8)
Os nomes de rótulo único são roteados para todas as interfaces locais capazes de multicast de IP, usando o protocolo LLMNR. As pesquisas de um nome de host que termina em um dos domínios por interface são roteadas exclusivamente para as interfaces correspondentes.
systemd.network(5)
Ambos os domínios de "pesquisa" e "somente roteamento" são usados para roteamento de consultas DNS: pesquisas de nomes de host que terminam nesses domínios (portanto, também nomes de rótulo único, se algum "domínio de pesquisa" estiver listado), são roteados para o Servidores DNS configurados para esta interface.
minha pergunta é: para hosts com várias interfaces configuradas com "domínios de pesquisa" e LLMNR ativado, para onde irão as solicitações de pesquisa de rótulo único?
mais detalhes da minha confusão:
- se uma interface estiver configurada com o domínio de pesquisa "mydomain" e o LLMNR desabilitado, qualquer solicitação de pesquisa de rótulo único será roteada para essa interface?
- se uma interface estiver configurada com o domínio de pesquisa "mydomain" e LLMNR ativado e uma solicitação de pesquisa para "xyz" chegar, "xyz" por meio de LLMNR e "xyz.mydomain" por meio do servidor dns especificado acontecerão?
Esta questão fica muito longa para explicar. A descrição curta (imprecisa) é:
para onde irão as solicitações de pesquisa de rótulo único?
Rótulo único? (não
localhost
et al.): Sempre ao sistema LLMNR.Multi-label?: Para os servidores DNS de cada interface. Em caso de falha (ou se não estiver configurado), para os servidores DNS globais.
Sim, a sequência geral segue conforme descrito em systemd-resolved.service(8) MAS :
Define o systemd.network(5) como um recurso adicional para resolução de DNS.
E, entenda que da RFC 4795 :
A sequência (simplificada) é:
O nome de host local configurado é resolvido para todos os endereços IP configurados localmente ordenados por seu escopo, ou — se nenhum estiver configurado — o endereço IPv4 127.0.0.2 (que está no loopback local) e o endereço IPv6 ::1 (que é o hospedeiro local).
Os nomes de host "localhost" e "localhost.localdomain" (e qualquer nome de host que termine em ".localhost" ou ".localhost.localdomain") são resolvidos para os endereços IP 127.0.0.1 e ::1.
O nome do host "_gateway" foi resolvido para…
Os mapeamentos definidos em
/etc/hosts
estão incluídos (para frente e para trás).Se o nome a ser pesquisado não tiver pontos (um nome como
home.
tem um ponto), ele será resolvido pelo protocolo LLMNR.Nomes de várias palavras (um ponto ou mais) para alguns sufixos de domínio (como ".local", veja a lista completa com
systemd-resolve --status
) são resolvidos por meio do protocolo MulticastDNS.Nomes de várias palavras são verificados na
Domains=
lista em systemd.network(5) por interface e, se houver correspondência, a lista de servidores DNS dessa interface será usada.Outros nomes de vários rótulos são roteados para todas as interfaces locais que possuem um servidor DNS configurado, além do servidor DNS configurado globalmente, se houver.
#Editar
O título da sua pergunta diz:
Então, eu centralizei minha resposta
systemd-resolved
exclusivamente.Agora você pergunta:
Se uma interface estiver configurada com o domínio de pesquisa "mydomain" e LLMNR desabilitado, qualquer solicitação de pesquisa de rótulo único será roteada para essa interface?
Se uma interface estiver configurada com o domínio de pesquisa "mydomain" e o LLMNR habilitado e uma solicitação de pesquisa para "xyz" for recebida, "xyz" por meio de LLMNR e "xyz.mydomain" por meio do servidor dns especificado acontecerão?
Aqueles parecem estar fora de
systemd-resolved
exclusivamente.Vamos tentar analisá-los:
systemd-resolved
-se com algo semelhante asystemctl mask systemd-resolved
?Se
systemd-resolved
estiver desativado/parado, não há LLMNR em uso (provavelmente, a menos que você instale o Avahi, Apple bonjour ou um programa similar) Mas certamente, isso está fora dasystemd-resolved
configuração.Nesse caso, devemos perguntar: o que acontece quando uma resolução de nomes falha? (pois não há servidor para responder). Que está configurado em
nsswitch
(arquivo/etc/nsswitch.conf
). A configuração padrão para o Ubuntu (como Debian) contém esta linha:Isso significa (na linguagem nsswitch):
Comece verificando o
/etc/hosts
arquivo. Se não encontrar, continue.Tente
mdns4_minimal
( Avahi et al. ) que tentará resolver o nome via DNS multicast somente se terminar com .local. Se isso acontecer, mas nenhum host mDNS estiver localizado, mdns4_minimal retornará NOTFOUND. A resposta de troca de serviço de nome padrão para NOTFOUND seria tentar o próximo serviço listado, mas a entrada [NOTFOUND=return] substitui isso e interrompe a pesquisa com o nome não resolvido. Se mdns4_minimal retornar UNAVAIL (não está em execução), vá para dns.A trama engrossa todo mundo quer ser o primeiro da lista para resolver nomes e todo mundo se oferece para fazer todas as resoluções sozinho.
A
dns
entrada nansswitch
verdade chamanss-resolve
primeiro que substitui nss-dnsO que dependerá das várias
DOMAINS=
entradas em geral/etc/systemd/resolved.conf
e/ou de cada interface via/etc/systemd/network
arquivos. Isso foi explicado acima da entrada EDIT .Entenda que sytemd-resolved pode consultar os servidores dns sozinho antes da entrada dns no nsswitch.
Se ainda não for encontrado (sem
[notfound=return]
entrada), tente os servidores DNS. Isso acontecerá mais ou menos imediatamente se o nome não terminar em .local, ou não se terminar. Se você remover a entrada [NOTFOUND=return], o nsswitch tentará localizar hosts .local não resolvidos via DNS unicast. Isso geralmente seria uma coisa ruim, pois enviaria muitas dessas solicitações para servidores DNS da Internet que nunca as resolveriam. Aparentemente, isso acontece muito.O final
myhostname
atua como um resolvedor de último recurso para localhost, hostname, *.local e alguns outros nomes básicos.Se
systemd-resolved
tiver umLLMNR=no
conjunto na/etc/systemd/resolved.conf
mesma lista acima, aplique, massystemd-resolved
ainda consiga resolverlocalhost
e aplicarDOMAINS=
configurações (globais ou por interface).Entenda que há a configuração LLMNR em systemd-resolved e também há a configuração LLMNR por link em systemd-networkd. ligação .
#O que significa tudo isso? Que é muito difícil dizer com certeza o que acontecerá, a menos que a configuração seja muito, muito específica. você terá que desabilitar os serviços e tentar (no seu computador com sua configuração) o que vai acontecer.
#Q1
Sim, claro, pode . Que o LLMNR esteja desabilitado apenas bloqueia a resolução local (nenhum outro servidor na rede local ( yes: .local ) será solicitado), mas a resolução para esse nome deve encontrar uma resposta (mesmo que negativa) para que possa (se não houver NOTFOUND =entrada de retorno , por exemplo) acontece que os servidores DNS para uma interface correspondente são contatados para resolver
mylocalhost.mylocaldomain
quando uma resolução paramylocalhost
foi iniciada e há uma entrada paramylocaldomain
no "domínio de pesquisa". responder em um sentido geral é quase impossível, muitas variáveis.#Q2
Não. se tudo estiver configurado corretamente, um único nome de rótulo "xyz" deve ser resolvido apenas por LLMNR e, mesmo que solicitado, um servidor DNS não deve tentar resolvê-lo. Bem, isso é teoria. Mas o sistema DNS deve resolver
com
(claramente, ou a rede cairia como está agora). Mas existe uma solução simples: solicitecom.
, tem um ponto, é um FQDN. Em qualquer caso, um servidor DNS deve responder comNOERROR
(com um A vazio (ou AAAA)) se o servidor não tiver informações suficientes sobre um rótulo e a resolução deve continuar com os servidores raiz (para.
). Ou com um NXDOMAIN (a melhor resposta para evitar mais resoluções) para domínios que ele sabe que não existem.A única maneira segura de controlar isso é ter um servidor DNS local e escolher quais nomes resolver e quais não.
Ele será roteado para todos eles, usando tanto LLMNR quanto DNS e a primeira resposta recebida será usada.
Veja esta parte da página de manual resolvida pelo systemd: