7

У меня есть маршрутизатор OpenWRT, который работает dnsmasq. Я хочу создать файл, который имеет каждый домен, который был запрошен через маршрутизатор. Мой вывод должен выглядеть примерно так:

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

В идеале не должно быть дубликатов. Я мог бы, вероятно, настроить работу cron, которая при необходимости удаляла бы дубликаты. Прямо сейчас я пытаюсь найти хороший способ записать их. Я посмотрел на варианты для dnsmasq. Я нашел следующие варианты:

 -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.

В OpenWRT эти настройки, похоже, скрыты в файле /etc/init.d/dnsmasq. Я попытался установить их без всякой удачи. :-( Есть ли более простой способ достичь моей цели?

Ах! Немного взломав, я смог заставить его записать файл журнала. Тем не менее, он не имеет данных, необходимых для создания этого списка. Может быть, dnsmasq не может сделать то, что я хочу?

4 ответа4

11

Вы можете редактировать файл конфигурации:

vi /etc/dnsmasq.conf

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

Или отредактируйте другой файл конфигурации:

vi /etc/config/dhcp

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

Затем перезапустите сервис:

/etc/init.d/dnsmasq restart

Файл журнала может быть проанализирован в режиме реального времени с помощью 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

Более продвинутым методом является отправка журнала через filebeat в ELK в режиме реального времени.

3

Вы можете установить tcpdump и прослушать пакет, идущий на порт 53

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

Этот файл будет очень быстро расти, и вашему маршрутизатору не хватит памяти очень быстро. Использование флешки для сохранения журнала предотвратит это.

2

В /etc/config/dhcp добавьте:

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

и перезапустите dnsmasq.

Журналы будут записаны в системный журнал, просмотр с logread -f в терминале или через LuCi.

0

Учитывая, что вы используете маршрутизатор, если вы хотите много записывать журналы во внутреннюю флэш-память, это уменьшит срок службы флэш-памяти, потенциально ее разрушающей.

Если вы не против, чтобы ваши журналы появлялись на сторонних сервисах, могу ли я предложить вместо этого использовать OpenDNS для достижения вашей цели?

Концептуально

  1. Как только ваш маршрутизатор меняет WAN IP, он должен уведомить OpenDNS о вашем новом IP.
  2. Ваш маршрутизатор должен быть настроен на использование серверов OpenDNS для поиска DNS.
  3. История поиска DNS вашей сети будет отображаться на панели мониторинга OpenDNS, хотя и через несколько часов задержки. Здесь вы можете увидеть количество запросов к домену, упорядоченных по количеству запросов, а также график, который показывает количество просмотров в час.

подробности

Цитата из учебника, который я написал

Настройка OpenDNS DNS-O-Matic

Во-первых, нам нужна учетная запись на DNS-O-Matic и OpenDNS для ведения журналов.

  1. Зарегистрируйте учетную запись DNS-O-Matic (www.dnsomatic.com). Используйте пароль без специальных символов. Насколько я помню, это вызвало проблемы с настройкой на OpenWRT. Вы можете компенсировать потерю надежности пароля, увеличив длину.
  2. Используя те же учетные данные, войдите на панель инструментов OpenDNS (dashboard.opendns.com).
  3. В разделе «Настройки» пометьте свою сеть именем. Я называю это «Домой»
  4. Настройки для: <Your network label> , выберите этот
  5. Нажмите на статистику и журналы
  6. Включить статистику и логи
  7. Вернуться к DNS-O-Matic
  8. Добавить сервис, OpenDNS
  9. Выберите свою домашнюю сеть

Конфигурация OpenWRT

Нам необходимо настроить OpenWRT для обновления OpenDNS через службу DNS-O-Matic при изменении общедоступного IP-адреса, то есть из-за перезагрузки маршрутизатора, сброса и повторного подключения WAN-канала и т.д.

Примечание. Эти шаги предназначены для OpenWRT Chaos Calmer.

Важное замечание: В зависимости от свободного места на вашем маршрутизаторе вам, возможно, придется прибегнуть к использованию опций без SSL.

  1. Перейдите к System > Software
  2. Обновление списков
  3. Если вы хотите использовать SSL, установите ca-certificates и wget
  4. Если вы не хотите или не можете использовать SSL, установите wget-nossl
  5. Установите ddns-scripts и luci-app-ddns
  6. Перейдите к Сервису> Динамический DNS
  7. Добавьте новую запись и назовите ее dnsomatic
  8. Выберите -custom- DDNS Сервис-провайдер
  9. Задайте для пользовательского URL- адреса обновления значение http://[ИМЯ ПОЛЬЗОВАТЕЛЯ]: [ПАРОЛЬ] @ updates.dnsomatic.com/nic/update?hostname = all.dnsomatic.com & myip = [IP] & wildcard = NOCHG & mx = NOCHG & backmx = NOCHG без замены чего-либо
  10. Установите имя хоста на dnsomatic.com
  11. Введите ваше имя пользователя и пароль
  12. Отметьте «Использовать HTTP Secure», если вы используете опцию SSL
  13. Часть [IP] URL-адреса будет заменена в соответствии с полями «Источник IP-адреса» и «Сеть» в разделе «Дополнительные параметры».
  14. Сохранить и применить

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .