Как зарегистрировать все DNS-запросы, сделанные через маршрутизатор OpenWRT?

Вопрос или проблема

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

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

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

 -q, --log-queries                       Журналировать DNS-запросы.
 -8, --log-facility=<фасилити>|<файл>     Журналировать в этот системный журнал или файл. (по умолчанию DAEMON)
--log-dhcp                          Дополнительная регистрация для DHCP.
--log-async[=<целое число>]             Включить асинхронную регистрацию; опционально установить длину очереди.

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

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

Я использую последнюю версию OpenWRT:

# cat /etc/openwrt_release

    DISTRIB_ID='OpenWrt'
    DISTRIB_RELEASE='23.05.5'

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

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

Пожалуйста, прочитайте руководство dnsmasq

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

# vi /etc/config/dhcp

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

[ПОЖАЛУЙСТА, НЕ РЕДАКТИРУЙТЕ ОБОИ ФАЙЛЫ]

Затем перезапустите службу:

# service dnsmasq restart

Файл журнала можно обрабатывать в режиме реального времени с помощью tail+awk:

# vi dnsmasq.awk
    
        #!/usr/bin/awk -f
        
        BEGIN {
          OFS = ",";
        }
        
        $7 == "query[A]" {
          time = mktime( \
            sprintf("%04d %02d %02d %s\n", \
              strftime("%Y", systime()), \
              (match("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3, \
              $2, \
              gensub(":", " ", "g", $3) \
            ) \
          );
          query = $8;
          host = $10;
          print time, host, query;
        }
    
# chmod +x dnsmasq.awk

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

    1731493510,192.168.1.100,google.com
    1731493511,192.168.1.101,youtube.com
    1731493512,192.168.1.102,facebook.com
    1731493513,192.168.1.100,qa.sockets.stackexchange.com

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

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

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

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

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

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

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

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

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

Если вам не мешает, чтобы ваши журналы отображались на сторонней службе, могу предложить использовать 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. Настройки для: <Метка вашей сети>, выберите это
  5. Нажмите на Статистика и журналы
  6. Включите статистику и журналы
  7. Вернитесь к DNS-O-Matic
  8. Добавьте службу, OpenDNS
  9. Выберите свою домашнюю сеть

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

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

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

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

  1. Перейдите в Система > Программное обеспечение
  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://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=[IP]&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG, не заменяя ничего
  10. Установите имя хоста на dnsomatic.com
  11. Введите ваше имя пользователя и пароль
  12. Отметьте «Использовать безопасный HTTP», если вы используете опцию SSL
  13. Часть [IP] в URL будет заменена на определенную в полях «Источник IP-адреса» и «Сеть» в разделе «Дополнительные настройки».
  14. Сохраните и примените изменения

Ответ или решение

Как настроить логирование всех DNS-запросов в маршрутизаторе OpenWRT

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

1. Настройка dnsmasq для логирования DNS-запросов

Чтобы начать регистрацию DNS-запросов, сначала нужно настроить dnsmasq. Для этого выполните следующие шаги:

  1. Редактирование конфигурационного файла:
    Откройте файл конфигурации dnsmasq:

    vi /etc/config/dhcp

    Внутри файла добавьте или измените следующие строки:

    config dnsmasq
        ...
        option logqueries '1'
        option logfacility '/tmp/dnsmasq.log'
        option quietdhcp '1'
  2. Перезапуск службы:
    После внесения изменений перезапустите dnsmasq:

    service dnsmasq restart

2. Проверка логирования

Для проверки, что логирование работает, можно использовать команду logread:

logread -f

Это позволит вам просматривать логи в режиме реального времени.

3. Обработка логов

Теперь, когда dnsmasq записывает запросы, необходимо создать скрипт для обработки этих логов. Используйте AWK для фильтрации и вывода запрашиваемых доменов:

  1. Создайте скрипт dnsmasq.awk:

    vi dnsmasq.awk

    Вставьте следующий код:

    #!/usr/bin/awk -f
    
    BEGIN {
      OFS = ",";
    }
    
    $7 == "query[A]" {
      query = $8;
      print query;
    }
  2. Сделайте скрипт исполняемым:

    chmod +x dnsmasq.awk
  3. Фильтрация логов:

    Для фильтрации запросов используйте следующую команду:

    tail -f /tmp/dnsmasq.log | ./dnsmasq.awk | sort -u > domains.log

    Здесь sort -u удаляет дубликаты.

4. Автоматизация с Cron

Чтобы упростить процесс и регулярно очищать дубликаты, вы можете настроить cron на выполнение команды. Внесите изменения в crontab:

crontab -e

Добавьте строку для периодической очистки:

0 * * * * sort -u /path/to/domains.log > /path/to/temp.log && mv /path/to/temp.log /path/to/domains.log

Эта команда выполнит очистку дубликатов каждый час.

5. Альтернативные методы

В качестве альтернативы вы можете использовать tcpdump для снятия трафика на порту 53:

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

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

6. Использование OpenDNS

Если вы хотите избежать сложностей с локальными логами, рассмотрите возможность использования OpenDNS для логирования. Это позволит вам хранить историю DNS-запросов на стороннем сервисе с менее рискованным использованием памяти маршрутизатора.

  1. Создайте учетную запись на OpenDNS и настройте маршрутизатор для использования его DNS-серверов.
  2. На сайте OpenDNS активируйте статистику и логи.
  3. Настройте автоматическое обновление IP-адреса через DNS-O-Matic.

Этот метод минимизирует износ флеш-памяти вашего маршрутизатора и упрощает доступ к логам.

Заключение

Настройка логирования DNS-запросов в OpenWRT позволяет получить полезную информацию о доступе пользователей к интернет-ресурсам. Следуйте вышеуказанным шагам, чтобы создать надежное решение для мониторинга без дубликатов. Выбор между локальным логированием и использованием сторонних сервисов, таких как OpenDNS, зависит от ваших потребностей и ресурсов.

Оцените материал
Добавить комментарий

Капча загружается...