Posso obter o dnsmasq para eliminar / rejeitar / redirecionar qualquer consulta de endereço, exceto uma?

1

Estou configurando um sistema de pesquisa local. O laptop linux executará o limesurvey (em uma pilha LAMP típica) e será acessível por 5 tablets fornecidos aos participantes da conferência. Os tablets não são um problema, pois seriam pré-configurados com pesquisa carregada. No entanto, gostaria de permitir que os participantes da conferência também acessassem o link de pesquisa de seus telefones celulares . O que eu planejo fazer é isto:

  1. O laptop serve como ponto de acesso. O DNSMASQ fornece IPs depois que eles ingressam no AP. Eu daria a eles um endereço local simples (por exemplo, link ) para acessar a interface de pesquisa e isso deveria ser possível porque o DNSMASQ funcionará como seu servidor DNS - assim será sabe como resolver a cal.

  2. Gostaria de lidar rapidamente com erros de clientes - por exemplo, eles, depois de entrar no AP, digitam um endereço diferente por acidente (ou apenas querem ir na internet, por exemplo, para o google.com) - Eu gostaria que o DNSMASQ imediatamente retornasse um erro, de preferência com um redirecionamento para uma página de erro personalizada, fornecendo-lhes o link correto.

  3. Editar: Eu olhei para isso; provavelmente terei que fazer uma solução de tipo portal cativo . Eu ainda gostaria da maneira mais simples possível de exibir a página inicial - com pesquisa (s) listada (s) e derrubar / redirecionar todas as outras solicitações para a página inicial. Eu não preciso de autenticação, pois nenhuma Internet será oferecida através dessa conexão; a autenticação seria apenas cliques extras nesse caso, mas quero que as pessoas tenham acesso à pesquisa sem problemas.

Isso seria possível? Haveria melhores maneiras de executar este plano?

    
por r0berts 26.05.2018 / 08:21

2 respostas

2

Claro! Redirecionar todas as resoluções de nomes para um endereço com o comando:

address=/#/10.0.0.101

Essa é a entrada necessária no arquivo /etc/dnsmasq.conf . Qual eu recomendo usar como isso irá impor tal configuração se o servidor for reinicializar por qualquer motivo.

Na linha de comando, a opção é chamada:

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

Uma cópia do manual do dnsmasq para address= está abaixo.

No entanto, mesmo que pareça razoável definir -i vlan (para a interface esperada a ser usada) e -a 10.6.66.1 (para o endereço no qual se espera que o dnsmasq escute a resolução de DNS). Não faça isso!.

Permita que o dnsmasq associe no modo curinga a todo e qualquer endereço do servidor na porta 53. Dessa forma, qualquer solicitação ao servidor sobre a resolução do DNS será respondida pelo dnsmasq.

The three modes are "wildcard", "bind-interfaces" and "bind-dynamic".
In "wildcard" mode, dnsmasq binds the wildcard IP address (0.0.0.0 or ::). This allows it to receive all the packets sent to the server on the relevant port. Access control (--interface, --except-interface, --listen-address, etc) is implemented by dnsmasq: it queries the kernel to determine the interface on which a packet was received and the address to which it was sent, and applies the configured rules. Wildcard mode is the default if neither of the other modes are specified.

Use a porta 53 (como os clientes externos esperam por padrão):

port=53   # It is set to be 53 by default, not really needed.

Desative (e desative) os dois avahi-dns e systemd.resolved

Certifique-se de que nenhum outro programa / serviço esteja escutando nas portas 53 ou 5353.

$ netstat -pantu | grep ':53'

Defina também essas opções para impor que nomes como mylocaldomain (sem pontos) sejam resolvidos com um erro (NXDOMAIN) pelo resolvedor DNS dnsmasq e que algumas resoluções de nomes não sejam encaminhadas para nenhum outro servidor:

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv

Certifique-se de que nenhum servidor definido em /etc/resolv.conf não seja usado:

no-resolv
no-poll

Todos os itens acima configuram o lado DNS do dnsmasq para resolver todos os domínios em um endereço simples. Ainda é possível adicionar qualquer outro nome para resolver outros endereços necessários, incluindo-o no arquivo /etc/hosts , como

127.0.0.1
10.0.3.101   linum

Este último endereço deve ser o endereço para o servidor web da pesquisa.
O endereço inicial acima (10.0.0.101) deve ser a página de erro que explica o que fazer para acessar a página de pesquisa.

Mas isso não é tudo. Você também precisa configurar o servidor DHCP para fornecer uma opção de servidor de nomes com o endereço do resolvedor DNS dnsmasq (não use a opção número 5, ela está obsoleta (e deveria ter sido por mais de 20 anos)):

dhcp-option=6,10.0.0.101

Além de todas as outras configurações necessárias para a parte DHCP do dnsmasq.

Isso permitirá que um computador (tablet ou telefone também) obtenha um endereço DHCP fornecido com um servidor DNS definido. Todos os computadores compatíveis com o protocolo seguirão essas opções configuradas e não poderão resolver nenhum outro endereço.

No entanto, também é possível que um dispositivo tente acessar diretamente um número IP (sem resolução de DNS solicitada). Isso deve ser evitado usando a configuração do IPFilter no roteador que atende à rede local.

Em man dnsmasq :

-A, --address=/[/...]/[]
Specify an IP address to return for any host in the given domains. Queries in the domains are never forwarded and always replied to with the specified IP address which may be IPv4 or IPv6. To give both IPv4 and IPv6 addresses for a domain, use repeated -A flags. To include multiple IP addresses for a single query, use --addn- hosts= instead. Note that /etc/hosts and DHCP leases override this for individual names. A common use of this is to redirect the entire doubleclick.net domain to some friendly local web server to avoid banner ads. The domain specification works in the same was as for --server, with the additional facility that /#/ matches any domain. Thus --address=/#/1.2.3.4 will always return 1.2.3.4 for any query not answered from /etc/hosts or DHCP and not sent to an upstream nameserver by a more specific --server directive. As for --server, one or more domains with no address returns a no-such-domain answer, so --address=/example.com/ is equivalent to --server=/example.com/ and returns NXDOMAIN for example.com and all its subdomains.

Leia também:

Adicionar forjado Entradas de DNS
Configuração de vinculação para resolver todas as consultas para apenas um endereço

    
por 31.05.2018 / 13:59
2

Primeiro, eu me concentraria na solução trabalhando normalmente com o cliente escrevendo uma URL de nome simples como o link para facilitar a depuração.

Como você pode não precisar fornecer acesso à Internet, talvez não seja necessário implementar totalmente um portal cativo, pois você eventualmente responderá a qualquer resposta DNS que você fornecer mostrará a sua página, com dnsmasq.

Portanto, a maneira mais fácil é em seu servidor da Web, para criar o vhost pretendido e o soquete de escuta padrão (*) redirecionando qualquer solicitação para esse vhost.

No entanto, e é grande, no entanto, os dispositivos Android e iOS são um pouco inflexíveis em obter acesso a alguns URLs para pensar que estão conectados . No entanto, eu colocaria esses URLs em seu site e terminaria com isso.

    
por 31.05.2018 / 09:02