Mam maszynę wirtualną z uruchomionym systemem Debian Wheezy, na której wyszukiwanie niektórych nazw hostów zajmuje kilka sekund, mimo że resolver odpowiada natychmiast. O dziwo, wyszukiwania getaddrinfo()
mają wpływ, ale gethostbyname()
nie jest.
Przełączyłem się na resolwery Google, aby wykluczyć możliwość uszkodzenia lokalnych, więc /etc/resolv.conf
wygląda to tak:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Mój nsswitch.conf
ma linię:
hosts: files dns
a mój /etc/hosts
nie zawiera niczego niezwykłego.
Jeśli spróbuję telnet webserver 80
, zawiesi się na kilka sekund przed uzyskaniem rozdzielczości nazwy. ltrace
Wyjście [1] pokazuje, że jest w Hang getaddrinfo()
rozmowy:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
Jednak tcpdump
ujawnia, że serwer nazw odpowiedział natychmiast, i tylko druga odpowiedź została telnet
odblokowana. Odpowiedzi wyglądają identycznie:
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)
Sprawdziłem dzienniki zapory hosta i nic na porcie 53 nie jest blokowane.
Co powoduje, że pierwsza odpowiedź DNS jest ignorowana?
[1] Dodałem kilka linii do mojego, ltrace.conf
aby móc zajrzeć do addrinfo
struktury.