У мене працює VM під керуванням Debian Wheezy, на який деякі пошукові імена хоста потребують декількох секунд, хоча резолютор відповідає негайно. Як не дивно, пошук на getaddrinfo()це впливає, але gethostbyname()це не так.
Я переключився на вирішувачі Google, щоб виключити ймовірність того, що локальні зламні, тому моє /etc/resolv.confвиглядає так:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
У мене nsswitch.confє рядок:
hosts: files dns
і моє /etc/hostsне містить нічого незвичайного.
Якщо я спробую telnet webserver 80, він зависає кілька секунд, перш ніж отримати дозвіл імені. ltraceВихід [1] показано , що зависання знаходиться в getaddrinfo()виклику:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
Однак tcpdumpвиявляється, що сервер імен відповів негайно, і лише на другу відповідь було telnetрозблоковано. Відповіді виглядають однаково:
05:52:58.609731 IP 192.168.1.75.43017 > 8.8.4.4.53: 54755+ A? ifconfig.me. (29)
05:52:58.609786 IP 192.168.1.75.43017 > 8.8.4.4.53: 26090+ AAAA? ifconfig.me. (29)
05:52:58.612188 IP 8.8.4.4.53 > 192.168.1.75.43017: 54755 4/0/0 A 219.94.235.40, A 133.242.129.236, A 49.212.149.105, A 49.212.202.172 (93)
[...five second pause...]
05:53:03.613811 IP 192.168.1.75.43017 > 8.8.4.4.53: 54755+ A? ifconfig.me. (29)
05:53:03.616424 IP 8.8.4.4.53 > 192.168.1.75.43017: 54755 4/0/0 A 219.94.235.40, A 133.242.129.236, A 49.212.149.105, A 49.212.202.172 (93)
05:53:03.616547 IP 192.168.1.75.43017 > 8.8.4.4.53: 26090+ AAAA? ifconfig.me. (29)
05:53:03.618907 IP 8.8.4.4.53 > 192.168.1.75.43017: 26090 0/1/0 (76)
Я перевірив журнали брандмауера хостів, і нічого на порту 53 не блокується.
Що викликає ігнорування першої відповіді DNS?
[1] Я додав пару рядків до свого, ltrace.confщоб я міг бачити всередині addrinfoструктури.