Como a pesquisa de DNS está configurada para o OSX Mountain Lion?

33

Se eu gato o meu resolv.conf, vejo esta mensagem:

#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#

Estou tentando adicionar uma entrada DNS. Editei o arquivo hosts e liberei o cache do DNS, mas o nome não será resolvido se eu usar host servername. Eu pensei que talvez hostnão estivesse configurado para olhar para o hostsarquivo. Como posso resolver minha nova entrada e o que o OSX está usando, se não resolv.conf?

Ben Flynn
fonte

Respostas:

17

A ferramenta host não resolve apenas os nomes (como em, usando o resolvedor de nomes do sistema), mas na verdade consulta os servidores DNS (como em, enviando pacotes para o udp / 53 e possivelmente o tcp / 53): ela não conhece nem usa o hostsarquivo local .

Se você quiser testar o resolvedor do sistema operacional (como em, gethostbyname () e funções similares da libc), tente executar o ping no nome que você adicionou /etc/hostse ele honrará o que você colocou nesse arquivo.

Além disso, como você já descobriu que a pesquisa de DNS no Mac OSX não usa /etc/resolv.conf, e a maneira correta de configurar quais servidores DNS são consultados é na networksetupferramenta de configuração da rede e / ou na linha de comando. Sinceramente, não sei se você pode configurar a ordem em que as fontes são tentadas, mas o comportamento padrão é tentar /etc/hostsprimeiro e os servidores DNS depois disso.

Luke404
fonte
1
Eu encontrei um invólucro de perl para getaddrinfo: search.cpan.org/~pevans/Socket-GetAddrInfo-0.22
Ben Flynn
26

Os resolvedores de DNS podem ser adicionados no OS X através do networksetupcomando:

sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

Insira o nome da conexão de rede conforme apropriado. Esses resolvedores aparecerão no resolv.conf conforme ele é gerado automaticamente, mas as edições diretas no resolv.conf não resultarão no uso desses resolvedores. Presumo que os resolvedores estejam armazenados em uma lista em algum lugar; Vou procurar e relatar de volta.

Editado para adicionar: Parece que o arquivo XML plist que armazena os servidores DNS é /Library/Preferences/SystemConfiguration/preferences.plist.

O arquivo host em / private / etc / hosts deve funcionar para forçar a resolução de nomes específicos (/ etc é um link simbólico para / private / etc). Você pode verificar sua sintaxe e se está editando o arquivo correto?

phoebus
fonte
Então, eu poderia usar este comando para adicionar o arquivo hosts?
Ben Flynn
você não pode, e você não precisa
Luke404
Não, se você deseja adicionar nomes ao arquivo hosts, basta adicioná-los diretamente. O arquivo de hosts é verificado primeiro na resolução de nomes, seguido pelo cache de resolução local e depois pelos servidores DNS configurados. O uso do comando "host" para testá-lo não verifica o arquivo de hosts locais. Uma maneira fácil de testar seria usar um utilitário de rede como ping.
Phoebus
1
Às vezes, a interface obtém nomes patetas, para obter o nome exato que você precisa, você também pode fazer. networksetup -listallnetworkservices Além disso, se isso contiver espaços, será necessário citar o nome inteiro com uma única citação, ou seja:sudo networksetup -setdnsservers 'white space' 8.8.8.8 8.8.4.4
Marcin
2
É possível configurar o resolvedor para usar uma porta diferente de 53?
Rune FS