การแก้ไข DNS ล้มเหลวในการ ping และ curl แต่ไม่สามารถขุดได้


11

ฉันใช้ DNSMasq เป็นเซิร์ฟเวอร์ DNS ในตัวเครื่องดังนั้นฉันจึงสามารถแก้ไขได้*.local.pcfdev.io(ดังที่กล่าวไว้ที่นี่การใช้ PCF Dev ออฟไลน์กับ Mac OS X ) ทุกอย่างทำงานเมื่อฉันตั้งค่าแรก

สองสามวันต่อมาหลังจากที่เตะไม่กี่ MacBook ของฉันในขณะที่นะครับสามารถแก้ไขสิ่งที่ไม่ชอบapi.local.pcfdev.ioใช้หรือcurl pingอย่างไรก็ตามdigทำสิ่งที่ถูกต้อง

$ dig api.local.pcfdev.io

; <<>> DiG 9.8.3-P1 <<>> api.local.pcfdev.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46877
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;api.local.pcfdev.io.       IN      A

;; ANSWER SECTION:
api.local.pcfdev.io.    0       IN      A       192.168.11.11

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Sep  6 10:17:44 2016
;; MSG SIZE  rcvd: 53

$ curl api.local.pcfdev.io
curl: (6) Could not resolve host: api.local.pcfdev.io

ฉันได้ลองเพิ่ม-AlwaysAppendSearchDomainsเป็นอาร์กิวเมนต์/usr/sbin/mDNSResponderใน/System/Library/LaunchDaemons/com.apple.mDNSResponder.plistและเริ่ม mDNSR ตอบกลับด้วยlaunchctlแต่ไม่เป็นประโยชน์


อัพเดท 1

มีบางสิ่งที่ฟังจาก IP ท้องถิ่นที่เหมาะสม:

$ nslookup api.local.pcfdev.io
Server:     127.0.0.1
Address:        127.0.0.1#53

Name:   api.local.pcfdev.io
Address: 192.168.11.11

$ ping api.local.pcfdev.io
ping: cannot resolve api.local.pcfdev.io: Unknown host

$ telnet 192.168.11.11 80
Trying 192.168.11.11...
Connected to 192.168.11.11.
Escape character is '^]'.

HTTP/1.1 400 Bad Request

Connection closed by foreign host.

อัพเดท 2

หลังจากลองคำแนะนำด้านล่างเพื่อลบเซิร์ฟเวอร์ DNS ทั้งหมดออกจากการตั้งค่าเครือข่ายยกเว้น127.0.0.1ฉันไม่สามารถแก้ไขอะไรได้ ฉันจัดการเพื่อรับการดีบักออกจากmDNSResponder:

mDNSResponder[91]:  74: DNSServiceCreateConnection START PID[32612](ping)
mDNSResponder[91]:  74: Error socket 75 created 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(15000, 0, api.local.pcfdev.io., Addr) START PID[32612]()
mDNSResponder[91]:  74: Error socket 75 closed  00000000 00000001 (0)
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) ADD    0 api.local.pcfdev.io. Addr
mDNSResponder[91]:  74: Cancel 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) STOP PID[32612]()
mDNSResponder[91]:  74: DNSServiceCreateConnection STOP PID[32612](ping)

ฉันยังสังเกตเห็นว่าตามที่อธิบายไว้ในคำตอบที่เสนอnslookupและdigไม่ทำให้สิ่งใดถูกบันทึกไว้mDNSResponderแต่มีเครื่องมืออื่น ( ping, curl) ทำ

ดังนั้นดูเหมือนว่าด้วยเหตุผลใดก็ตามdnsmasqไม่ทำงาน (ฉันสามารถสร้างการเชื่อมต่อ TCP ไป127.0.0.1:53) หรือmDNSResponderไม่ได้ใช้


อัพเดท 3

etc/resolve.confหยุดอยู่เมื่ออะแดปเตอร์ไร้สายของฉันทำงาน แต่ฉันไม่ได้เชื่อมต่อกับเครือข่าย นี่อาจเป็นสาเหตุที่เครื่องมือของ CLI ไม่ใช้dnsmasqเซิร์ฟเวอร์ภายใน


อะแดปเตอร์เครือข่ายของคุณอยู่โดยบังเอิญหรือไม่ หากคุณไปที่ 'เครือข่าย' ในการตั้งค่าระบบจะมีจุดสีเขียวติดกับอแด็ปเตอร์ที่มีการกำหนดค่า dnsmasq ไว้เพื่อใช้งานหรือไม่?
มะม่วง

ฉันอยู่บนรถไฟที่ไม่มีไวไฟดังนั้นน่าจะเป็น
EngineerBetter_DJ

