在我的专用服务器(由OVH托pipe)上运行全新安装的Ubuntu 14.04,curl和wget需要大约10秒来完成一个简单的请求。
$ curl -v google.com * Rebuilt URL to: google.com/ * Hostname was NOT found in DNS cache
只有在10秒后它才会返回一些东西。 所以我决定在这个上运行strace :
write(2, "Hostname was NOT found in DNS ca"..., 36) = 36 socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3 close(3) = 0 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f0a24fb8000 mprotect(0x7f0a24fb8000, 4096, PROT_NONE) = 0 clone(child_stack=0x7f0a257b7f70, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f0a257b89d0, tls=0x7f0a257b8700, child_tidptr=0x7f0a257b89d0) = 5047 poll(0, 0, 4) = 0 (Timeout) poll(0, 0, 8) = 0 (Timeout) poll(0, 0, 16) = 0 (Timeout) poll(0, 0, 32) = 0 (Timeout) poll(0, 0, 64) = 0 (Timeout) poll(0, 0, 128) = 0 (Timeout) poll(0, 0, 256) = 0 (Timeout) poll(0, 0, 1000) = 0 (Timeout) poll(0, 0, 1000) = 0 (Timeout) [...] (10 times or so) poll(0, 0, 1000) = 0 (Timeout) poll(0, 0, 1000) = 0 (Timeout) socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3 write(2, "*", 1) = 1 write(2, " ", 1) = 1 write(2, " Trying 74.125.228.7...\n", 25) = 25
在所有这些超时后,我可以清楚地看到套接字(PF_INET6)和套接字(PF_INET) 。 wget的行为方式相同。
更多相关信息:
$ sudo sysctl -p net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 $ sudo cat /etc/default/bind9 RESOLVCONF=yes OPTIONS="-4 -u bind" $ cat /proc/sys/net/ipv6/conf/all/disable_ipv6 1
ifconfig显示没有inet6地址。
我怎样才能防止这种情况发生?
可能需要指出IPv4在此链接中提到的优于IPv6。 https://askubuntu.com/questions/32298/prefer-a-ipv4-dns-lookups-before-aaaaipv6-lookups
更改/etc/gai.conf下的设置。