Dnsmasq aponta que subdomínios inexistentes apontam para IP local

1

Há um subdomínio remoto específico mymachine.home.com cujo IP muda o tempo todo em que preciso atualizar o DNSMasq para que ele seja resolvido corretamente.

Mas eu testei o ping de xxxxxx.home.com , que não existe, e tudo parece querer apontar para o meu proxy reverso NginX. (Muitas das minhas entradas apontam para lá.)

Como posso impedir que o DNSMasq resolva subdomínios inexistentes para um IP local? (É sempre o mesmo IP)

OR

Como posso dizer ao DNSMasq para sempre usar o DNS externo para uma entrada específica?

Esta é a minha configuração de instalação.

#DNS_Config
#Dont use external file for custom dns
no-hosts
#Use this file for DNS nameservers (contains googles DNS)
resolv-file=/etc/resolv.dnsmasq.conf

##CUSTOM_DNS
#PING home.com = 192.168.1.210
address=/home.com/192.168.1.210
##DHCP##

##DHCP_Config
#Listen only on eth0
interface=eth0
#DHCP Range 192.168.1.2-127 (12hr lease time)
dhcp-range=192.168.1.2,192.168.1.127,12h
#RESERVE DNSMasq SERVER IP
dhcp-host=00:0c:29:c2:56:bf,192.168.1.149
#Change DEFAULT GATEWAY (Default is same IP as DNSMasq Server)
dhcp-option=option:router,192.168.1.1


##STATIC_DHCP
#STATIC IP to 2 MAC Address that WILL NOT be used simultaneously [IE: Laptop with WiFi + LAN]
dhcp-host=00:00:00:00:00:00,00:00:00:00:00:00,192.168.1.210
#Assign STATIC IP by MAC
dhcp-host=00:00:00:00:00:00,192.168.1.211
    
por FreeSoftwareServers 14.07.2016 / 02:50

3 respostas

3

O motivo mais comum pelo qual você obtém um endereço IP falso para um domínio inexistente é que seu ISP converte respostas negativas no endereço de seus servidores de anúncios, para exibir mais anúncios quando você digita erros no endereço de um site. Esta é definitivamente uma prática obscura, mas infelizmente alguns ISPs fazem isso.

Você pode geralmente contrabalançar isso usando diferentes servidores DNS upstream, como OpenDNS ( server=208.67.222.222 e server=208.67.220.220 ) ou Google ( server=8.8.8.8 e server=8.8.4.4 ). Se você precisar dos servidores do seu provedor para seus próprios serviços ao cliente, poderá usá-los somente em um domínio específico ( server=/myisp.com/203.0.113.1 ).

Dito isto, no seu caso, o problema é que sua configuração não faz o que você quer fazer.

How can I stop DNSMasq from resolving non-existent subdomains to a local IP.

Por não declarar o domínio como existente. O Dnsmasq não substitui um endereço IP por domínios inexistentes.

How can I tell DNSMasq to always use external DNS for a specific entry.

Por não declarar um valor para esse nome de host ou um caractere curinga que inclua esse nome de host.

O problema na sua configuração é a linha

address=/home.com/192.168.1.210

Este é um curinga: declara que 192.168.1.210 é o endereço de home.com e todos os nomes de host nesse domínio. Você não quer este curinga, então remova-o.

Em vez disso, declare home.com e qualquer domínio individual de home.com como nomes de host , não como curingas, listando-os em /etc/hosts . Remova a linha no-hosts - você quer declarar hosts específicos, então você precisa disso! Ou, se você preferir não usar /etc/hosts , mantenha esta linha e adicione uma linha apontando para um arquivo diferente declarado com addn-hosts=/path/to/hosts-file . Ou, se você quiser manter tudo dentro de dnsmasq.conf , substitua essa linha por host-record=home.com,192.168.1.210

Se você deseja ter um caractere curinga com exceções (retorne 192.168.1.210 para todo xxx.home.com , exceto mymachine.home.com , ou sempre consulte os servidores upstream e substitua 192.168.1.210 somente por respostas negativas), não acho O dnsmasq pode fazer isso.

    
por 17.07.2016 / 22:14
1

Só para expandir na resposta correta de Gilles:

De TheKelleys.org DNSMasq Man-Page

-A, --address=/<domain>/[domain/][<ipaddr>]

Especifique um endereço IP para retornar para qualquer host nos domínios especificados. As consultas nos domínios nunca são encaminhadas e sempre são respondidas com o endereço IP especificado, que pode ser IPv4 ou IPv6. Para fornecer endereços IPv4 e IPv6 para um domínio, use sinalizadores -A repetidos. Observe que / etc / hosts e concessões DHCP substituem isso por nomes individuais. Um uso comum disso é redirecionar todo o domínio doubleclick.net para algum servidor da Web local amigável para evitar anúncios em banner. A especificação de domínio funciona da mesma forma que para --server, com o recurso adicional que / # / corresponde a qualquer domínio. Assim - endereço = / # / 1.2.3.4 sempre retornará 1.2.3.4 para qualquer consulta não respondida de / etc / hosts ou DHCP e não enviada para um servidor de nomes upstream por um servidor mais específico directiva. Quanto ao --server, um ou mais domínios sem endereço retornam uma resposta não no domínio, portanto --endereço = / example.com / é equivalente a --server = / example.com / e retorna NXDOMAIN por exemplo. com e todos os seus subdomínios.

--host-record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]

Adicione registros A, AAAA e PTR ao DNS. Isso adiciona um ou mais nomes ao DNS com registros IPv4 (A) e IPv6 (AAAA) associados. Um nome pode aparecer em mais de um registro de host e, portanto, ser atribuído a mais de um endereço. Apenas o primeiro endereço cria um registro PTR vinculando o endereço ao nome. Essa é a mesma regra usada para ler arquivos hosts. As opções de registro de host são consideradas lidas antes dos arquivos do host, portanto, um nome que aparece lá inibe a criação do registro PTR se ele aparecer no arquivo hosts também. Ao contrário dos arquivos hosts, os nomes não são expandidos, mesmo quando os hosts de expansão estão em vigor. Nomes curtos e longos podem aparecer no mesmo registro de host, por exemplo. --host-record = laptop, laptop.thekelleys.org, 192.168.0.1,1234 :: 100 Se o time-to-live é dado, ele substitui o padrão, que é zero ou o valor de - local-ttl. O valor é um inteiro positivo e fornece o tempo de vida em segundos.

    
por 19.07.2016 / 17:14
0

Eu tinha uma entrada para o meu domínio que era

address=/domain.com/192.168.1.7 (meu proxy inverso NginX)

Isso estava fazendo com que todos os subdomínios inexistentes, como o acoimasdin.domain.com, fossem resolvidos para 192.169.1.7.

Como já tenho tudo configurado para encaminhar domain.com para www.domain.com no apache, fiz a entrada

address=/www.domain.com/192.168.1.7

Agora, meu DNS de subdomínio remoto é encaminhado para o DNS do Google como deveria, e o DNS inexistente retorna como "host não existe", exatamente o que eu queria!

Em essência, não posso ter uma entrada de nível inferior / superior (não tenho certeza do termo correto) que seja domain.com ou todas as entradas DNS inexistentes usarão essa entrada de DNS.

    
por 17.07.2016 / 20:12