1
โดยเฉพาะอะแดปเตอร์ไร้สายถูกปิดหรือไม่ ถ้าเป็นเช่นนั้นโปรดลองอีกครั้งโดยเปิดอแด็ปเตอร์ไร้สาย (แม้ว่าอาจจะไม่ได้เชื่อมต่อกับอินเทอร์เน็ต) เพื่อให้การตั้งค่าทำงานได้ dnsmasq จำเป็นต้องเป็นเซิร์ฟเวอร์ DNS บนเครือข่ายอินเทอร์เฟซที่ใช้งานอยู่
มะม่วง

ขอขอบคุณที่พยายามติดตามสิ่งนี้ ฉันยังดิ้นรนกับสิ่งนี้ไม่เข้าใจว่าทำไม "curl foo: 8989" หาโฮสต์ไม่ได้ แต่ "ขุด foo" ทำได้ ใช่ "curl 172.20.0.17:8989" ใช้งานได้ดี เช่นเดียวกับคุณฉันได้ตั้งค่า DNS เครือข่าย Wi-Fi เป็น 127.0.0.1 (dnsmasq ทำงานในที่เก็บข้อมูลนักเทียบท่า) FWIW ในสถานการณ์ปัจจุบันของฉันปัญหาเฉพาะกับเครือข่าย wifi ที่ฉันเชื่อมต่อ - ทำงานได้ดีบนฮอตสปอตส่วนบุคคลของฉันปัญหาอยู่ในคอฟฟี่ช็อป wifi
jamshid

ฉันไม่ได้ออกแบบโปรแกรมที่เป็นปัญหากลับคืน แต่ความคาดหวังของฉันคือพวกเขากำลังเรียกฐานรหัสความละเอียด DNS ที่แตกต่างกันอย่างสิ้นเชิงและนั่นเป็นสาเหตุที่คุณเห็นความแตกแยก - บางโปรแกรมกำลังชี้เฉพาะที่ ผมอาจจะขุดลงไปcurlหรือwgetหรือได้รับพวกเขาในตราสาร / Profiler / ดีบักและดูสิ่งที่เกิดขึ้นจริงจะทำให้เกิดข้อผิดพลาดที่ไม่สามารถแก้ปัญหา
bmike

คำตอบ:


12

มีปัญหาเดียวกันนี้ ฉันคิดว่าแคช DNS ท้องถิ่นมีข้อมูลที่ไม่ดีจากการทดสอบก่อนหน้านี้ มันได้รับการแก้ไขอย่างรวดเร็วโดย:

sudo killall -HUP mDNSResponder

1
ฉันสังเกตเห็นว่าpingและdigบางครั้งก็ส่งคืนที่อยู่ IP ที่แตกต่างกัน (โดยทั่วไปจะมีตัวแยก DNS ฮอไรซอน) และคำสั่งนี้จะแก้ไข สาเหตุที่แท้จริงคืออะไรฉันไม่แน่ใจ
James

7

ขุดบนมือข้างหนึ่งและขด / pingบนมืออื่น ๆ กำลังดึงข้อมูลจากโฮสต์ที่แตกต่างกัน:

ขุดเคียวรีเซิร์ฟเวอร์ DNS - ในกรณีของคุณ localhost (127.0.0.1) - สำหรับรายการฐานข้อมูล: ที่อยู่ IP ที่เกี่ยวข้องกับ FQDN api.local.pcfdev.io โฮสต์ไม่จำเป็นต้องเรียกใช้หรือมีอยู่เลย

curl / pingพยายามแก้ไขที่อยู่ IP ด้วย mDNSResponder หรือโดยวิธีการอื่น ๆ และในที่สุดก็ใช้งาน / โต้ตอบกับโฮสต์ระยะไกล หากโฮสต์ 192.168.11.11 ไม่ทำงานหรือไม่มีอยู่ทั้งคู่จะล้มเหลว

ตอนนี้รายการ DNS ไม่ถูกต้อง (api.local.pcfdev.io มี IP อื่นมากกว่า 192.168.11.11) หรือรายการ DNS นั้นถูกต้อง แต่โฮสต์ 192.168.11.11 ไม่ทำงาน


การเพิ่ม-AlwaysAppendSearchDomainsเป็นอาร์กิวเมนต์สำหรับ / usr / sbin / mDNSResponder ใน/System/Library/LaunchDaemons/com.apple.mDNSResponder.plistไม่แนะนำ แต่คุณควรเพิ่มลงใน /Library/Preferences/com.apple.mDNSResponder.plist (แหล่งที่มา:) man mDNSResponder:

หากต้องการทำให้ mDNSResponder ทำงานด้วยอาร์กิวเมนต์ที่เป็นตัวเลือกเหล่านี้เมื่อเปิดใช้งานบน OS X 10.11 (El Capitan) และใหม่กว่าให้ตั้งค่า AlwaysAppendSearchDomains หรือ NoMulticastAdvertisements

ในกรณีของคุณไม่จำเป็นต้องตั้งค่าคีย์นี้เนื่องจากไม่ใช่สาเหตุของปัญหาของคุณ


