
Использование 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, обращающуюся к серверу, и это решило проблему.