DD-WRT: dores de cabeça dnsmasq com hosts estáticos

6

Estou usando o dd-wrt (r23503, para o registro) no meu novo roteador Asus RT-AC56U. Infelizmente, a configuração do dnsmasq não está me dando nada além de dores de cabeça. Aqui está o que eu quero :

  • As consultas DNS da LAN / WLAN para hosts na LAN / WLAN devem ser respondidas para nomes curtos e FQDNs.
  • Como alguns dispositivos são portáteis (como meu telefone), eu preciso de host.mydyndomain.net para resolver um IP de LAN quando conectado à LAN e ao IP externo quando consultado de fora da LAN.

Mas aqui está o que eu recebo atualmente:

  • As consultas para hosts alugados por DHCP estão sendo retornadas corretamente (a opção "DNS local" do dd-wrt para dnsmasq).
  • As consultas a qualquer host não existente aleatório retornam incorretamente o endereço IP da WAN externa. Portanto, "nslookup foobarbaz" fornece um resultado quando deve retornar um erro.

Quanto aos meus hosts com IPs estáticos, ainda não encontrei uma solução adequada. Eu li através da página man do dnsmasq e pelo que eu posso dizer, a escolha correta é a opção "host-record".

A configuração relacionada ao dnsmasq em dd-wrt (sob a aba Serviços) é:
Seção "Servidor DHCP":
Domínio usado: WAN
Domínio da LAN: [em branco]
Opções adicionais do DHCPd: [em branco]
Uma concessão estática definida.

"DNSMasq" seção:
DNSMasq: ativado
DNS local: ativado
Não há religação de DNS: ativado
Opções adicionais de DNSMasq:
host-record = myhost, myhost.mydyndomain.net, 192.168.1.1
[várias outras entradas de registro de host para os outros hosts com IPs de LAN estáticos]

Infelizmente, colocar essas linhas de registro de host na caixa de opções adicionais parece quebrar completamente o dnsmasq e, em seguida, nada pode se conectar à LAN / WLAN via DHCP. Depois que eu esvaziar o conteúdo da caixa, o DHCP começa a funcionar novamente.

Meu arquivo dnsmasq.conf é o seguinte:

interface=br0
resolv-file=/tmp/resolv.dnsmasq
all-servers
domain=mydyndomain.net
dhcp-leasefile=/tmp/dnsmasq.leases
dhcp-lease-max=51
dhcp-option=lan,3,192.168.1.1
dhcp-authoritative
dhcp-range=lan,192.168.1.100,192.168.1.149,255.255.255.0,1440m
dhcp-host=88:53:2E:9B:3E:80,Redtail,192.168.1.5,1440m
stop-dns-rebind

O arquivo /etc/resolv.conf é:

search ph.cox.net
nameserver 192.168.1.1

E o arquivo /tmp/resolv.dnsmasq é:

nameserver 208.67.222.222
nameserver 208.67.220.220
nameserver 68.105.28.13

Outro problema menor, mas não relacionado: Na página "configuração básica" do dd-wrt na seção de configuração do DHCP eu digitei os IPs para os servidores do OpenDNS (como você pode ver acima). Eu prefiro que apenas use esses dois servidores de nomes, mas o servidor de nomes é automaticamente anexado como o terceiro servidor de nomes. Existe uma maneira de informar ao DD-wrt para ignorar as informações de DNS recebidas ao adquirir uma concessão de DHCP do modem / ISP?

Então ... o que estou fazendo de errado? Claramente, o dnsmasq não está satisfeito com as entradas do registro do host, mas qual é a opção correta a ser usada? Estou colocando essas informações nesse local em vez de / etc / hosts, pois o último é um arquivo gerado e não é facilmente modificado pela interface da web. É claro que posso editá-lo facilmente conectando via SSH, mas minhas alterações não serão persistentes.

    
por JetpackJohn 15.02.2014 / 07:09

1 resposta

8

Tenho bastante experiência com o dnsmasq no dd-wrt e especialmente próximo da data deste comentário. Posso compartilhar com você minha solução de trabalho para cada uma das respostas para cada requisito. Eu resistirei adicionando mais.

Cada opção no seu /tmp/dnsmasq.conf postado acima do seu ativo a> vem diretamente das opções de configuração que você selecionou como descrito

Exceto

para a sua entrada hostname = que você não deve usar imo. Você deseja

Domínio usado: [WAN/LAN] não Domínio usado [WAN] . < br>

Isso permitirá que dispositivos com fio (LAN) e sem fio (WAN) trabalhem em sua rede.

 Escolha também um Domínio Lan: [dom ] ou qualquer palavra curta além de local . Alguns usam lan e alguns usam localdomain . Isso é necessário para os seus requisitos e fornecerá um domínio interno interno do tipo faux anchor que somente você e usuários internos verão / usarão. O valor escolhido será colocado em search dom resolver de cada cliente DHCP. Eu vou usar dom pelo resto, mas você pode fazer o que quiser.

