เป็นไปได้อย่างไรที่ฉันสามารถทำการค้นหาโฮสต์ แต่ไม่เป็นขด


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 ฯลฯ ?
Sandman4

ฉันเห็นคุณทำเครื่องหมายคำตอบ แต่ปัญหาและวิธีแก้ไขคืออะไร มันเป็นปัญหาของ SELinux หรือไม่?
Belmin Fernandez

"การแก้ปัญหา" เป็นเพียงแค่เครือข่ายที่ดูเหมือนจะกิบบ์ขวา ฉันไม่ได้ใช้งาน SELinux ใด ๆ บนแล็ปท็อปและ "เครือข่าย" ได้รับการจัดการโดยเราเตอร์ไร้สายที่ซื้อจากร้านค้าที่เส็งเคร็ง คำตอบนั้นเป็นคำตอบที่ช่วยให้ฉันคิดออกว่าฉันกำลังทิ้งแพ็กเก็ตไปทั่วสถานที่ดังนั้นฉันจึงคิดว่ามันเป็นสิ่งที่ฉันไม่สามารถแก้ไขได้และให้เครดิตกับผู้ชายคนนั้น ทำไมคุณมีความคิดที่ดีกว่า
Daniel Quinn

pingจะเรียก getaddrinfo ด้วยพารามิเตอร์ที่แตกต่างกันเล็กน้อยgithub.com/iputils/iputils/blob/master/ping/ping.c#L574 ai_protocol = IPPROTO_UDPบางทีนั่นอาจทำให้สับสน getaddrinfo แตกต่างกันอย่างไร? ดูเหมือนว่า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

@Daniel Quinn คุณสามารถโพสต์ผลลัพธ์ของ/tmp/wtf?
Sachin Divekar

นี่คือผลลัพธ์: pastebin.com/1y5Z48NK
Daniel Quinn

อืมดูเหมือนว่ากำลังทำแบบสอบถามถึง 192.168.1.201 คุณสามารถ "โฮสต์ google.com 192.168.1.201" เพื่อสติได้ไหม โดยทั่วไปแล้วการค้นหา DNS โดยเฉพาะกับเซิร์ฟเวอร์ DNS ของคุณ
cjc

เสร็จสิ้น (เพิ่มลงในคำถาม) และใช้งานได้ดี - ซึ่งสมเหตุสมผลแล้วตั้งแต่การออกโฮสต์โดยไม่มีอาร์กิวเมนต์เซิร์ฟเวอร์ทำงานได้อย่างถูกต้องเช่นกัน ดูเหมือนว่าเป็นเพียงการโทร HTTP จริงด้วยเช่นกันเนื่องจาก ICMP (ส่วนใหญ่จะลดการส่ง Ping ครั้งแรก) ทำงาน
Daniel Quinn

8

ใช้สิ่งนี้: https://www.centos.org/modules/newbb/viewtopic.php?topic_id=39343

ฉันพบคำสั่งสำคัญที่ช่วยฉันแก้ไขปัญหา:

[root @ localhost ~] # wget -6 URL ล้มเหลว

[root @ localhost ~] # wget -4 URL ทำงานแล้ว

เป็นสิ่งที่ต้องทำกับ ipv6 สแต็คเริ่มต้นที่ทำให้เกิดปัญหากับบาง utils ปิดการใช้งาน ipv6 เพื่อแก้ไข


5

/etc/nsswitch.confตรวจสอบของคุณ ถ้าhostsสายบอกว่าชอบอะไร

hosts:      files dns

ฉันสับสนเหมือนคุณ แต่ถ้ามันบอกว่าชอบ

hosts:      files

ดังนั้นความจริงที่ว่า DNS กำลังทำงาน (ดูผลลัพธ์ของhostคำสั่ง) จะไม่ช่วยให้การขดซึ่งเป็นการแก้ปัญหาชื่อผ่านไลบรารีระบบปฏิบัติการมาตรฐานซึ่งได้รับการบอกว่าจะไม่ใช้ DNS


