DNSに奇妙な問題があります。 GentooLinuxでデュアルipv4/ipv6環境を実行しています。
一部のサイトにpingを実行すると、127.0.0.1にpingが実行されます。例えば.
#> ping authserver.mojang.com
PING authserver.mojang.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=64 time=0.058 ms
--- authserver.mojang.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.043/0.048/0.058/0.010 ms
ただし、Digは正しく次を返します。
# Dig authserver.mojang.com
; <<>> Dig 9.9.3-P2 <<>> authserver.mojang.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15800
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;authserver.mojang.com. IN A
;; ANSWER SECTION:
authserver.mojang.com. 5 IN A 54.235.119.47
;; Query time: 14 msec
;; SERVER: 2001:4860:4860::8888#53(2001:4860:4860::8888)
;; WHEN: Sat Nov 09 15:34:40 GMT 2013
;; MSG SIZE rcvd: 66
よくわかりません!私のWebブラウザーは正しいWebサイトを返し、Windowsで起動した同じコンピューターも正しく機能します。
/ etc/hostsを変更していません(実際のコンピューター名を変更してここに投稿しました):127.0.0.1 localhost.localdomain localhost
# IPv4 and IPv6 localhost aliases
127.0.0.1 my.computer.com my localhost
::1 my.computer.com my localhost
私のresolv.conf:
# Generated by dhcpcd from eth0
options inet6
# Google
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
nameserver 8.8.8.8
nameserver 8.8.4.4
domain my.domain.com
編集:私の/etc/nsswitch.conf(手つかず):
# /etc/nsswitch.conf:
# $Header: /var/cvsroot/gentoo/src/patchsets/glibc/extra/etc/nsswitch.conf,v 1.1 2006/09/29 23:52:23 vapier Exp $
passwd: compat
shadow: compat
group: compat
# passwd: db files nis
# shadow: db files nis
# group: db files nis
hosts: files dns
networks: files dns
services: db files
protocols: db files
rpc: db files
ethers: db files
netmasks: files
netgroup: files
bootparams: files
automount: files
aliases: files
提案されているように、私はpingでstraceを実行しました: strace log
Ncsdに接続していません:
connect(4, {sa_family=AF_FILE, Sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
次に、GoogleのDNSに接続しようとします。
connect(4, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "2001:4860:4860::8888", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "\16\273\1\0\0\1\0\0\0\0\0\0\nauthserver\6mojang\3c"..., 39, MSG_NOSIGNAL, NULL, 0) = 39
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [55]) = 0
recvfrom(4, "\16\273\201\200\0\1\0\1\0\0\0\0\nauthserver\6mojang\3c"..., 1024, 0, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "2001:4860:4860::8888", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 55
close(4) = 0
まだ動かない!
提案されているように、-e readを使用すると、最後のDNSルックアップは次のようになります。
socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "2001:4860:4860::8888", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "M\354\1\0\0\1\0\0\0\0\0\0\nauthserver\6mojang\3c"..., 39, MSG_NOSIGNAL, NULL, 0) = 39
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
ioctl(4, FIONREAD, [55]) = 0
recvfrom(4, "M\354\201\200\0\1\0\1\0\0\0\0\nauthserver\6mojang\3c"..., 1024, 0, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "2001:4860:4860::8888", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 55
| 00000 4d ec 81 80 00 01 00 01 00 00 00 00 0a 61 75 74 M....... .....aut^? |
| 00010 68 73 65 72 76 65 72 06 6d 6f 6a 61 6e 67 03 63 hserver. mojang.c^? |
| 00020 6f 6d 00 00 01 00 01 c0 0c 00 01 00 01 00 00 00 om...... ........^? |
| 00030 05 00 04 17 15 2d ec .....-. ^? |
close(4) = 0
DNSプロトコルをデコードするのに十分な知識がないのではないかと思います。ここに完全なトレース: 完全なstrace
あなたが説明する症状(Digは正しい答えを出しますが、gethostbynameはしません)は、システムのどこかにキャッシュされた間違った答えがあることを意味します。
ランニング
strace ping authserver.mojang.com
そのデータがどこにキャッシュされるかについてのアイデアを与えるのに役立つはずです。この場合、通常nscdが原因です。接続呼び出しを探します。これはDNSサーバーへの呼び出しです。
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("134.79.110.9")}, 28) = 0
これはnscdソケットへのものです。
connect(4, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = 0
連絡しようとしているDNS名の送信メッセージが表示され、ローカルホストのIPアドレスで応答します。これは、DNSルックアップが成功した例です。
sendto(4, "@\330\1\0\0\1\0\0\0\0\0\0\3www\4slac\10stanford\3e"..., 39, MSG_NOSIGNAL, NULL, 0) = 39
recvfrom(4, "@\330\205\200\0\1\0\2\0\4\0\7\3www\4slac\10stanford\3e"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("134.79.110.9")}, [16]) = 309