Quem lê o /etc/resolv.conf?

13

O servidor My Centos 7 não resolve nomes de domínio corretamente. Pelo que vejo, nos sistemas Linux modernos /etc/resolv.conf é frequentemente gerado com dhclient , dnsmasq ou Network Manager .

Assim, tenho uma questão teórica geral sobre pilha de rede em Linuxes modernos:

Quem é responsável pela leitura de /etc/resolv.conf ? Quais players (serviços ou subsistemas de kernel) estão envolvidos na resolução de nomes de domínio?

RESPOSTA RESUMIDA: O manual do Arch Linux diz que a configuração de alto nível do domínio A resolução de nomes é feita em /etc/nsswitch.conf e conta com o nome Service Switch glibc API.

glibc usa a função nss-resolve para enviar solicitações DNS para servidores DNS.

Normalmente, nos sistemas CentOS modernos, nss-resolve depende de systemd-resolved serviço. Se /etc/resolv.conf foi gerado por algo como dhclient-script , systemd-resolved o lê e funciona em um modo de compatibilidade, emulando o comportamento de sistemas mais antigos, como BIND do cliente DNS.

    
por Boris Burkov 11.06.2018 / 12:17

3 respostas

18

bibliotecas cliente DNS fazem.

As bibliotecas C contêm clientes DNS que envolvem pesquisas de nome para endereço no protocolo DNS e as entregam a servidores DNS proxy para fazer todo o trabalho pesado de resolução de consulta. Existem muitos desses clientes DNS. O que está na biblioteca principal de tempo de execução do seu sistema operacional provavelmente será o do BIND do ISC. Mas há toda uma carga de outros da biblioteca dns do Daniel J. Bernstein através do c-ares até adns.

Embora vários deles contenham seus próprios mecanismos de configuração nativos, eles geralmente têm um modo de compatibilidade de biblioteca BIND, onde leem resolv.conf , que é o arquivo de configuração da biblioteca cliente BIND C do ISC.

O NSS é sobreposto em cima disso e é configurado por nsswitch.conf . Uma das coisas que as pesquisas NSS podem invocar internamente é o cliente DNS, e nsswitch.conf é lido pelo código NSS na biblioteca C para determinar se e onde as pesquisas são entregues ao cliente DNS e como lidar com as várias respostas.

(Há uma ligeira complicação a essa idéia causada pelo Name Services Cache Daemon, nscd. Mas isso simplesmente adiciona um cliente extra de camada superior na biblioteca C, falando um protocolo idiossincrático para um servidor local, que por sua vez atua como um cliente DNS falando o protocolo DNS para um servidor DNS proxy. systemd-resolved adiciona complicações semelhantes.

systemd-resolved , NetworkManager , connman , dhcpcd , resolvconf e outros ajustam o arquivo de configuração do cliente BIND DNS para alternar entre clientes DNS e conversar com servidores DNS proxy diferentes durante a execução. Isso está fora do escopo desta resposta, especialmente porque há muitas respostas neste site da WWW que já lidam com os detalhes bizantinos que esse mecanismo envolve.

A maneira mais tradicional de fazer as coisas no mundo Unix é executar um servidor DNS proxy na própria máquina ou em uma LAN. Daí o que o manual do FreeBSD diz sobre os sistemas normalmente configurados, onde a ação padrão da biblioteca cliente DNS na ausência de resolv.conf corresponde ao que os administradores do sistema Unix normalmente têm, que é um servidor DNS proxy escutando em 127.0.0.1. (O manual do FreeBSD para resolv.conf é, na verdade, doco que também é originado do BIND do ISC, e pode também ser encontrado onde a biblioteca cliente DNS do BIND foi incorporada em outros lugares como a biblioteca GNU C .)

Leitura adicional

por 11.06.2018 / 14:28
6

Da muito melhor página de manual do FreeBSD, resolv.conf :

 The resolver configuration file contains information that is read by the
 resolver routines the first time they are invoked by a process.

 On a normally configured system this file should not be necessary.  The
 only name server to be queried will be on the local machine, the domain
 name is determined from the host name, and the domain search path is
 constructed from the domain name.
    
por 11.06.2018 / 12:42
1

O arquivo /etc/resolv.conf é lido pelas chamadas do sistema que executam a resolução do nome do host. Isso é principalmente getaddrinfo e o reprovado gethostbyname .

Se essas funções receberem um nome DNS, elas farão isso na seguinte ordem:

  1. Tente resolver o nome do host localmente, ou seja, lendo /etc/hosts .
  2. Se isso falhar, consulte os servidores DNS listados em /etc/resolv.conf .
  3. Se isso também falhar, o nome do host não poderá ser resolvido.

Desde que você mencionou dnsmasq : Este é um servidor DNS que é executado localmente. Portanto, em muitas distribuições Linux modernas, o /etc/resolv.conf aponta apenas para 127.0.0.1 (onde o dnsmasq local escuta). O dnsmasq é então configurado para encaminhar as consultas aos servidores DNS da Internet; O dnsmasq é configurado pelo Network Manager ao conectar-se à Internet.

    
por 12.06.2018 / 11:08