Vou começar com os dois primeiros requisitos.

  1. As consultas DNS da LAN / WLAN para hosts na LAN / WLAN devem ser respondidas para nomes curtos e FQDNs.

  2. Como alguns dos dispositivos são portáteis (como meu telefone), eu preciso de host.mydyndomain.net para resolver um IP de LAN quando conectado à LAN e ao IP externo quando consultado de fora da LAN.

Para hosts que possuem um ip interno versus externo diferente, mas o mesmo nome nos dois lados do dd-wrt, você precisa ter:

  • Adicione uma linha por host resolvível no seu Static Leases logo abaixo da sua área de texto vazia Additional DHCP Options corretamente . Observe o nome interno web.dom ou apenas web para conveniência na lan.

Nota:

 [Static Leases++++++++++++++++++++++++++++++++++++++++++++++++++++++++]    
  [MAC Address]       [Host Name   ][IP Address    ][Client Lease Time]
  [00:19:B9:5B:2B:A5] [web         ][192.168.2.5   ][             1440]

Notas: Eu pensei que isso era usado apenas para udhcpcd , mas isso também é usado pelo dnsmasq e gravará o% realdnsmasq.conf com dhcp-host= linhas corretas e coloca uma entrada 'ip host.dom' para cada entrada / tmp / hosts usada pelo DNSMasq para fazer toda a resolução de nome local.

Eu tenho um script e arquivo de texto para criar essas entradas, pois a interface da Web é um pouco trabalhosa. Veja o que o script faz em poucas palavras.

macToHostNames.txt:
# comment lines ignored unless embedded set:tag values like set:kids 
# note the ip is just the HOST portion of the subnet, eg: 192.168.1.32 -> 1.32
# host      id       mac address        cnames/aliases for same box
kidhost1    1.32     00:MA:CA:DD:E5     alias1 nabi2 # in-line comment set:kid 
web         1.5      00:AM:AC:AD:ES     www homeweb  # web server with aliases
EOF
generate_Files_Then_Send_Then_Activate_If_Tests_Are_Ok.sh < macToHostNames.txt
# this script file creates 3 files which are sent along with a test script:
dnsmasq_options.new # nvram set dnsmasq_options="$(cat dnsmasq_options.new)"
static_leases.new   # nvram set static_leases="$(cat static_leases.new)"
static_leasenum.new # nvram set static_leasenum="$(cat static_leasnum.new)"
testDnsMasqOpts.sh  # scp -p *.new test*.sh admin@gw:/tmp && ssh admin@gw "/tmp/test*.sh" 
  • adicione address=/web.dynip.org/<ip> lines na caixa Opções de DNSMasq address = / web.mydyndomain.net / 192.168.2.5 # adicione quantos deles forem necessários

  • finalmente, você precisa atualizar seu DDNS config para fornecer o serviço DDNS que mapeia seu endereço IP dinâmico fornecido pelo ISP externo para resolver como web.mydyndomain.net . Eu presumo que você tenha configurado essa parte com sucesso.

Com essa configuração você pode ping web ou ping web.dom ou ping web.mydyndomain.net retornará 192.168.2.5 enquanto estiver dentro do firewall e acessa de fora pelo nome web.mydyndomain.org ainda funciona.

Os outros requisitos são atendidos pela sua outra configuração, mas você pode adicionar com segurança essas linhas, já que testei MUITOS tempos (ao ponto de escrever um script para executar uma linha dnsmasq de cada vez e mostrar a linha ofensiva desde TODOS os DNS) o logging é deixado de fora por espaço na minha última compilação do dnsmasq e tudo em que você pode confiar é o status de retorno do dnsmasq: $?).

Para os últimos requisitos, mostrarei as linhas da minha configuração com comentários (note que você pode colocar comentários na caixa Opções Adicionais do DNSMasq).

  1. As consultas para hosts alugados por DHCP estão sendo retornadas corretamente (a opção "DNS local" do dd-wrt para dnsmasq).
  2. As consultas a qualquer host não existente aleatório retornam incorretamente o endereço IP da WAN externa. Portanto, "nslookup foobarbaz" fornece um resultado quando deve retornar um erro.
  domain-needed    # dont fwd to ext DNS names with no domain
  address=/web.mydnsdomain.org/192.168.2.5 # resolve to this internally!
  expand-hosts     # add .dom to host names without a domain 
  local=/dom/      # map all host.dom request to *this* dns
  bogus-priv       # reject local lookups not in hosts
  localise-queries # for local servers

Eu colocarei alguns brindes não relacionados de valor questionável (e para backup externo).

 no-ping          # some swear by this one to get DNSMasq to work!
 filterwin2k      # junk from MSFT boxen (remove this if ldap SRV used)
 cache-size=3000  # fast local DNS lookups 
 clear-on-reload  # clear ifr.c changes and sig received 

Para limitar o número de servidores DNS, você pode fazer com o dhcp-options = 6 da seguinte forma:

dhcp-options=lan,6,8.8.8.8 # this will send only one nameserver entry for all hosts

    
por 15.10.2014 / 05:02