ホスト検索はできるがカールはできないのはどうしてですか?


20

誰もこれを見たことがありますか?これは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を含むすべてのアプリケーションは、名前の検索を行うことができません。さらに、wifiをオフラインにしてイーサネットケーブルを接続すれば、すべて問題ありません。


1
さらに情報を追加することもできます-単にカールするだけですか?wget、ブラウザ、pingなどはどうですか?
サンドマン4

あなたは答えをマークしましたが、問題と解決策は正確に何でしたか?SELinuxの問題でしたか?
ベルミンフェルナンデス

「解決策」は、ネットワークが正しくギブアップしているように見えることだけでした。私はラップトップ上でSELinuxを実行していません。「ネットワーク」は、くだらない店で購入したwifiルーターによって管理されています。その答えは、私がパケットをあちこちに落としていることを理解するのに役立つものだったので、私はそれが解決できないものであると考え、その男に信用を与えました。なぜ、あなたはより良いアイデアを持っていますか?
ダニエルクイン

pinggithub.com/iputils/iputils/blob/master/ping/ping.c#L574 とわずかに異なるパラメーターでgetaddrinfoを呼び出すのは、getaddrinfoをai_protocol = IPPROTO_UDP何らかの方法で混乱させる可能性がありますか?そうですhost:コマンドがいずれかの使用何常にではありませんunix.stackexchange.com/a/553438/8337
rogerdpack

回答:


8

おそらく、いくつかの非常に奇妙で制限的なSELinux(またはgrsecurity ...)のルールがありますか?

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


1
WiFi接続そのもののようです。出力ファイルには、このようなものがいっぱいです:9344 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
ダニエル・クイン

@Daniel Quinn、の出力を投稿できます/tmp/wtfか?
サチンディベカー

出力は次のとおりです。pastebin.com
ダニエルクイン

うーん、192.168.1.201へのクエリを実行しているようです。正気のために「host google.com 192.168.1.201」を実行できますか?基本的に、DNSルックアップは、特にDNSサーバーに対して行われます。
cjc

完了(質問に追加)。そして、それはうまく機能します-サーバー引数なしでホストを発行することも同様に正しく機能するため、これは理にかなっています。ICMP(ほとんどの場合、最初のpingをドロップする)が機能するため、実際のHTTP呼び出しでもあるように見えます。
ダニエルクイン

8

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

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

[root @ localhost〜]#wget -6 URL Failed

[root @ localhost〜]#wget -4 URL Worked

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


5

を確認してください/etc/nsswitch.conf。場合hosts行は次のように述べています

hosts:      files dns

私はあなたと同じくらい混乱しています。しかし、それが

hosts:      files

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


うーん。私はそのことを考えていなかったが、私はちょうどチェックし、それは言うfiles dns、私はそれはそれではないと思うので:-(
ダニエル・クイン

1
私の場合、ホストの行にはもっとたくさんのものがありました。「[NOTFOUND = return]」の後に「dns」がリストされていたため、私の理解では、設定されたDNSサーバーをチェックする前にシステムが見つからないという結果になりました。「dns」をnotfoundの前に移動すると、システムが修正されました(リブートする必要がありました)。
-trebormf

3

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

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

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


1

今日、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'

しかし、ここでDavid Tの投稿を見たとき、curlで試してみることにしました。したがって、これは失敗しますが:

# 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

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


0

カールのインストールはスムーズでしたか?可能であれば、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

/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を編集し、ネームサーバー行の先頭の空白を削除します。


strace出力示してDNSクエリは応答を受信せずに送信されます。これは、上の解析エラーの仮説をサポートしていません/etc/resolv.conf。ただし、再帰器に障害がある可能性があり、別の再帰器を使用すると役立つ場合があります。
カスペルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.