Usando o dnsmasq para endereçar máquinas pelo nome e resolver hostnames externos

2

Estou tendo alguns problemas com a configuração do dnsmasq. Tudo o que eu quero fazer é resolver certos nomes de host para determinados endereços IP para qualquer máquina na minha rede. Mais especificamente, estou tentando permitir que todos os dispositivos da minha rede possam acessar algumas das máquinas da minha rede usando apenas um nome de host especificado. Eu acho que devo estar perdendo algo importante, porque mesmo que eu tenha funcionado uma vez, depois que meu servidor DNS foi reiniciado, ele parou de encaminhar solicitações para servidores fora da LAN.

Aqui está minha configuração: (todos os endereços IP têm apenas o último dígito do endereço IPv4)

  • Apple Airport Extreme configurado no modo DHCP e NAT (não pode ter apenas NAT neste roteador, portanto, para obter NAT, eu tenho o intervalo DHCP definido como 253-254 e reservei alguns endereços mac falsos para aqueles IPs). Na minha rede, isso tem o endereço IP de 1

  • PI de framboesa executando raspbian e dnsmasq. Isso tem o endereço IP 4 e tem o nome do host 'pi'

  • Uma máquina chamada 'torre' às 3

O Dnsmasq está configurado para ser um servidor DNS e DHCP. Todas as máquinas que se conectam à rede obtêm um endereço IP no intervalo correto que eu especifiquei no dnsmasq e têm o pi do raspberry (IP 4) designado automaticamente como o servidor DNS. O Dnsmasq também está configurado para encaminhar quaisquer solicitações que não puder encontrar para outros servidores de DNS públicos. Aqui está a totalidade dos meus servidores de DNS com endereços IP completos editados:

/etc/dnsmasq.conf:

# Dnsmasq.conf for raspberry pi    
# Full examples found here:  
# http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq.conf.example  

# Set up your local domain here    
domain=hyrule.home

# Example: The option local=/localnet/ ensures that any domain name query which ends in .localnet will be answered if possible from /etc/hosts or DHCP, but never sent to an upstream server
# don't forward requests (andrewoberstar.com/blog/2012/12/30/raspberry-pi-as-server-dns-and-dhcp)
local=/hyrule.home/

#resolv-file=/etc/resolv.dnsmasq  
resolv-file=/etc/resolv.conf  
#min-port=4096   

## DNS SERVERS
#openNic california
server=173.230.156.28

#openNic Washington
server=23.226.230.72

#google public DNS
server=8.8.8.8
server=8.8.4.4

# Max cache size dnsmasq can give us
cache-size=10000

# Use the hosts file on this machine
expand-hosts

# ethernet - ip address mappings from /etc/ethers file
read-ethers

# Below are settings for dhcp. 
dhcp-range=XXX.XXX.X.10,XXX.XXX.X.200,12h
dhcp-option=3,XXX.XXX.X.1
dhcp-authoritative
log-queries

/etc/resolv.conf:

domain hyrule.home 
#search hyrule.home
#nameserver 8.8.8.8

/ etc / hosts

127.0.0.1   localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0     ip6-localnet
ff00::0     ip6-mcastprefix
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters

127.0.1.1   raspberrypi
XXX.XXX.X.3 tower
XXX.XXX.X.4 pi

E o arquivo / etc / ethers contém os endereços mac das interfaces ethernet das respectivas máquinas

Eu posso ver que o dnsmasq está registrando solicitações, e tudo parece normal, todos os pedidos parecem

Nov  2 17:29:21 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com.hsd1.ca.comcast.net from 10.0.1.1
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 173.230.156.28
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 23.226.230.72
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 8.8.8.8
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[A] north-america.pool.ntp.org from 10.0.1.59
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 173.230.156.28
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[TXT] push.apple.com from 10.0.1.3
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 173.230.156.28
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com.hyrule.home from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: config time.apple.com.hyrule.home is NXDOMAIN-IPv6
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[A] time.apple.com.hyrule.home from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: config time.apple.com.hyrule.home is NXDOMAIN-IPv4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 173.230.156.28

