No OS X, como posso inserir 127.0.0.1 na lista de servidores DNS obtida por meio do DHCP?

2

Estou tentando usar o dnsmasq para resolver determinados domínios conhecidos usando sua configuração, mas deixo o restante das solicitações passar para o servidor DNS normal atribuído pelo DHCP. Eu não posso pegar isto para trabalhar. Quando eu configuro o DNS para 127.0.0.1 através do painel de rede, tenho que codificar os servidores DNS atribuídos pelo DHCP para a configuração do dnsmasq. No entanto, quando estou em uma rede diferente, por exemplo no trabalho, em um cliente, esses endereços são diferentes. Tenho que reconfigurar sempre que mudar de rede.

Como posso configurar o OS X para usar 127.0.0.1 E qualquer servidor DNS atribuído por meio do DHCP?

Se isso não for possível, como posso dizer ao dnsmasq para obter servidores DNS upstream através do DHCP?

Aqui está o que eu sei até agora.

  1. /etc/resolv.conf no OS X é dinâmico, ele muda de acordo com o que você define nas preferências de Rede ou usando o DHCP. Ele muda sempre que você se reconecta. É até excluído quando você fica offline. Então, assim que eu uso o 127.0.0.1 isso se reflete no /etc/resolv.conf e não sei se existe algum lugar onde os endereços DNS anteriormente designados pelo DHCP possam ser encontrados.

  2. O OS X não usa /etc/resolv.conf.head.

  3. O OS X não usa /etc/dhclient.conf, onde você pode colocar os servidores DNS na lista fornecida pelo DHCP.

  4. /etc/resolver/tld.conf não é uma solução, porque isso tenta usar um servidor DNS baseado na correspondência de um tld (é bom se você usa .dev ou algo assim).

Editar: Há uma captura de tela da configuração de DNS da rede aqui que se parece com o que eu quero, mas tenho não faço ideia de como o autor desse artigo conseguiu.

    
por Michiel van Oosterhout 24.11.2013 / 13:20

2 respostas

5

Primeiro, usar o 127.0.0.1 E o servidor DNS atribuído pelo DHCP não funcionará. Se o OS X tiver vários servidores DNS configurados, ele não os experimentará em sequência, fazendo algo mais como round robin - enviando solicitações diferentes para diferentes servidores, mais ou menos aleatoriamente. Resultado líquido: algumas das pesquisas que você queria manipuladas pelo dnsmasq irão para o servidor regular (e obterão o resultado incorreto), e algumas que você queria que fossem enviadas para o servidor regular irão para o dnsmasq (e falharão). Não é bom.

É possível dizer ao dnsmasq para usar o servidor DNS fornecido pelo DHCP, mas não vejo uma maneira limpa de fazê-lo. Em vez disso, o que eu recomendo é usar uma configuração de DNS que substitua a configuração DNS comum para os domínios que você deseja manipular especialmente. Existem duas opções para isso:

  1. Pule o dnsmasq e coloque os hosts que você quer que sejam especialmente tratados em / etc / hosts (veja este artigo , por exemplo).
  2. Use / etc / resolver / files para direcionar consultas para domínios específicos para 127.0.0.1, substituindo o servidor DNS geral (fornecido pelo DHCP) (consulte página do manual para / etc / resolver e este artigo sobre Mac OS X Hints . Essencialmente, você cria a pasta / etc / resolver e coloca nele um arquivo para cada domínio que deseja substituir. Por exemplo, / etc / resolver / somedomain. com conteria "servidor de nomes 127.0.0.1".
por 24.11.2013 / 23:32
1

Usando a resposta de Gordon como ponto de partida, consegui resolver isso para meus propósitos, que é criar nomes de host para projetos de desenvolvimento da web. Isso foi testado no OS X 10.9 (Mavericks).

Eu uso um sufixo .dev para meus sites de teste (por exemplo, project1.dev , project2.dev ). Essa abordagem permite criar arbitrariamente muitos .dev domains, mas não é necessário criar um arquivo para cada um em /etc/resolver . Essa é a pequena melhoria em relação à resposta de Gordon; você só precisa criar um arquivo uma vez por sufixo.

Isso funciona se estou na minha rede de trabalho, rede doméstica ou VPN.

  1. No painel de preferências Rede, vá para Avançado, DNS e exclua todos os servidores DNS personalizados adicionados, para usar apenas os valores atribuídos pelo DHCP.
  2. sudo mkdir /etc/resolver/
  3. sudo sh -c 'echo nameserver 127.0.0.1 > /etc/resolver/dev'
  4. Se você ainda não o fez, adicione o seguinte a /usr/local/etc/dnsmasq.conf (assumindo que você instalou o dnsmasq com homebrew; sua localização pode ser diferente de outra forma):

    address=/dev/127.0.0.1
    

Se você usar sufixos adicionais (por exemplo, project1.loc ), repita as etapas 3 e 4, substituindo o sufixo por dev em ambas as etapas.

Tentar resolver o nome do host com dig , host ou nslookup falhará, mas o nome do host será resolvido em um navegador da web ou, por exemplo, curl . curl http://project1.dev funciona como esperado.

    
por 13.12.2013 / 17:52