Defina o servidor DNS no OS X mesmo quando sem conexão à Internet


17

Eu instalei, configurei o servidor DNS (instância local do Dnsmasq) que resolve como localhost como eu quero, tudo bem.

Quando fico offline, ele para de funcionar, porque o OS X esvazia o conteúdo do resolv.conf e ignora a tentativa de refletir as alterações nesse arquivo.

Alguma idéia de como configurar o DNS mesmo quando está offline?

Problema semelhante (não resolvido): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

A principal motivação é facilitar o desenvolvimento do aplicativo RoR, que usa subdomínios como chaves de conta. E você não pode usar 127.0.0.1 * .yourapp.local em / etc / hosts. Um cara registrou o domínio smackaho.st e srt DNS para ele como .smackaho.st em 127.0.0.1 mas ainda assim, você não pode usá-lo quando estiver trabalhando offline.

EDIT: tentou o comando scutil, mas parece que você pode alterar o DNS se estiver offline

NOTA: quando você tem todas as interfaces inativas, não é possível definir servidores DNS na Pref. painel.


Relacionado: o dnsmasq não funciona sem conexão com a Internet no OS X Yosemite no Superusuário (sem uma solução, mas com algumas referências).
Arjan

Respostas:


29

VEJA A ATUALIZAÇÃO ABAIXO!

Também gosto de usar o Dnsmasq na minha máquina local e também tive esse problema. Aqui está a solução:

De man 5 resolver:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/não está presente por padrão; você deve criar você mesmo.

Também na página do manual:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

Portanto, se você quiser que todas as consultas de DNS do domínio de nível superior devsejam roteadas para o servidor de nomes local, você deve:

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configdnão altera os arquivos /etc/resolver/, portanto, essa configuração persistirá através de alterações na rede e reinicializações.

ATUALIZAÇÃO 17 de julho de 2012

Infelizmente, no OS X Lion, o resolvedor superior (conforme mostrado scutil --dns) desaparece quando nenhuma interface está ativa:

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

Observe que o resolvedor nº 1 está vazio, mas a entrada do servidor de nomes derivado do / etc / resolver permanece.

Acontece que, como você pode especificar o domínio do resolvedor diretamente no arquivo / etc / resolver /, a especificação do domínio raiz da Internet especial . causa a criação de uma entrada global do resolvedor que se parece com:

resolver #8
  nameserver[0] : 127.0.0.1

Agora todas as consultas DNS são roteadas para o host local, mesmo quando offline.

Obviamente, você ainda precisará resolver os domínios escolhidos como 127.0.0.1 usando algo como a opção --address do dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

Em suma:

  • Defina todos os seus servidores DNS da interface de rede como 127.0.0.1:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Crie um arquivo / etc / resolver / o que for:
    nameserver 127.0.0.1
    domínio
  • Configure um servidor DNS local e seja feliz.

cf. http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c


É exatamente isso que o pow está usando ( pow.cx ).
Daeltar 5/09

mas, infelizmente, não funciona - github.com/37signals/pow/issues/104
daeltar

3
@ armas esta solução ainda funciona em yosemite? O dnsmasq estava funcionando bem para mim offline até que eu atualizei. Agora tudo que eu vejo quando eu corro scutil --dnsquando não estiver conectado à internet tudo que eu vejo é No DNS configuration available que eu segui as instruções acima, mas sem sorte
MatthewLee

1
@MatthewLee, sim, você está certo, parece que a única solução é adicionar entradas no arquivo hosts.
Lenciel

1
Alguém já encontrou uma solução para Yosemite?
jmagnusson

2

Por que não fazer as entradas em / etc / hosts? Estou com problemas para pensar em uma situação em que você realmente precisa estar executando um servidor DNS completo. Uso entradas de arquivos do host o tempo todo para realizar coisas como essas nos meus Macs.

O resolvedor no OS X funciona de maneira diferente da do Linux ou de outros Unixes. Provavelmente isso faz parte do que está causando dor. Por exemplo, ele tem preferências para qual método de resolução usar primeiro e armazena em cache os resultados de todas as consultas por um período de tempo.

Você adicionou o servidor DNS à interface no painel de preferências de rede? Isso deve garantir que o resolvedor use esse servidor para suas consultas, caso decida procurar uma entrada DNS.


Um motivo para usar um encaminhador de DNS em uma máquina cliente é manter uma grande lista negra de domínios de anúncios / malware sem sofrer a penalidade de desempenho do daemon do resolvedor, cumprimentando o arquivo de hosts agora inchado em cada solicitação. Não obstante os méritos dessa abordagem, o dnsmasq carrega / etc / hosts na memória, onde o tempo de pesquisa será minúsculo. Além disso, se você faz desenvolvimento na Web, isso evita o pequeno incômodo de adicionar domínios locais para todos os sites em que você está trabalhando.
guns

1

(respondendo b / c Ainda não posso comentar ...)

Como você está offline?

(melhor resposta que recebi agora)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

Portanto, você deve poder inserir algo na interface do usuário e ele deve permanecer. Eu já havia feito isso algumas vezes quando não gostava do servidor DNS que meu servidor DHCP local fornece.


Alterar a configuração do DNS em NetworkPreferences altera o arquivo /etc/resolv.conf.
Fabian Zeindl

0

O OSX possui o arquivo de configuração /etc/dhcp3/dhclient.conf que as configurações normais do cliente DHCP do Linux / UNIX possuem?

Nesse caso, ele deve ter uma linha que você pode descomentar

prepend domain-name-servers 127.0.0.1;

para que o cliente DHCP sempre adicione essa linha ao seu resolv.conf


A adição ao resolv.conf não está ajudando no OS X. O conteúdo do resolv.conf é gerado e é um link simbólico em /var/run/resolv.conf e mesmo quando eu altero /var/run/resolv.conf, ele não reflete as alterações .
daeltar 10/06/09

0

Tente adicionar um segundo serviço Ethernet configurado com um endereço estático e 127.0.0.1 como seu servidor DNS. Ou adicione um local de rede que defina seu servidor DNS como 127.0.0.1. Ambas as alterações seriam feitas em "Preferências do sistema" no painel "Rede".


-2

Pode ajudar apenas colocar

127.0.0.1       localhost

no / etc / hosts, portanto, não é necessário resolver para encontrar o host local.


1
Eu preciso dele para subdomínios, então isso não é não.
daeltar 10/06/09
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.