EDITAR: Eu decidi apenas redefinir o pi para o raspbian padrão porque eu estava fazendo muita experimentação nele, então eu queria remover quaisquer outras variáveis. Eu fui em frente e carreguei minibiano e instalei o dnsmasq. Eu editei o meu resolv.conf para ficar assim (graças ao @Chuck Kollars por apontar o que aquele arquivo estava realmente fazendo):

domain hyrule.home
search hyrule.home
nameserver XXX.XXX.X.4

e só configuro meu dnsmasq.conf para consultar esses servidores de nomes (lendo meu arquivo de hosts por padrão):

server=/localnet/192.168.0.1 <--- still have the feeling this isn't right
## DNS SERVERS
#openNic california
server=173.230.156.28

#openNic Washington
server=23.226.230.72

Em meu arquivo de hosts, eu também tinha os aliases configurados como @Chuck Kollars sugeridos, com um formato de

<ipv4>   <subdomain>  <fqdn>

Neste ponto, eu ainda estava tendo problemas, então notei que sempre que eu pingava algo como "tower", o dnsmasq tentava resolver "tower.hsdn.comcast.com" ou algo parecido, encaminhá-lo para o servidores de nomes externos porque não foram resolvidos internamente. A parte comcast parecia familiar, por isso, no meu utilitário aeroportuário (5.6.1) , na Internet tab, em TCP / IP, esse mesmo endereço foi preenchido no campo Domain Name (fantasma, como se fosse herdado), então eu mudei isso para também ser hyrule.home, e tudo funcionou como esperado!

Ainda estou confuso sobre por que esse nome de domínio tinha que estar no roteador e porque não estava sendo respeitado pelo arquivo resolv.conf ...

    
por BrDaHa 03.11.2014 / 04:00

1 resposta

3

Embora eu não consiga descobrir todos os detalhes de por que o seu sistema se comporta mal, eu tenho as seguintes sugestões de coisas que você poderia olhar com lucro:

1) O Dnsmasq usa /etc/resolv.conf apenas para consultas originadas na mesma máquina - consultas de todas as outras máquinas vão diretamente para o Dnsmasq. Portanto, o /etc/resolv.conf normalmente contém um ponteiro para o servidor de nomes 127.0.0.1 para obter solicitações originadas de aplicativos nessa máquina para o Dnsmasq. De fato, o /etc/resolv.conf pode até ser sobrescrito quando o Dnsmasq é iniciado. Tenha muito cuidado ao colocar instruções operacionais em /etc/resolv.conf; em particular, eu não acho que "domain hyrule.home" esteja fazendo o que você acha que está fazendo para alguns de seus hosts.

2) Outra maneira de tratar nomes curtos locais (do jeito que eu faço) é explicitamente colocar ambos o nome curto e o nome de cada máquina local em / etc / hosts (ao invés de confiar em qualquer mecanismo de software), algo como isto:

XXX.XXX.X.1   router router.hynet.home
XXX.XXX.X.3   tower tower.hynet.home
XXX.XXX.X.4   pi pi.hynet.home

3) Eu não estou muito certo do que é a definição que significa "raspberrypi" para "localhost". Eu teria medo de tal equivalência, às vezes gerando a resposta errada para o sistema errado na hora errada, resultando em algumas consultas no arquivo redondo, em vez de onde elas deveriam. Meu sistema funciona sem essa definição.

4) Para maior clareza em seus vários logs, você pode querer também uma definição de "localnet" (análogo à sua definição para "ip6-localnet"). Você esperaria que isso acontecesse em / etc / networks ... e, de fato, isso pode funcionar. Mas o próprio Dnsmasq só olha para / etc / hosts, então você pode ter que colocar a definição em / etc / hosts mesmo que seja para uma rede, algo como isto:

XXX.XXX.X.0 localnet hynet.home
    
por 16.12.2014 / 15:42