Bind9 — Как узнать, какие программы выполняют те или иные DNS-запросы?

Bind9 — Как узнать, какие программы выполняют те или иные DNS-запросы?

Использование bind9 на ноутбуке показывает множество бессмысленных доменов при отсутствии сетевого подключения:

Oct 18 19:56:18 lap3 named[1536]: error (network unreachable) resolving './NS/IN': 128.63.2.53#53
Oct 18 19:56:18 lap3 named[1536]: error (network unreachable) resolving 'drgvlofubl/A/IN': 128.63.2.53#53
Oct 18 19:56:18 lap3 named[1536]: error (network unreachable) resolving 'gjpszynvcz/A/IN': 128.63.2.53#53
Oct 18 19:56:19 lap3 named[1536]: error (network unreachable) resolving 'iqgwbuxrbt/A/IN': 192.5.5.241#53

Как узнать, какая программа делает эти запросы?

Добавление «debug» в /etc/resolv.conf, похоже, ничего не даёт (ноутбук работает под управлением Arch Linux и, похоже, не скомпилирован с поддержкой отладки?).

Следующий шаг — скомпилировать libresolv с включенной отладкой, если только нет ничего лучшего.

решение1

Я не думаю, что это будет возможно, учитывая природу работы DNS. DNS ничего не знает о том, какие приложения запрашивают его, а знает только, что служба открыла порт при подключении к нему хоста (предполагая TCP) или отправила пакет UDP на сервер привязки, а сервер привязки ответил этому загадочному приложению по тому же соединению.

Сетевые снифферы

В таких ситуациях обычно используется приложение для отслеживания сетевого трафика при его передаче туда и обратно, и вы можете сузить его фокус так, чтобы видеть только сообщения, относящиеся к определенному протоколу (DNS) в вашем случае или трафик, проходящий между двумя конечными точками (вашим ПК и сервером привязки), обычно с использованием IP-адресов.

Поскольку ваш вопрос вызвал у меня интерес, я воспользовался возможностью задать его на сайте Wireshark SE.

выдержкаКак определить, какое приложение отправляет DNS-запросы на мой сервер Bind?

Я пытаюсь понять, как можно определить, какое приложение на моем Linux-компьютере отправляет определенный DNS-запрос на мой сервер Bind. Я экспериментировал со следующей командой:

$ tshark -i wlan0 -nn -e ip.src -e dns.qry.name -E separator=";" -T fields port 53
192.168.1.20;ajax.googleapis.com
192.168.1.101;ajax.googleapis.com
192.168.1.20;pop.bizmail.yahoo.com

Как мне заставить его показывать мне фактическое приложение (порт и, возможно, PID)? Wireshark— один из таких инструментов, который можно использовать для этого, конечно, есть и другие.

На что я получил такой ответ:

При обычном захвате пакетов невозможно идентифицировать приложение или PID из пакетов, поскольку вы можете видеть только порт, с которого был отправлен пакет.

Если вы захватываете хост, который осуществляет связь, вы можете попробовать использоватьПроект Honeчтобы получить такую ​​информацию. В Windows,Сетевой мониторможет сделать то же самое.

В противном случае вы можете попробовать использовать netstat на устройстве, которое выполняет разрешение имен, и сопоставить его с номерами портов, которые использует DNS-запрос, но поскольку это UDP-соединение, порт открывается и закрывается практически мгновенно, поэтому шансы выполнить netstat только за ту миллисекунду, когда он открыт, будут подобны попытке выиграть в лотерею.

Проект Hone

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

Hone — уникальный инструмент для сопоставления пакетов с процессами, позволяющий преодолеть разрыв между хостом и сетью.

Рекомендации

решение2

если у вас есть вероятностьподозреватьпрограмму, выполните strace для нее recvfromи sendtoсистемных вызовов. Например, я получал тысячи запросов на radheengineering.info, и хотя в журналах exim4 это имя не упоминалось, оно было наиболее вероятным виновником с основным pid 1813.

Итак, используя strace -f -p1813 -erecvfrom,sendto, я обнаружил, что это действительно exim4 делал запросы. Затем я заблокировал сеть /24, обращающуюся к серверу, и это решило проблему.

Связанный контент