อืมมม ฉันไม่ได้คิดอย่างนั้น แต่ฉันเพิ่งตรวจสอบและมันก็บอกว่าfiles dnsดังนั้นฉันเดาว่ามันไม่ใช่ :-(
Daniel Quinn

1
ในเหมืองมีสิ่งต่าง ๆ มากมายในสายโฮสต์ "dns" ถูกระบุไว้หลังจาก "[NOTFOUND = return]" ซึ่งในความเข้าใจของฉันทำให้ระบบไม่พบการส่งคืนก่อนที่จะตรวจสอบเซิร์ฟเวอร์ DNS ที่กำหนดค่า! การย้าย "dns" ไปก่อนสิ่งที่พบจะแก้ไขระบบของฉัน (ต้องรีบูต)
trebormf

3

ฉันมีปัญหาเดียวกัน - โฮสต์, nslookup แก้ไขตกลง, ขด - ไม่สามารถใช้ชื่อโฮสต์เดียวกันได้

หลังจากการสื่อสาร tcpdumping ฉันพบว่า curl พยายามสร้างการเชื่อมต่อ TCP (นอกเหนือจาก UDP) ไปยังพอร์ต DNS ซึ่งถูกปิดในเราเตอร์ของฉัน หลังจากพอร์ต tcp 53 ถูกเปิดใช้งาน curl เริ่มทำงานได้อย่างไม่มีที่ติ

อีกสิ่งที่แปลกก็คือว่าปัญหานี้ไม่ปรากฏขึ้นหากเซิร์ฟเวอร์ DNS ติดตั้งผูกปกติ ถ้าฉันใช้ฝังตัวในเซิร์ฟเวอร์ DNS เราเตอร์ก็จะพยายามใช้พอร์ต TCP แม้ว่าจะได้รับคำตอบ (!) ผ่าน UDP 2ms มาก่อน ฉันคิดว่านี่เป็นข้อผิดพลาด


1

ฉันมีปัญหาเดียวกันนี้ใน VE ของฉัน (ทำงานบนแล็ปท็อปของฉัน) วันนี้และพบว่ามันค่อนข้างน่าแปลกใจ ขุดและ NSlookup ทำงานได้ แต่ขดล้มเหลว

ตัวอย่างเช่น:

# 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  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 stack บนโฮสต์

การแก้ไขอื่น ๆ ทั้งหมดไปยังไฟล์ nsswitch.conf และไฟล์ BIND conf อื่น ๆ ไม่ได้ช่วยเพราะปัญหาไม่ได้อยู่ที่ยูทิลิตี้นี้


1

หากสิ่งนี้เกิดขึ้นสำหรับทุกคนที่พยายามตั้งค่า DNS สำหรับอินสแตนซ์ AWS EC2 ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานกฎ IPv6 (:: / 0) สำหรับ HTTP และ HTTPS ในกลุ่มความปลอดภัยที่ใช้โดยอินสแตนซ์นั้น


0

การติดตั้งขดของคุณราบรื่นหรือไม่? ถ้าเป็นไปได้ลองลองติดตั้งม้วนงออีกครั้ง

ลองcurl -v google.comรับเอาต์พุต verbose เพิ่มเติมสำหรับการดีบัก

เช่น:

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'

คุณได้รับผลลัพธ์ที่คล้ายกันหรือไม่


เหมือนกัน :-( ฉันได้อัปเดตคำถามด้วยผลลัพธ์แล้ว
Daniel Quinn

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 () คุณสามารถแก้ไข FQDN ด้วย nslookup ได้ แต่คุณจะไม่สามารถใช้ curl กับ FQDN นั้นได้

แก้ไข: ในฐานะ root ให้แก้ไข /etc/resolv.conf และลบช่องว่างนำหน้าในบรรทัดเนมเซิร์ฟเวอร์


straceแสดงให้เห็นว่าการส่งออกสอบถาม DNS ถูกส่งโดยไม่ได้รับการตอบกลับ /etc/resolv.confแต่นั่นไม่ได้สนับสนุนสมมติฐานของความผิดพลาดในการแยกวิเคราะห์ที่อยู่บน อย่างไรก็ตามมีความเป็นไปได้ที่ผู้เรียกซ้ำจะเกิดข้อผิดพลาดและการใช้ตัวเรียกคืนที่แตกต่างกันอาจช่วยได้
kasperd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.