- Вопрос или проблема
- Концептуально
- Детали
- Настройка OpenDNS DNS-O-Matic
- Конфигурация OpenWRT
- Ответ или решение
- Как настроить логирование всех DNS-запросов в маршрутизаторе OpenWRT
- 1. Настройка dnsmasq для логирования DNS-запросов
- 2. Проверка логирования
- 3. Обработка логов
- 4. Автоматизация с Cron
- 5. Альтернативные методы
- 6. Использование OpenDNS
- Заключение
Вопрос или проблема
У меня есть роутер 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 для достижения вашей цели вместо этого?
Концептуально
- Как только ваш роутер изменит WAN IP, он должен уведомить OpenDNS о вашем новом IP.
- Ваш роутер должен быть настроен на использование серверов OpenDNS для DNS-запросов.
- История DNS-запросов вашей сети будет отображаться на панели управления OpenDNS, хотя и с некоторым временем задержки. Здесь вы можете видеть количество раз, когда домен запрашивался, в порядке убывания, а также график, отображающий запросы в час.
Детали
Цитата из руководства, которое я написал
Настройка OpenDNS DNS-O-Matic
Во-первых, нам нужна учетная запись на DNS-O-Matic и OpenDNS для ведения журналов.
- Зарегистрируйтесь на DNS-O-Matic (
www.dnsomatic.com
). Используйте пароль без специальных символов. Насколько я помню, это создавало проблемы с конфигурацией на OpenWRT. Вы можете компенсировать потерю силы пароля, увеличив его длину.- Войдите с теми же учетными данными на панель управления OpenDNS (
dashboard.opendns.com
)- В разделе Настройки присвойте вашей сети имя. Я называю это «Дом»
- Настройки для:
<Метка вашей сети>
, выберите это- Нажмите на Статистика и журналы
- Включите статистику и журналы
- Вернитесь к DNS-O-Matic
- Добавьте службу, OpenDNS
- Выберите свою домашнюю сеть
Конфигурация OpenWRT
Нам нужно настроить OpenWRT для обновления OpenDNS через службу DNS-O-Matic при изменении публичного IP-адреса, например, из-за перезагрузки роутера, отключения и повторного подключения WAN-соединения и т.д.
Примечание: Эти шаги предназначены для OpenWRT Chaos Calmer.
Важно: В зависимости от доступного пространства на вашем роутере вам, возможно, придется использовать варианты без SSL.
- Перейдите в
Система > Программное обеспечение
- Обновите списки
- Если вы хотите использовать SSL, установите
ca-certificates
иwget
- Если вы не хотите или не можете использовать SSL, установите
wget-nossl
- Установите
ddns-scripts
иluci-app-ddns
- Перейдите в Сервис > Динамический DNS
- Добавьте новую запись и назовите ее
dnsomatic
- Выберите -custom- провайдера DDNS
- Установите настраиваемый URL-адрес обновления на
http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=[IP]&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG
, не заменяя ничего- Установите имя хоста на
dnsomatic.com
- Введите ваше имя пользователя и пароль
- Отметьте «Использовать безопасный HTTP», если вы используете опцию SSL
- Часть [IP] в URL будет заменена на определенную в полях «Источник IP-адреса» и «Сеть» в разделе «Дополнительные настройки».
- Сохраните и примените изменения
Ответ или решение
Как настроить логирование всех DNS-запросов в маршрутизаторе OpenWRT
Если вы используете маршрутизатор OpenWRT с dnsmasq
и хотите создать файл, в котором будет отображаться каждый запрашиваемый домен, следуйте этой пошаговой инструкции. Мы рассмотрим настройки для логирования, методы обработки и оптимизацию, чтобы избежать дубликатов.
1. Настройка dnsmasq
для логирования DNS-запросов
Чтобы начать регистрацию DNS-запросов, сначала нужно настроить dnsmasq
. Для этого выполните следующие шаги:
-
Редактирование конфигурационного файла:
Откройте файл конфигурацииdnsmasq
:vi /etc/config/dhcp
Внутри файла добавьте или измените следующие строки:
config dnsmasq ... option logqueries '1' option logfacility '/tmp/dnsmasq.log' option quietdhcp '1'
-
Перезапуск службы:
После внесения изменений перезапуститеdnsmasq
:service dnsmasq restart
2. Проверка логирования
Для проверки, что логирование работает, можно использовать команду logread
:
logread -f
Это позволит вам просматривать логи в режиме реального времени.
3. Обработка логов
Теперь, когда dnsmasq
записывает запросы, необходимо создать скрипт для обработки этих логов. Используйте AWK для фильтрации и вывода запрашиваемых доменов:
-
Создайте скрипт
dnsmasq.awk
:vi dnsmasq.awk
Вставьте следующий код:
#!/usr/bin/awk -f BEGIN { OFS = ","; } $7 == "query[A]" { query = $8; print query; }
-
Сделайте скрипт исполняемым:
chmod +x dnsmasq.awk
-
Фильтрация логов:
Для фильтрации запросов используйте следующую команду:
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-запросов на стороннем сервисе с менее рискованным использованием памяти маршрутизатора.
- Создайте учетную запись на OpenDNS и настройте маршрутизатор для использования его DNS-серверов.
- На сайте OpenDNS активируйте статистику и логи.
- Настройте автоматическое обновление IP-адреса через DNS-O-Matic.
Этот метод минимизирует износ флеш-памяти вашего маршрутизатора и упрощает доступ к логам.
Заключение
Настройка логирования DNS-запросов в OpenWRT позволяет получить полезную информацию о доступе пользователей к интернет-ресурсам. Следуйте вышеуказанным шагам, чтобы создать надежное решение для мониторинга без дубликатов. Выбор между локальным логированием и использованием сторонних сервисов, таких как OpenDNS, зависит от ваших потребностей и ресурсов.