Como registrar todas as solicitações DNS feitas através do roteador OpenWRT?

7

Eu tenho um roteador OpenWRT que está executando o dnsmasq. Eu quero criar um arquivo que tenha cada domínio que foi solicitado através do roteador. Minha saída deve ser algo assim:

google.com
cnn.com
wikipedia.com
news.google.com
gmail.com

Idealmente, não haveria duplicatas. Eu provavelmente poderia configurar um trabalho cron que iria remover duplicatas, se necessário. No momento, estou tentando descobrir uma boa maneira de registrá-los. Eu olhei as opções para o dnsmasq. Eu encontrei as seguintes opções:

 -q, --log-queries                       Log DNS queries.
 -8, --log-facility=<facilty>|<file>     Log to this syslog facility or file. (defaults to DAEMON)
--log-dhcp                          Extra logging for DHCP.
--log-async[=<integer>]             Enable async. logging; optionally set queue length.

No OpenWRT essas configurações parecem estar enterradas no arquivo /etc/init.d/dnsmasq. Eu tentei defini-los sem qualquer sorte. :-( Existe uma maneira mais fácil de atingir meu objetivo?

Ah! Com um pouco de hackery eu consegui gravar em um arquivo de log. No entanto, ele não possui os dados necessários para criar essa lista. Talvez o dnsmasq não possa fazer o que eu quero?

    
por exvance 15.08.2013 / 07:44

4 respostas

9

Você pode editar o arquivo de configuração:

vi /etc/dnsmasq.conf

    # /etc/dnsmasq.conf
    log-dhcp
    log-queries
    log-facility=/tmp/dnsmasq.log

Ou edite outro arquivo de configuração:

vi /etc/config/dhcp

    config dnsmasq
        ...
        option logdhcp '1'
        option logqueries '1'
        option logfacility '/tmp/dnsmasq.log'

Em seguida, reinicie o serviço:

/etc/init.d/dnsmasq restart

O arquivo de log pode ser analisado em tempo real com tail+awk :

$ vi dnsmasq.awk

    #!/usr/bin/awk -f

    BEGIN {
      OFS = ",";
    }

    $5 == "query[A]" {
      time = mktime( \
        sprintf("%04d %02d %02d %s\n", \
          strftime("%Y", systime()), \
          (match("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3, \
          $2, \
          gensub(":", " ", "g", $3) \
        ) \
      );
      query = $6;
      host = $8;
      print time, host, query;
    }

$ chmod +x dnsmasq.awk

$ tail -f /tmp/dnsmasq.log | ./dnsmasq.awk

1468999090,192.168.1.100,google.com
1468999092,192.168.1.101,youtube.com
1468999095,192.168.1.102,facebook.com
1468999097,192.168.1.100,qa.sockets.stackexchange.com

O método mais avançado está enviando log via filebeat para ELK em tempo real.

    
por 20.07.2016 / 08:42
2

Em /etc/config/dhcp add:

config dnsmasq
    [...]
    option logqueries '1'

e reinicie o dnsmasq.

Os registros serão gravados no log do sistema, visualizados com logread -f em um terminal ou via LuCi.

    
por 03.04.2015 / 12:34
2

Você pode instalar o tcpdump e farejar o pacote indo para a porta 53

tcpdump -i eth0 -l -vvv dst host 192.168.1.100 and dst port 53 >> dump.log

Este arquivo irá crescer muito rápido e seu roteador ficará sem memória muito rapidamente. Usar um stick USB para salvar o log impedirá isso.

    
por 24.09.2016 / 10:12
0

Dado que você está usando um roteador, se você quiser gravar os logs na memória flash interna, isso reduzirá a vida útil da memória flash, potencialmente colocando-a em evidência.

Se você não se importa em ter seus registros sendo exibidos em um serviço de terceiros, posso sugerir o uso do OpenDNS para alcançar sua finalidade?

Conceitualmente

  1. Assim que seu roteador altera o IP da WAN, ele precisa notificar o OpenDNS sobre seu novo IP.
  2. Seu roteador precisa ser configurado para usar servidores OpenDNS para pesquisas de DNS.
  3. O histórico de pesquisa de DNS da sua rede será exibido no Painel do OpenDNS, mesmo depois de algumas horas de atraso. Aqui, você pode ver o número de vezes que um domínio foi consultado por ordem máxima e também um gráfico que mostra pesquisas por hora.

Detalhes

Citações de um tutorial que escrevi

OpenDNS DNS-O-Matic setup

Firstly, we need an account on DNS-O-Matic and OpenDNS to maintain logs.

  1. Signup for a DNS-O-Matic (www.dnsomatic.com) account. Use a password without special characters. As far as I remember, this caused issues with configuration on OpenWRT. You can compensate the loss of password strength by increasing length.
  2. Using the same login credentials, signin at OpenDNS Dashboard (dashboard.opendns.com)
  3. Under Settings, label your network with a name. I call it ‘Home’
  4. Settings for: <Your network label>, select this
  5. Click on Stats and Logs
  6. Enable stats and logs
  7. Go back to DNS-O-Matic
  8. Add a service, OpenDNS
  9. Select your home network

OpenWRT configuration

We need to configure OpenWRT to update OpenDNS via DNS-O-Matic service upon change of public IP address, i.e. due to reboot of router, WAN link dropped and reconnected, etc.

Note: These steps are for OpenWRT Chaos Calmer.

Important: Depending on available space on your router, you may have to resort to using non-SSL options.

  1. Navigate to System > Software
  2. Update lists
  3. If you want to use SSL, install ca-certificates and wget
  4. If you do not want to or unable to use SSL, install wget-nossl
  5. Install ddns-scripts and luci-app-ddns
  6. Navigate to Service > Dynamic DNS
  7. Add a new entry and call it dnsomatic
  8. Select -custom- DDNS Service provider
  9. Set Custom update-url to http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=[IP]&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG without substituting anything
  10. Set hostname to dnsomatic.com
  11. Enter your username and password
  12. Check ‘Use HTTP Secure’ if you are using the SSL option
  13. The [IP] part of the URL will be substituted as defined by ‘IP address source ‘and ‘Network’ fields under ‘Advanced Settings’.
  14. Save & Apply
    
por 28.03.2017 / 17:18