หลังจากขุดลงใน VirtualBox, PCF Dev (ล้มเหลวซ้ำกับ "ข้อมูลประจำตัวที่ไม่ถูกต้อง" บางอย่างพยายามเข้าสู่ VM) และ dnsmasq ฉันแนะนำให้ devolve DNS การสืบค้นไปยัง dnsmasq เท่านั้น:

  • ในการตั้งค่าระบบ> เครือข่าย> อินเตอร์เฟส> เซิร์ฟเวอร์ DNS ลบเซิร์ฟเวอร์ DNS ทั้งหมดยกเว้น 127.0.0.1 และใช้การเปลี่ยนแปลง นอกจากนี้คุณยังอาจกำหนดค่าที่สองสถานที่ที่มีการติดตั้งเพียง 127.0.0.1 และให้ DNS เซิร์ฟเวอร์ปัจจุบันของคุณในการกำหนดค่าอื่น ๆ
  • เพิ่มไฟล์ /usr/local/etc/resolv.dnsmasq.conf ด้วยเนื้อหา

    #use your preferred DNS servers here. In the example I use some Google name servers
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    
  • เพิ่มresolv-file=/usr/local/etc/resolv.dnsmasq.confที่บรรทัด ~ 46 จาก /usr/local/etc/dnsmasq.conf
  • เพิ่มหรือย้ายaddress=/.local.pcfdev.io/192.168.11.11ที่ / ถึงบรรทัด ~ 80 ของ / usr/local/etc/dnsmasq.conf
  • รีสตาร์ท dnsmasq ด้วย:

    sudo launchctl stop homebrew.mxcl.dnsmasq
    sudo launchctl start homebrew.mxcl.dnsmasq
    

ขอบคุณที่สละเวลาตอบ มีแน่นอนบางสิ่งบางอย่างฟังบน192.168.11.11; รายการสาธารณะ DNS ที่แท้จริงสำหรับ*.local.pcfdev.ioชี้กลับไปที่ IP ท้องถิ่นเดียวกันเสมอดังนั้นทันทีที่ฉันเชื่อมต่อกับอินฟอร์เว็บcurlต้องได้รับคำตอบจากเซิร์ฟเวอร์ DNS นั้นและสามารถหาที่อยู่ IP ที่จะใช้
EngineerBetter_DJ

1
ดูเหมือนว่าcurl, pingและไบนารีอื่น ๆ ที่ฉันต้องการที่จะตีสิ่งนี้จะใช้วิธีการหาค่ารายการ DNS (ซึ่งไม่ได้ใช้dnsmasqเซิร์ฟเวอร์ใน localhost) และnslookupและdigมีการใช้วิธีการอื่น ฉันเดาว่าฉันต้องเรียนรู้เพิ่มเติมเกี่ยวกับ mDNSR ตอบกลับ!
EngineerBetter_DJ

@EngineerBetter คุณมีรายการอื่น ๆ ในการตั้งค่าระบบ> เครือข่าย> ส่วนต่อประสาน> DNS มากกว่า 127.0.0.1 หรือไม่ - ฉันจะติดตั้งทั้งชุด (VBox, PCF Dev และอื่น ๆ ) และตรวจสอบ ... การตั้งค่าพิเศษใด ๆ
klanomath

ขอขอบคุณอีกครั้งที่สละเวลาเพื่อช่วยฉันในเรื่องนี้ อัปเดตคำถามแล้วยังไม่มีโชค
EngineerBetter_DJ

0

ฉันใช้เวลานานกว่านี้สำหรับฉันในการแก้ปัญหานี้เกินกว่าที่ควรจะเป็น หลังจากรีสตาร์ท mDNSResolver หลายสิบครั้งตามที่แนะนำบนเธรดอื่น:

sudo killall -HUP mDNSResponder

ในที่สุดฉันก็ลองอย่างอื่น ฉันปิดการใช้งาน Wi-Fi และลบเครือข่ายที่ฉันต้องการทั้งหมด จากนั้นฉันสถาปนาการเชื่อมต่อ Wi-Fi ขึ้นใหม่และทุกอย่างทำงานได้ดี:

  1. เมนู Apple -> การตั้งค่าระบบ -> Wi-Fi (ด้านซ้าย)
  2. 'ปิด Wi-Fi' แล้วเลือก 'ขั้นสูง'
  3. ลบการเชื่อมต่อ Wi-Fi ที่คุณมีปัญหา (หรือทั้งหมดถ้าคุณต้องการ) ทำได้โดยเลือกเครือข่าย Wi-Fi ที่คุณต้องการลบและกด "-"
  4. คลิก 'ใช้' และ 'ตกลง'
  5. เปิด Wi-Fi อีกครั้ง
  6. เลือกเครือข่าย Wi-Fi ของคุณและเข้าสู่ระบบอีกครั้ง

YMMV แต่นี่คือสิ่งที่ได้ผลสำหรับฉันในที่สุด มันน่าจะเป็นสิ่งแรกที่ฉันได้ลอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.