web-dev-qa-db-ja.com

どのようにしてホストルックアップを実行できるが、カールはできないのですか?

誰かこれまでにこれを見たことがありますか?これはgoogle.comだけでなく、私が試したすべてのドメインでも発生することに注意してください。これはワイヤレス接続(WEP)ですが、それがどのように関連しているかはわかりません。

$ curl -v google.com
# This takes about 60s to return
* getaddrinfo(3) failed for google.com:80
* Couldn't resolve Host 'google.com'
* Closing connection #0
curl: (6) Couldn't resolve Host 'google.com'

$ wget google.com
--2011-11-28 14:44:08--  http://google.com/
Resolving google.com... failed: Name or service not known.
wget: unable to resolve Host address `google.com'

$ ping google.com
PING google.com (209.85.148.147) 56(84) bytes of data.
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=2 ttl=54 time=136 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=3 ttl=54 time=34.0 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=4 ttl=54 time=34.3 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=5 ttl=54 time=42.5 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=6 ttl=54 time=44.7 ms
64 bytes from fra07s07-in-f147.1e100.net (209.85.148.147): icmp_req=7 ttl=54 time=34.5 ms
^C
--- google.com ping statistics ---
8 packets transmitted, 6 received, 25% packet loss, time 7007ms
rtt min/avg/max/mdev = 34.063/54.376/136.026/36.758 ms


$ Host google.com
google.com has address 209.85.148.106
google.com has address 209.85.148.147
google.com has address 209.85.148.99
google.com has address 209.85.148.103
google.com has address 209.85.148.104
google.com has address 209.85.148.105
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.

$ Host google.com 192.168.1.201
Using domain server:
Name: 192.168.1.201
Address: 192.168.1.201#53
Aliases: 

google.com has address 209.85.148.103
google.com has address 209.85.148.104
google.com has address 209.85.148.105
google.com has address 209.85.148.106
google.com has address 209.85.148.147
google.com has address 209.85.148.99
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.

$ cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.1.201

$ cat /etc/hosts
127.0.0.1       localhost
::1             localhost

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0
127.0.0.0       127.0.0.1       255.0.0.0       UG        0 0          0 lo
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

基本的に、Firefoxを含むすべてのアプリケーションは、名前の検索を行うことができません。さらに、Wi-Fiをオフラインにしてイーサネットケーブルを接続すれば、すべて問題ありません。

21
Daniel Quinn

おそらく、非常に奇妙で制限の多いSELinux(またはgrsecurity ...)ルールが整っているでしょうか。

そうでない場合は、strace -o /tmp/wtf -fF curl -v google.comを試し、/tmp/wtf出力ファイルから何が起こっているのかを見つけてください。

8

これを使用する: https://www.centos.org/modules/newbb/viewtopic.php?topic_id=3934

トラブルシューティングに役立つキーコマンドを見つけました。

[root @ localhost〜]#wget -6 URLが失敗しました

[root @ localhost〜]#wget -4 URLが機能しました

特定のユーティリティで問題を引き起こしているのは、デフォルトのipv6スタックとの関係です。解決するには、ipv6を無効にします。

8
David T

/etc/nsswitch.confhosts行が次のようになっている場合

hosts:      files dns

私はあなたと同じように混乱しています。しかし、それが次のようなことを言ったら

hosts:      files

次に、DNSが機能しているという事実(Hostコマンドの出力を参照)は、DNSを使用しないように指示されている標準のOSライブラリを介して名前解決を行っているcurlを助けません。

5
MadHatter

私は同じ問題を抱えていました-ホスト、nslookupはok、curlを解決します-同じホスト名ではできません。

Tcpdump通信の後、curlがDNSポートへのTCP(UDPに加えて)接続を確立しようとしていることがわかりました。これはルーターで閉じられていました。tcpポート53が有効になった後、curlは問題なく動作し始めました。

もう1つの奇妙なことは、DNSサーバーが通常のバインドインストールの場合、この問題は表面化しないことです。ルーターのDNSサーバーに組み込みを使用している場合、2ミリ秒前にUDP経由で(!)応答を受信して​​いても、curlは突然TCPポートを使用しようとします。これはバグだと思います。

3
Andrew

今日、私のVE(ラップトップで実行中)で同じ問題が発生しましたが、それは非常に驚くべきことでした。 DigとNSlookupは機能しますが、curlは失敗します。

たとえば:

# curl -v google.com
* getaddrinfo(3) failed for google.com:80
* Couldn't resolve Host 'google.com'
* Closing connection #0
curl: (6) Couldn't resolve Host 'google.com'

しかし、ここでデビッドTの投稿を見て、カールで試してみることにしました。だからこれが失敗する間:

# curl  google.com -6
curl: (6) Couldn't resolve Host 'google.com'

これは成功します:

# curl  google.com -4
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

-6は、curlがIPv6を使用し、-4がIPv4を使用することを指定します。 wgetを使用するときにも同じエラーが発生するため、ホスト上のIPv6スタックにいくつかの問題があることは間違いありません。

Nsswitch.confファイルおよび他のBIND confファイルに対する他のすべての変更は、このユーティリティに問題がないため、役に立ちませんでした。

1
AkinO

AWS EC2インスタンスのDNSを設定しようとしている人がこれに該当する場合は、そのインスタンスが使用するセキュリティグループでHTTPおよびHTTPSのIPv6ルール(::/0)も有効にしてください。

1
David Schumann

カールの取り付けはスムーズでしたか?可能であれば、curlを再インストールしてください。

curl -v google.comを試して、デバッグ用のより詳細な出力を取得してください。

例えば。:

curl -v dnserror.test
* getaddrinfo(3) failed for dnserror.test:80
* Couldn't resolve Host 'dnserror.test'
* Closing connection #0
curl: (6) Couldn't resolve Host 'dnserror.test'

同様の出力を得ていますか?

0
Sachin Divekar

/etc/resolv.confファイルにnslookupは許容するがcurlは許容しないエラーがある可能性があります。

「ホストルックアップはできるが、カールはできないのはなぜですか?」という質問です。

これは、curlがgetaddrinfo()を使用してFQDNを解決するのに対して可能ですが、nslookupはそうしません。代わりに、nslookupは他の関数やライブラリを使用して、または独自のカスタムコードを介して/etc/resolv.confを解析すると思います。私はこれを確認するためにソースコードを調べませんでしたが、/ etc/resolv.confのネームサーバートークンの前に空白を追加することでそれを証明できます。 nslookupはこれを解析できますが、getaddrinfo()はできません。


Example /etc/resolv.conf
 nameserver 8.8.8.8

Resolv.confにこのエラーがあるか、nslookupで許容されてもgetaddrinfo()では許容されないその他のエラーがある場合、nslookupでFQDNを解決できますが、そのFQDNでcurlを使用できません。

修正:ルートとして、/ etc/resolv.confを編集し、ネームサーバー行の先頭の空白をすべて削除します。

0
mrjmh