Adakah yang pernah melihat ini sebelumnya? Perhatikan bahwa ini terjadi tidak hanya dengan google.com, tetapi dengan setiap domain yang saya coba. Ini koneksi nirkabel (WEP), tapi saya tidak yakin bagaimana itu akan relevan:
$ 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
Pada dasarnya aplikasi apa pun, termasuk Firefox, tidak dapat berfungsi untuk melakukan pencarian nama. Terlebih lagi, jika saya mengambil wifi offline dan menyambungkan kabel ethernet, semuanya baik-baik saja.
domain-name-system
wifi
curl
Daniel Quinn
sumber
sumber
ping
apakah memanggil getaddrinfo dengan parameter yang sedikit berbeda github.com/iputils/iputils/blob/master/ping/ping.c#L574ai_protocol = IPPROTO_UDP
mungkin entah bagaimana caranya membingungkan getaddrinfo secara berbeda? Tampaknyahost
perintah itu tidak selalu apa yang digunakan: unix.stackexchange.com/a/553438/8337Jawaban:
Mungkin Anda memiliki beberapa aturan SELinux (atau grsecurity ...) yang sangat aneh dan restriktif?
Jika tidak, coba
strace -o /tmp/wtf -fF curl -v google.com
dan coba cari dari/tmp/wtf
file keluaran apa yang terjadi.sumber
9344 poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 1000) = 0 (Timeout)
/tmp/wtf
?Menggunakan ini: https://www.centos.org/modules/newbb/viewtopic.php?topic_id=39343
Saya menemukan perintah utama yang membantu saya memecahkan masalah:
[root @ localhost ~] # wget -6 URL Gagal
[root @ localhost ~] # wget -4 URL Bekerja
Ini ada hubungannya dengan tumpukan ipv6 default yang menyebabkan masalah dengan utilitas tertentu. Nonaktifkan ipv6 untuk menyelesaikan.
sumber
Periksa
/etc/nsswitch.conf
. Jikahosts
garis mengatakan sesuatu sepertiAku sama bingungnya denganmu. Tetapi jika itu mengatakan sesuatu seperti
maka fakta bahwa DNS berfungsi (lihat output dari
host
perintah) tidak akan membantu curl, yang melakukan resolusi nama melalui pustaka OS standar, yang telah diberitahu untuk tidak menggunakan DNS.sumber
files dns
jadi saya kira bukan itu :-(Saya memiliki masalah yang sama - host, nslookup menyelesaikan ok, curl - tidak bisa pada nama host yang sama.
Setelah komunikasi tcpdumping, saya menemukan bahwa curl mencoba membuat koneksi TCP (selain UDP) ke port DNS, yang ditutup di router saya. Setelah tcp port 53 diaktifkan, curl mulai bekerja dengan sempurna.
Hal aneh lainnya adalah bahwa masalah ini tidak muncul jika server dns adalah instalasi bind yang teratur. Jika saya menggunakan tertanam ke dalam server DNS router, curl tiba-tiba mencoba menggunakan port TCP bahkan jika sudah menerima (!) Menjawab melalui UDP 2ms sebelumnya. Saya kira ini adalah bug.
sumber
Saya memiliki masalah yang sama pada VE saya (berjalan di laptop saya) hari ini, dan merasa cukup mengejutkan. Dig dan NSlookup berfungsi, tetapi curl gagal.
Jadi misalnya:
Tetapi ketika saya melihat posting David T di sini, saya memutuskan untuk mencobanya dengan ikal. Jadi sementara ini gagal:
Ini berhasil:
-6 menetapkan bahwa curl menggunakan IPv6 dan -4, untuk menggunakan IPv4. Saya mendapatkan kesalahan yang sama ketika menggunakan wget, jadi pasti beberapa masalah dengan tumpukan IPv6 di Host.
Semua modifikasi lain pada file nsswitch.conf dan file conf BIND lainnya tidak membantu karena masalahnya bukan pada utilitas ini.
sumber
Jika ini terjadi bagi siapa pun yang mencoba mengatur DNS untuk instance AWS EC2, pastikan juga mengaktifkan aturan IPv6 (:: / 0) untuk HTTP dan HTTPS dalam grup keamanan yang digunakan oleh instance tersebut.
sumber
Apakah pemasangan ikal Anda mulus? Jika mungkin coba instal ulang ikal.
Cobalah
curl -v google.com
untuk mendapatkan lebih banyak keluaran verbose untuk debugging.misalnya:
Apakah Anda mendapatkan hasil yang serupa?
sumber
Mungkin ada kesalahan pada file /etc/resolv.conf Anda yang bisa ditoleransi nslookup tetapi curl tidak.
Pertanyaan yang diajukan adalah, "Bagaimana mungkin saya bisa melakukan pencarian host tetapi bukan curl?"
Ini dimungkinkan karena curl menggunakan getaddrinfo () untuk menyelesaikan FQDN, sedangkan nslookup tidak. Sebagai gantinya, saya percaya nslookup mem-parsing /etc/resolv.conf menggunakan beberapa fungsi atau pustaka lainnya, atau melalui kode kustomnya sendiri. Saya tidak melihat kode sumber untuk memverifikasi ini, tetapi Anda dapat membuktikannya dengan menambahkan spasi putih di depan token nameserver di /etc/resolv.conf. nslookup dapat menguraikan ini tetapi getaddrinfo () tidak bisa.
Jika resolv.conf Anda memiliki kesalahan ini, atau kesalahan lain yang ditoleransi oleh nslookup tetapi tidak getaddrinfo (), maka Anda dapat menyelesaikan FQDN dengan nslookup, tetapi Anda tidak akan dapat menggunakan curl pada FQDN itu.
Perbaiki: sebagai root, edit /etc/resolv.conf dan hapus spasi putih terkemuka di baris nameserver.
sumber
strace
Output menunjukkan query DNS yang dikirim tanpa menerima balasan. Itu tidak mendukung hipotesis kesalahan parsing pada/etc/resolv.conf
. Namun, mungkin saja kursornya rusak dan menggunakan kursor yang berbeda dapat membantu.