Avahi: ping не может разрешить имя хоста, но nslookup может

ping сообщает мне, что он не может разрешить некоторое имя хоста («ping: unknown host domain.company.local») в URL-адресе, но когда я использую host или nslookup на том же компьютере в командной строке, разрешения работают нормально (т.е. Быстро и надежно).

Что может быть причиной этого?

  • Локальный DNS-сервер
  • Запуск домашнего почтового сервера с использованием динамических dns
  • MacBook не может использовать Интернет, но nslookup и ping работают
  • Тайм-ауты разрешения DNS с поддержкой технологии Multihomed Windows 10
  • Как заставить виртуальные машины VirtualBox использовать DNS хоста?
  • Как псевдоним имени хоста?
  • Больше тестирования: у Firefox, wget и ping есть те же проблемы. Выполняется Pinging IP-адрес.

    ОС: Linux (Ubuntu 13.04)

    EDIT My /etc/resolv.conf читает:

     nameserver 127.0.1.1 search domain.company.local 

    Отчеты netstat :

     Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN - 

    Поэтому на этом порту что-то работает ( nslookup также сообщает, что использует 127.0.1.1 качестве DNS-сервера).

    Нет /etc/*inetd.conf , поэтому я не уверен, какое приложение обслуживает этот порт.

    Кажется, что dnsmasq используется:

     /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d 

    Все конфигурационные файлы и папки пусты. Поскольку nslookup говорит, что использует 127.0.1.1#53 я предполагаю, что dnsmasq работает даже без конфигурации. Но как он узнает, какой родительский DNS запрашивать?

    EDIT2 Отключение dnsmasq предложенное harrymc, не помогло. Таким образом, я провел strace ping которая дала мне этот странный результат (только интересные части):

     open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4 read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613 ... open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4 read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832 ... mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000 ... socket(PF_FILE, SOCK_STREAM, 0) = 4 fcntl(4, F_GETFD) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0 fcntl(4, F_GETFL) = 0x2 (flags O_RDWR) fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000 lseek(4, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44 read(4, "-15 Timeout reached\n", 4096) = 20 

    Таким образом, ping выглядит в /etc/hosts что имеет смысл. Затем он загружает и mmap() s /lib/libnss_mdns4_minimal.so.2 что также имеет смысл.

    Но потом он разговаривает с авахи !?

    Что привело меня к этому сообщению на форуме: ping не делает запрос DNS .

    Мой /etc/nsswitch.conf также содержит эту строку:

     hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 

    Если я ping рабочий адрес, я вижу, что процесс также загружает /lib/libnss_mdns4_minimal.so.2 но затем он выполняет DNS-запрос через порт 53.

    Итак, теперь я предполагаю, что /lib/libnss_mdns4_minimal.so.2 как-то замечает, что IP-адрес заканчивается .local а не с .com а затем [NOTFOUND=return] .

    Как это исправить?

  • SSH работает в шпаклере, но не в терминале
  • Могу ли я запустить Linux на планшет Android?
  • Скрыть раздел из Windows 10 для предотвращения проблем с гибридным отключением в Linux
  • Предупреждение: раздел X не заканчивается на границе цилиндра. Должен ли я заботиться / как исправить?
  • Как отслеживать использование памяти для тревожной цели
  • Каково максимальное количество разделов с EFI?
  • 7 Solutions collect form web for “Avahi: ping не может разрешить имя хоста, но nslookup может”

    Как подробно описано в этом сообщении в блоге , вам необходимо отредактировать /etc/avahi/avahi-daemon.conf :

     [server] domain-name=.alocal 

    Это связывает демона с доменом .alocal вместо стандартного .local .

    И перезапустите демон с помощью:

     sudo service avahi-daemon restart 

    Примечание из сообщения в блоге:

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

    После этого ping и nslookup начали соглашаться.

    Спасибо harrymc за то, что вы на правильном пути.

    Изменение /etc/nsswitch.conf и замена:

     hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 

    от:

     hosts: files dns 

    Работал на меня.

    Легкая вещь: Edit /etc/default/avahi-daemon

    Измените строку:

     AVAHI_DAEMON_DETECT_LOCAL=1 

    в

     AVAHI_DAEMON_DETECT_LOCAL=0 

    Перезапустите avahi-daemon или убейте его.

    Мне не нравится Avahi, и я не использую никаких его функций. Если вы хотите по-настоящему отключить avahi, измените /etc/init/avahi-daemon.conf , как показано ниже:

     start on (never and filesystem and started dbus) stop on stopping dbus 

    Кажется, что локальный адрес не может быть доступен в ubuntu.

    Решение – отредактировать /etc/nsswitch.conf и изменить эту строку:

     hosts: files mdns4_minimal [NOTFOUND=return] dns 

    этим :

     hosts: files dns 

    Если вы не используете соединение с другими устройствами или виртуальными машинами через ваш компьютер, вы можете отключить dnsmasq в Network Manager.

    Измените /etc/NetworkManager/NetworkManager.conf и прокомментируйте строку (поставьте перед ней #):

     dns=dnsmasq 

    Затем выполните:

     sudo restart network-manager 

    Это отключит локальный преобразователь.

    Источник: DNS в Ubuntu 12.04 .

    У меня был интересный случай с теми же симптомами (пинг, монтирование и т. Д. Не работает, но хост, копать работу). Проверьте разрешения на файл /etc/resolv.conf . В моем случае кто-то изменил его, и у меня не было прав на его чтение (хотя cat /etc/resolv.conf и редактирование файла работало нормально).

    Во всяком случае, strace показывал:

     open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied) 

    И в результате он пытался запросить localhost (127.0.0.1) вместо IP-сервера имен из файла resolv.conf:

     socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4 connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}]) 

    И tcpdump не показывал никакого трафика DNS при пинге. Все работает после исправления разрешения:

     # chmod 644 /etc/resolv.conf # ls -l /etc/resolv.conf -rw-r--r-- 1 root root 111 Oct 3 09:54 /etc/resolv.conf 

    Другой проблемой могут быть расширенные атрибуты файла или любая другая проблема с доступом. В этом случае просто удалите файл /etc/resolv.conf и заново создайте его с нуля.

    Другая причина – формат /etc/hosts . Убедитесь, что между IP и именем узла нет пробелов, вместо этого используйте TAB. После изменения в TAB имя хоста может быть разрешено с помощью ping.

     127.0.0.1 test.local ^^^^^^^^ → Should be a TAB not multiple spaces. 
    Давайте будем гением компьютера.