Domain name resolution (Português)
Em geral, um nome de domínio representa um endereço IP e está associado a ele no Sistema de Nomes de Domínio, ou Domain Name System (DNS). Esse artigo explica como para configurar resolução de nome de domínio e resolver nomes de domínio.
Name Service Switch
O recurso Name Service Switch (NSS) é parte da biblioteca C do GNU (glibc) e apoia a API getaddrinfo(3), usada para resolver nomes de domínio. O NSS permite que bancos de dados do sistema sejam fornecidos por serviços separados, cuja ordem de pesquisa pode ser configurada pelo administrador no nsswitch.conf(5). O banco de dados responsável pela resolução de nomes de domínio é o banco de dados hosts, para o qual a glibc oferece os seguintes serviços:
- file: lê o arquivo
/etc/hosts
, veja hosts(5) - dns: o resolvedor do glibc que lê
/etc/resolv.conf
, veja resolv.conf(5)
Systemd fornece três serviços NSS para resolução de hostname:
- nss-resolve(8) - um resolvedor de tronco de DNS em cache, descrito em systemd-resolved
- nss-myhostname(8) - fornece resolução de hostname sem ter que editar
/etc/hosts
, descrito em Configuração de rede#Resolução de hostname local - nss-mymachines(8) - fornece resolução de hostname para os nomes de contêineres locais de systemd-machined(8)
Resolva um nome de domínio usando NSS
Bancos de dados NSS podem ser consultados com getent(1). Um nome de domínio pode ser resolvido por meio do NSS usando:
$ getent hosts nome_domínio
/etc/resolv.conf
e/ou /etc/hosts
diretamente. Veja Configuração de rede#Resolução de hostname local.Resolvedor do glibc
O resolvedor do glibc lê /etc/resolv.conf
para toda resolução para determinar os servidores de nome e opções para usar.
resolv.conf(5) lista servidores de nomes juntos com algumas opções de configuração.
Servidores de nome (nameservers) listados primeiros são tentados primeiro, até os três servidores podem ser listados. Linhas iniciando com um cerquilha (#
) são ignoradas.
Sobrescrita do /etc/resolv.conf
Gerenciadores de rede tendem a sobrescrever /etc/resolv.conf
, para particularidades veja a seção correspondente:
Para evitar que programas sobrescrevam /etc/resolv.conf
, também é possível protegê-lo contra gravação definindo o atributo de arquivo imutável:
# chattr +i /etc/resolv.conf
/etc/resolv.conf
, você pode usar resolvconf.Limitar o tempo de pesquisa
Se você for confrontado com uma consulta de hostname muito longa (seja no pacman ou enquanto navega), frequentemente ajuda a definir um pequeno tempo limite após o qual um servidor de nomes alternativo é usado. Para fazer isso, coloque o seguinte em /etc/resolv.conf
:
options timeout:1
Pesquisa de hostname atrasada com IPv6
Se você tiver um atraso de 5 segundos ao resolver os hostname, isso pode ser devido a um mau comportamento do servidor DNS/Firewall e somente dando uma resposta a uma solicitação paralela A e AAAA.[1] Você pode corrigir isso configurando a seguinte opção no /etc/resolv.conf
:
options single-request
Nomes de domínio local
Para ser capaz de usar o hostname de máquinas locais sem o nome de domínio totalmente qualificado, adicione uma linha ao /etc/resolv.conf
com o domínio local, como:
domain exemplo.org
Dessa forma, você pode se referir a hosts locais como maquinaprincipal1.exemplo.org
como simplesmente maquinaprincipal1
ao usar o comando ssh, mas o comando drill ainda requer os nomes de domínio totalmente qualificados para realizar pesquisas.
Utilitários de pesquisa
Para consultar servidores DNS específicos e registros DNS/DNSSEC, você pode usar utilitários de pesquisa de DNS dedicados. Essas ferramentas implementam o próprio DNS e não usam NSS.
Por exemplo, para consultar um servidor de nomes específico com drill por registros TXT de um domínio:
$ drill @servidor-de-nome TXT domínio
A menos que um servidor DNS seja especificado, drill vai usar os servidores de nome definidos em /etc/resolv.conf
.
- bind-tools[link quebrado: replaced by bind] fornece dig(1), host(1), nslookup(1) e um monte de ferramentas
dnssec-
.
Desempenho de resolvedor
O resolvedor do Glibc não armazena em cache as consultas. Para implementar um cache local, use systemd-resolved ou configure um cache local servidor DNS e use-o como o servidor de nome configurando 127.0.0.1
e ::1
como os servidores de nomes em /etc/resolv.conf
ou em /etc/resolvconf.conf
se estiver usando openresolv (Português).
- Os utilitários de pesquisa drill ou dig relatam o tempo de consulta.
- Um roteador geralmente configura seu próprio resolvedor de cache como o servidor DNS da rede, fornecendo assim o cache DNS para toda a rede.
- Se demorar muito para mudar para o próximo servidor DNS, você pode tentar diminuir o tempo limite.
Privacidade e segurança
O protocolo DNS não é criptografado e não leva em conta a confidencialidade, integridade ou autenticação, portanto, se você usar uma rede não confiável ou um ISP mal-intencionado, suas consultas DNS poderão ser interceptadas e as respostas manipuladas. Além disso, os servidores DNS podem realizar redirecionamento de DNS (DNS hijacking).
Você precisa confiar em seu servidor DNS para tratar suas consultas de maneira confidencial. Os servidores DNS são fornecidos por ISPs e terceiros. Como alternativa, você pode executar seu próprio servidor de nome recursivo, o que, no entanto, exige mais esforço. Se você usa um cliente DHCP em redes não confiáveis, defina os servidores de nomes estáticos para evitar o uso e a sujeição a servidores DNS arbitrários. Para proteger sua comunicação com um servidor DNS remoto, você pode usar um protocolo criptografado, como DNS sobre TLS (RFC 7858), DNS sobre HTTPS (RFC 8484) ou DNSCrypt, desde que o servidor upstream e seu resolvedor possuam suporte ao protocolo. Uma alternativa pode ser um software dedicado para criptografar e descriptografar a comunicação, tal como stunnel Para verificar se as respostas são realmente de servidores de nome autoritativos, você pode validar DNSSEC, desde que ambos os servidores upstream e seu resolvedor tenha suporte a isso.
DNS a nível de aplicativo
Esteja ciente de que alguns softwares cliente, como os principais navegadores web[2][3], estão começando a implementar DNS sobre HTTPS. Embora a criptografia de consultas possa ser vista como um bônus, isso também significa que o software avisa sobre a configuração do resolvedor do sistema.[4]
A Mozilla propôs desabilitar o DNS a nível de aplicativo se o resolvedor do sistema não puder resolver o domínio "use-application-dns.net". Atualmente, essa verificação está implementada apenas no Firefox.
Configurando DNS sobre HTTPS no Firefox
Para configurar DNS sobre HTTPS no Firefox (com base em [5]):
- abra Configurações de rede nas Preferências
- clique em Configurações
- marque Ativar DNS sobre HTTPS
Serviços DNS de terceiros
Existem vários serviços DNS de terceiros disponíveis, alguns dos quais também possuem software dedicado:
- dingo — Um cliente DNS para o DNS do Google por HTTPS
- https://github.com/pforemski/dingo || dingo-gitAUR[link quebrado: package not found]
- opennic-up — Automatiza a renovação de servidores DNS com os servidores OpenNIC mais responsivos
Servidores DNS
Os servidores DNS podem ser autoritativos e recursivos. Se eles não forem, eles são chamados de stub resolvers e simplesmente encaminham todas as consultas para outro servidor de nomes recursivo. Os stub resolvers são normalmente usados para introduzir o cache de DNS no host ou na rede local. Observe que o mesmo também pode ser obtido com um servidor de nomes completo. Esta seção compara os servidores DNS disponíveis, para uma comparação mais detalhada, consulte o Wikipedia:Comparison of DNS server software.
Nome | Pacote | Capacidades | resolvconf | Protocolos suportados | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Autoritativo | Recursivo | Cache | Valida DNSSEC |
DNS | DNSCrypt | DNS por TLS |
DNS por HTTPS | |||
dnscrypt-proxy | dnscrypt-proxy | Não | Não | Sim | Não | Não | Servidor | Resolvedor | Não | Sim |
Rescached | rescached-gitAUR | Não | Não | Sim | Não | Sim | Sim | Não | Não | Limitado1 |
Stubby | stubby | Não | Não | Não | Sim | Não | Servidor | Não | Resolvedor | Não |
systemd-resolved | systemd | Não | Não | Sim | Sim | Sim | servidor limitado e resolvedor | Não | Sim | Não |
dnsmasq | dnsmasq | Parcial 2 | Não | Sim | Sim | Sim | Sim | Não | Não | Não |
BIND | bind | Sim | Sim | Sim | Sim | Sim | Sim | Não | stunnel#DNS over TLS | Não |
Knot Resolver | knot-resolver | Não | Sim | Sim | Sim | Não | Sim | Não | Sim | Servidor |
MaraDNS | maradnsAUR | Sim | Sim | Sim | Não | Não | Sim | Não | Não | Não |
pdnsd | pdnsd | Sim | Sim | Permanente | Não | Sim | Sim | Não | Não | Não |
PowerDNS Recursor | powerdns-recursor | Não | Sim | Sim | Sim | Sim | Sim | Não | Não | Não |
Unbound | unbound | Parcial | Sim | Sim | Sim | Sim | Sim | Servidor | Sim | Servidor |
Deadwood | maradnsAUR | ? | ? | ? | ? | ? | ? | ? | ? | ? |
CoreDNS | corednsAUR ou coredns-binAUR | ? | ? | ? | ? | ? | ? | ? | ? | ? |
- Só encaminha usando DNS por HTTPS quando Rescached em si é consultado usando DNS por HTTPS.[6]
- Do Wikipédia: dnsmasq tem um suporte autoritativo limitado, sendo destinado a rede interna em vez de uso público na Internet.
Servidores apenas autoritativos
Nome | Pacote | DNSSEC | Balanceamento geográfico |
---|---|---|---|
gdnsd | gdnsd | Não | Sim |
Knot DNS | knot | Sim | Sim |
NSD | nsd | Não | Não |
PowerDNS | powerdns | Sim | Sim |
Encaminhamento condicional
É possível usar resolvedores de DNS específicos ao consultar nomes de domínio específicos. Isso é particularmente útil ao se conectar a uma VPN, para que as consultas à rede VPN sejam resolvidas pelo DNS da VPN, enquanto as consultas à Internet ainda serão resolvidas pelo seu resolvedor DNS padrão. Também pode ser usado em redes locais.
Para implementá-lo, você precisa usar um resolvedor local porque o glibc não oferece suporte a isso.
Em um ambiente dinâmico (laptops e algumas extensões de desktops), você precisa configurar seu resolvedor com base na(s) rede(s) à(s) qual(is) você está conectado. A melhor maneira de fazer isso é usar openresolv porque ele possui suporte a vários assinantes. Alguns gerenciadores de rede possuem suporte, seja através do openresolv, ou configurando o resolvedor diretamente.
Suporte a combinação de softwares
Suporte a usuário de openresolv
Software | Suporte ? |
---|---|
dhcpcd | Desconhecido |
iwd | Desconhecido |
Software | Suporte ? |
---|---|
NetworkManager | Parcial |
netctl | Desconhecido |
Software | Suporte ? |
---|---|
OpenConnect | Desconhecido |
OpenVPN | Desconhecido |
strongSwan | Desconhecido |
WireGuard | Desconhecido |
Suporte a assinante de openresolv
Software | Suporte ? |
---|---|
BIND | Desconhecido |
dnsmasq | Sim |
pdnsd | Desconhecido |
powerdns-recursor | Desconhecido |
Unbound | Desconhecido |
Outras soluções
NetworkManager possui suporte a encaminhamento condicional sem o openresolv.
Veja também
- Linux Network Administrators Guide
- Debian Handbook
- RFC:7706 - Diminuindo o tempo de acesso a servidores raiz executando um com loopback (inglês)
- Visão geral de sistema de nomes de domínio - Diagrama sobre DNS
- Serviços alternativos de DNS