Tôi có một VM chạy Debian Wheezy mà trên đó một số tra cứu tên máy chủ phải mất vài giây để hoàn thành, mặc dù trình giải quyết trả lời ngay lập tức. Kỳ lạ thay, tra cứu với getaddrinfo()
bị ảnh hưởng, nhưng gethostbyname()
không.
Tôi đã chuyển sang các trình phân giải Google để loại trừ khả năng các bộ lọc cục bộ bị hỏng, vì vậy, giao diện của tôi /etc/resolv.conf
như sau:
search my-domain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
Của tôi nsswitch.conf
có dòng:
hosts: files dns
và của tôi /etc/hosts
không chứa bất cứ điều gì bất thường.
Nếu tôi thử telnet webserver 80
, nó sẽ bị treo trong vài giây trước khi nhận được độ phân giải tên. Một ltrace
đầu ra [1] cho thấy hang bị treo trong một getaddrinfo()
cuộc gọi:
getaddrinfo("ifconfig.me", "telnet", { AI_CANONNAME, 0, SOCK_STREAM, 0, 0, NULL, '\000', NULL }, 0x7fffb4ffc160) = 0 <5.020621>
Tuy nhiên, tcpdump
tiết lộ rằng máy chủ tên đã trả lời ngay lập tức và đó chỉ là câu trả lời thứ hai được telnet
bỏ chặn. Các câu trả lời trông giống hệt nhau:
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)
Tôi đã kiểm tra nhật ký tường lửa máy chủ và không có gì trên cổng 53 bị chặn.
Điều gì gây ra phản hồi DNS đầu tiên bị bỏ qua?
[1] Tôi đã thêm một vài dòng vào ltrace.conf
để tôi có thể nhìn thấy bên trong addrinfo
cấu trúc.