ลำดับการค้นหา Mac OSX Lion DNS [ปิด]


96

หลังจากอัปเกรดเป็น Mac OSX Lion ฉันพบว่า / etc / hosts ไม่ได้ถูกค้นหาตั้งแต่แรกสำหรับการแก้ปัญหาชื่ออีกต่อไป สิ่งนี้นำไปสู่ผลข้างเคียงเช่น:

  1. รายการใน / etc / hosts ได้รับการแก้ไขช้าอย่างเจ็บปวด
  2. คุณไม่สามารถแทนที่โดเมนที่มีอยู่ได้เช่น 127.0.0.1 www.google.com
  3. หากคุณได้รับรายการโดเมนการค้นหาจาก DHCP สมมติว่า .lan และคนตลกบางคนกำหนดค่า localhost.lan เป็นอย่างอื่นแล้ว 127.0.0.1 ใน DNS ในเครื่องคุณจะไม่สามารถเข้าถึง localhost ของคุณได้อีกต่อไป

พฤติกรรมนี้มีจุดมุ่งหมายหรือไม่? มันสมเหตุสมผลหรือไม่? และที่สำคัญที่สุดฉันจะกลับมาใช้พฤติกรรมเดิม ๆ ได้อย่างไร


12
คำถามที่เป็นประโยชน์สุด ๆ - แปลกใจแปลกใจที่ปิดเป็นหัวข้อ
Sebastian Patten

อย่างน้อยก็ยังไม่ลบกระทู้ .. นี่ช่วยชีวิตฉันเบคอน ฉันเปลี่ยนโฮสต์ทั้งหมดของฉันจาก X.local เป็น X.lhost และปัญหาก็หายไป โปรดทราบว่าฉันเป็นแฟนตัวยงของ xip.io เช่นfoo.127.0.0.1.xip.io
Tim

คำตอบ:


78

ฉันคิดว่าเขาสำคัญคือ Lion จัดการ. local TLD แตกต่างกันเพราะสงวนไว้สำหรับคุณลักษณะ Multicast DNS บางอย่าง (ใช้โดย Bonjour) วิธีเดียวที่ฉันพบในการแก้ปัญหานี้คือการใช้ TLD อื่นสำหรับโฮสต์การพัฒนา (เช่น: .dev) มันใช้ได้ดีสำหรับฉันหวังว่ามันจะเป็นประโยชน์กับคนอื่น ๆ !


ขอบคุณ. มีประโยชน์มากแน่นอน
Cade

5
ความคิดแรกของฉันคือ "ง่อย" อย่างไรก็ตามฉันก็สะดุดกับโพสต์สแต็กอื่น ๆ นี้และเปลี่ยนท่าทางของฉัน: serverfault.com/questions/17255/…
Matt Beckman

หมายเหตุประการหนึ่ง - หากคุณใช้ chrome ในการพัฒนาโดเมนระดับบนสุดที่ไม่ได้มาตรฐานจะถูกตีความว่าเป็นการค้นหา คุณอาจต้องทำบางอย่างเช่น. dev.com เพื่อทำการค้นหาโดเมนจริง ฉันไม่แน่ใจว่าจะทำอย่างไรให้สวยหรู
bbrame

5
@bbrame: คุณสามารถป้อนโดเมนท้องถิ่นของคุณกับโครงการ URL นี้http://foo.dev/; หลังจากนั้น Chrome จะรับรู้ว่าfoo.devเป็นโดเมนไม่ใช่แบบสอบถาม
ปืน

หรือคุณสามารถใช้เครื่องมือ dsclเพื่อเพิ่มข้อยกเว้น
Artur Bodera

51

เกี่ยวกับการลบล้างโดเมนในไฟล์โฮสต์ฉันพบว่าในบางสถานการณ์ Lion จะค้นหาที่อยู่ IPv6 สำหรับโดเมนหากตรวจพบว่าโดเมนไม่สามารถเข้าถึงได้ผ่านเครือข่าย IPv4

127.0.0.1ผมค้นพบนี้เมื่อผมสังเกตเห็นโฆษณาบางอย่างที่ผมไม่เคยเห็นมาก่อนบนเสือดาวหิมะเพราะผมเปลี่ยนเส้นทางโดเมนโฆษณาเพื่อ ฉันยิง wirehark ขึ้นมาและสังเกตเห็นAAAAการสืบค้น (ระเบียน IPv6 DNS) ตามAแบบสอบถาม IPv4 (IPv4) เซิร์ฟเวอร์โฆษณามีที่อยู่ IPv6 และสามารถให้บริการเนื้อหาของฉันได้

วิธีแก้ปัญหานี้มี

::1 mydomain.com

รายการสำหรับทุก

127.0.0.1 mydomain.com

รายการในไฟล์โฮสต์ของคุณ

ที่น่าสนใจคือถ้าคุณมีเว็บเซิร์ฟเวอร์ในเครื่องทำงานอยู่127.0.0.1:80และเบราว์เซอร์ของคุณได้รับการตอบกลับจากเว็บเซิร์ฟเวอร์ (ข้อผิดพลาดหรืออื่น ๆ ) จะไม่มีการAAAAสืบค้นเนื่องจากดูเหมือนว่าจะพอใจที่การเชื่อมต่อ TCP เป็นไปได้อย่างน้อยที่สุด


ในบันทึกที่เกี่ยวข้องหากคุณใช้งานไฟล์โฮสต์เป็นจำนวนมาก (สำหรับการบล็อกโฆษณาการพัฒนาเว็บในพื้นที่ ฯลฯ ) คุณอาจต้องการตรวจสอบการเรียกใช้ตัวแก้ไข DNS ในเครื่องของคุณเอง มีดิสก์ / ซีพียูจำนวนมากที่ต้องอ่าน/etc/hostsในทุกคำขอดังนั้นจึงเป็นประโยชน์สูงสุดของคุณที่จะทำให้ไฟล์นั้นมีน้ำหนักเบามาก

ข้อดีอย่างหนึ่งของการเรียกใช้บางอย่างเช่นdnsmasqในเครื่อง (นอกเหนือจากการเพิ่มประสิทธิภาพที่สำคัญ) คือคุณสามารถเปลี่ยนเส้นทางโดเมนระดับบนสุดทั้งหมดกลับไปยังเครื่องในพื้นที่ของคุณได้ สิ่งนี้ช่วยให้คุณมีเนมสเปซ * .dev ทั้งหมดสำหรับการพัฒนา (เช่น) โดยไม่ต้องป้อนแต่ละโดเมนที่คุณต้องการแก้ไขในเครื่อง/etc/hosts


3
ขอบคุณมากสำหรับสิ่งนี้ การรอ 10-30 วินาทีเพื่อทดสอบการเปลี่ยนแปลงรหัสของฉันทำให้ฉันแทบคลั่งและคุณช่วยฉันประหยัดเวลาได้มากโดยไม่ต้องคิดออกด้วยตัวเอง
Zack Angelo

1
ฉันมีปัญหาเดียวกันและสิ่งนี้ได้แก้ไขปัญหาของฉันทันที! ดี.
cstrat

1
+1 นี่เป็นเรื่องน่ารู้สำหรับทุกคนที่ค้นหา "ทำไมไฟล์โฮสต์ของฉันไม่ทำงาน" ฉันอาจถามคำถามนั้นที่นี่เพื่อให้คุณสามารถใส่คำตอบเดียวกันที่นั่นและทำให้ง่ายต่อการค้นหาผ่านเครื่องมือค้นหา!
Cape1232

ไม่ควรมีดิสก์ I / O เพิ่มขึ้นอย่างเห็นได้ชัดจากการอ่าน/etc/hostsระบบปฏิบัติการจะแคชไฟล์หากมีการใช้งานบ่อยๆ
Dan Pritts

ผู้ใช้ที่ LAN รองรับ IPv6 (เกือบจะเป็นปี 2016 แล้ว!) จะพบปัญหานี้นับจากนี้ไปจนกว่า IPv4 จะหายไปอย่างสมบูรณ์ .... หรือจนกว่า Apple จะรับปัญหาและแก้ไขภายใน! ควรพิจารณาคำตอบของ Jean-Baptiste ด้วย (เช่นใช้. dev แทน. local สำหรับสภาพแวดล้อม dev ของคุณ)
ไม่มีใครเทียบได้

17

ปัญหาคือฉันเชื่อมโยงไฟล์ / etc / hosts ถ้า / etc / hosts เป็นไฟล์ธรรมดาทุกอย่างก็โอเค


1
ฉันมีปัญหาเดียวกัน อย่างไรก็ตามไฟล์ / etc / hosts ของฉันเป็นไฟล์ปกติ ความช่วยเหลือใด ๆ เกี่ยวกับเรื่องนี้จะได้รับการชื่นชม
แมตต์

4
สิ่งนี้ดูเหมือนจะเป็นปัญหาของฉันเช่นกัน ฉันมี symlink ไปยังไฟล์ในโฟลเดอร์ดรอปบ็อกซ์ซึ่งเคยใช้งานได้และฉันคิดว่าฉลาดมาก ดูเหมือนว่า Apple จะไม่พบความฉลาดนี้อีกต่อไป ฉันยังทำการรีสตาร์ทจริงเต็มรูปแบบโดยใช้ Option-restart หลังจากย้ายจาก symlink ไปยังไฟล์จริง ตอนนี้ทุกอย่างดูมีความสุข
Tom S.

2
รายการในไฟล์โฮสต์ที่เชื่อมโยงกันจะใช้ได้หากไม่สามารถแก้ไขได้เป็นอย่างอื่นแสดงว่าไฟล์โฮสต์ที่เชื่อมโยงกันจะถูกตรวจสอบก็ต่อเมื่อไม่สามารถแก้ไขที่อยู่ได้ เมื่อไฟล์โฮสต์เป็นไฟล์ปกติจะถูกตรวจสอบก่อนรูปแบบความละเอียดอื่น ๆ ดังนั้นหากคุณต้องการแทนที่โดเมนที่มีรายการ DNS ที่ถูกต้องจริงไฟล์โฮสต์ของคุณจะต้องเป็นไฟล์ไม่ใช่ซิมลิงค์
cerberos

1
สำหรับบันทึกนี้ยังคงเป็นเช่นนั้นใน Mavericks (10.9) จะเป็นประโยชน์หากมีคนยืนยันได้ว่า Yosemite ทำอะไร ...
William Turrell

1
โยเซมิตีก็ทำเช่นกันเพิ่งพบปัญหานี้ นี่เป็นพฤติกรรมที่แปลกมาก
Vytautas Gimbutas

14

อัปเดต (2): OSX 10.10.5 นำการกลับมาของmDNSResponder.

อัปเดต: OSX 10.10 Yosemite ได้แทนที่ mDNSResponder ด้วย "discoveryd" ฉันไม่ได้อัปเกรดดังนั้นฉันจึงไม่แน่ใจเกี่ยวกับพฤติกรรมที่ค้นพบโดยไม่มีการค้นหา DNS และ/etc/hosts.

ตัวแก้ไข DNS ของระบบบน Lion เป็นmDNSResponderกระบวนการ

คุณอาจกำลังคิดว่า "แต่ mDNSResponder คือตัวตอบกลับ dns แบบหลายผู้รับ" คุณถูก; นั่นคือสิ่งที่เดิมมีไว้สำหรับและยังคงทำหน้าที่นี้ อย่างไรก็ตามใน MacOS เวอร์ชันใหม่กว่าจะทำการค้นหาโฮสต์มาตรฐานด้วย

ใน Lion ดูเหมือนว่าจะไม่อ่านซ้ำโดยอัตโนมัติ/etc/hostsเมื่อมีการเปลี่ยนแปลงอย่างน้อยก็ไม่เสมอไป การฆ่าmDNSResponder(และปล่อยให้เริ่มต้นใหม่โดยอัตโนมัติ) ดูเหมือนจะช่วยแก้ปัญหาได้

sudo killall mDNSResponder

ควรทำเคล็ดลับ

ด้านล่างนี้คือคำตอบเดิมของฉันสำหรับลูกหลาน ฉันคิดว่ามันอาจยังคงเป็นปัญหาในบางกรณี

ตรวจสอบให้แน่ใจว่า/etc/hostsไฟล์ของคุณเป็นไฟล์ข้อความสไตล์ยูนิกซ์โดยมีฟีดบรรทัดเป็นตอนจบแทนที่จะเป็นของ cr

การแก้ไขด้วย TextWrangler หรือโปรแกรมแก้ไขข้อความ unix ควรเก็บรักษาไฟล์ไว้

หากไฟล์ของคุณยุ่งอยู่แล้วให้ลองแก้ไข

tr '\015' '\012' < /etc/hosts > /tmp/hosts.$$
mv /etc/hosts /etc/hosts.bad
mv /tmp/hosts.$$ /etc/hosts
# fix up permissions while we are at it
chown root:wheel /etc/hosts
chmod 644 /etc/hosts

เครดิตสำหรับการแก้ไขนี้ไปที่:

http://techpatio.com/2011/guides-how-to/fixed-mac-osx-lion-etc-hosts-bugs-dns


วิธีนี้อาจแก้ปัญหากับ DNS resolver daemon ที่ขัดข้อง แต่ไม่สามารถแก้ปัญหาในการแก้ไขโฮสต์ไปยังที่อยู่ IP ของ LAN ที่มักพบในสภาพแวดล้อม dev การตอบกลับของ @guns ด้านล่างจะเป็นคำตอบที่เหมาะสมสำหรับคนส่วนใหญ่ที่พบคำถามนี้ในการค้นหา แม้ว่า Jean-Baptiste-MONIN จะมีคำตอบด้วยข้อดีเช่นกัน
ไม่มีใครเทียบได้

สามารถแก้ปัญหาการเปลี่ยนแปลง / etc / hosts ที่ไม่ถูกสังเกตได้
Dan Pritts

ฉันใช้เซียร์ราสูงและคำตอบนี้ช่วยแก้ปัญหานามแฝงได้ขอบคุณ
absoluteutkarlos

4

ive มีปัญหานี้มาระยะหนึ่งแล้วเนื่องจากฉันทำงานเป็นทีมนักพัฒนาจึงจำเป็นต้องใช้. local แทนที่จะเป็น. dev หรือ. localhost ฉันพบว่าบทความนี้มีประโยชน์มาก

iTand.me - Lion โดเมนท้องถิ่นและโฮสต์อื่น ๆ ..

สรุป;

แต่ถ้าคุณต้องใช้. local ทางออกที่ดีที่สุดที่ฉันพบคือยูทิลิตี้ dscl การใช้มันตรงไปตรงมามาก ในการเพิ่มโฮสต์ที่ชื่อว่า mydev.local และชี้ไปที่ localhost ให้ทำดังนี้:

sudo dscl localhost -create /Local/Default/Hosts/mydev.local IPAddress 127.0.0.1

เพื่อดูโฮสต์ที่กำหนดในปัจจุบันและ IPs ทั้งหมด

sudo dscl localhost -list /Local/Default/Hosts IPAddress

และในการลบโฮสต์:

sudo dscl localhost -delete /Local/Default/Hosts/mydev.local

โดยรวมแล้วค่อนข้างตรงไปตรงมาและใช้งานได้ดี ฉันยังคงต้องการที่จะแก้ไข / etc / hosts แทน แต่นี่เป็นทางเลือกที่ดีกว่าในการเปลี่ยนชื่อเซิร์ฟเวอร์. local ทั้งหมดของเรา


3
เมื่อเพิ่มชื่อโฮสต์ด้วยวิธีนี้ดูเหมือนจะไม่ได้ทำอะไรเลย ไม่สามารถ ping ที่อยู่ได้ ตัวอย่าง: sudo dscl localhost -create / Local / Default / Hosts / test1 IPAddress 127.0.0.1 ping test1 ping: ไม่สามารถแก้ไข test1: Unknown host
oligofren

3

ก่อนที่จะย้ายจาก Snow Leopard เป็น Lion ฉันมีรายการเฉพาะแอปหลายรายการใน/etc/hostsลักษณะนี้:

127.0.0.1 foo.bar.local

หลังจากการอัปเดตการโหลดแอปในพื้นที่ของฉันช้ามาก ฉันสังเกตเห็นว่าความล่าช้าเกิดขึ้นก่อนที่คำขอจะปรากฏในไฟล์บันทึกและเมื่อเป็นเช่นนั้นแอปเองก็เร็วเหมือนปกติ

ตอนนี้ฉันมีสองบรรทัดต่อแอพดังนี้:

127.0.0.1 foo.bar.local
::1       foo.bar.local

... และทุกอย่างก็รวดเร็วอีกครั้ง

เห็นได้ชัดว่านี่เป็นการเพิ่มที่อยู่ IPv6? ฉันไม่ค่อยเข้าใจจริง ๆ แต่มันได้ผล


ไม่มีอะไรได้ผลสำหรับฉัน แต่สิ่งนี้ทำได้ในทันที - ขอบคุณนาธาน!
foiseworth

3

สถานการณ์ของฉันคล้าย ๆ กัน แต่ความล่าช้าเพียง 5 วินาทีเกิดขึ้นเฉพาะกับ URL ที่ลงท้ายด้วย ".local" เมื่อดูไซต์ที่ลงท้ายด้วย ".dev" ไม่มีความล่าช้า

นักพัฒนาอื่น ๆ บางคนในสำนักงานของฉันมีปัญหานี้ในขณะที่บางคนไม่พบ ฉันหวังว่าจะได้รับการแก้ไขง่ายๆและฉันไม่ต้องการเปลี่ยนชื่อไซต์เป็น ".local" เนื่องจากการอ้างอิงอื่น ๆ

ฉันรันคำสั่งต่อไปนี้ใน Terminal และทำให้ผลลัพธ์ของฉันแตกต่างกับผู้ใช้รายอื่นในสำนักงาน

scutil --dns

ส่วนนี้เป็นข้อแตกต่างเพียงประการเดียว:

resolver #2
  domain   : 00000000.members.btmm.icloud.com
  options  : pdns
  timeout  : 5
  order    : 150000

Mac ของฉันเชื่อมโยงกับบัญชี iCloud ของฉันและฉันเปิดใช้งาน Back To My Mac แล้ว เมื่อฉันปิดใช้งาน Back To My Mac ตัวแก้ไขเพิ่มเติมก็หายไปและความล่าช้า 5 วินาทีก็หายไป


1

ว้าวช่างเป็นฝันร้าย ฉันได้อ่านทุกอย่างเกี่ยวกับเรื่องนี้แล้วและทุกสิ่งที่แนะนำจนถึงตอนนี้นั้นใกล้เคียงกับสิ่งที่ฉันประสบอยู่ แต่ไม่มีวิธีแก้ปัญหาใดที่เหมาะกับฉัน

และฉันก็รู้ว่าทำไม

ไม่เหมือนกับคนอื่น ๆ ฉันไม่ได้ใช้ / etc / hosts เพื่อตั้งค่าโดเมนท้องถิ่น ไฟล์ / etc / hosts ของฉันเป็นสต็อกซึ่งมีเฉพาะรายการที่จำเป็นสำหรับอินเตอร์เฟสลูปแบ็คและโฮสต์การออกอากาศ ยิ่งไปกว่านั้นมันเป็นไฟล์ Unix ที่เข้ารหัสอย่างถูกต้องเนื่องจากฉันเป็นคนประเภทที่จะแก้ไขจากบรรทัดคำสั่งโดยใช้ emacs เท่านั้น และขอขอบคุณพระเจ้าฉันไม่จำเป็นต้องใช้เซิร์ฟเวอร์ DNS ของตัวเองเช่น DNSmasq เพื่อแก้ไขปัญหา

(เพื่อความชัดเจนอาการที่ทำให้ฉันมาถึงปัญหานี้คือ emacs ใช้เวลาประมาณ 10 วินาทีในการเริ่มต้น แต่เฉพาะเมื่อฉันเปิด wifi ถ้าฉันปิด wifi emac จะเริ่มขึ้นทันทีตามที่คาดไว้)

วิธีแก้ปัญหาของฉัน: แล็ปท็อปของฉันมีชื่อ "เทอร์มิเนเตอร์" (ใช่ภายนอกอะลูมิเนียมมันวาวทำให้ฉันนึกถึงตัวละครอาร์โนลด์ชวาร์เซเน็กเกอร์) ฉันแค่ต้องการเพิ่มรายการไปยัง / etc / hosts สำหรับชื่อของเครื่อง:

127.0.0.1   terminator
::1         terminator

ฉันพบชื่อโฮสต์ของฉันโดยเรียกใช้คำสั่งง่ายๆในเทอร์มินัล:

hostname

... ซึ่งกลับมาพร้อมกับผลลัพธ์: "terminator" หลังจากเปลี่ยน / etc / hosts ให้มีสองรายการนั้นตอนนี้ emac สามารถแก้ไขชื่อแล็ปท็อปของฉันได้อย่างรวดเร็ว

ฉันหวังว่านี่จะช่วยใครบางคนได้


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

ยิง. นี่ไม่ใช่มติถาวรสำหรับฉัน ปัญหากลับ. โปรดทราบว่าเมื่อฉันอ่านสิ่งนี้อีกครั้งปัญหาของฉันไม่ใช่ของคุณ ...
Jeremy Carlson

0

ฉันมีปัญหาความเร็วในการใช้ OSX Lion เป็นกล่องพัฒนาเว็บ ... การใช้คำแนะนำร่วมกันฉันใช้การปิดใช้งานเครือข่าย ipv6 และกำหนดเส้นทาง ipv6 ไปยัง localhost6 ... สิ่งต่าง ๆ เร่งขึ้นไม่น้อย ...

sudo networksetup -setv6off Ethernet

/ etc / โฮสต์ ...

127.0.0.1    localhost
127.0.0.1    dev.aliasdomain.com
... 
::1          localhost6 

0

ฉันคิดว่ามีการแก้ไขข้อบกพร่องบางอย่าง ฉันพบปัญหามากมายที่กล่าวถึงและดูเหมือนว่าไม่มีสิ่งเหล่านี้ใช้ในขณะนี้ (ตัวอย่างเช่นการใส่นามแฝงหลายชื่อในบรรทัดเดียวตอนนี้ใช้ได้ผลดีสำหรับฉัน)

ไม่ว่าในกรณีใดก็ตามด้วย Lion Apple ได้ทำการเปลี่ยนแปลงอย่างมากกับ mDNSResponder ซึ่งจัดการการค้นหา DNS ทั้งหมดและ (อย่างน้อยก็มี Lion) จัดการแคช / etc / hosts ด้วย สำหรับฉันการค้นหาไปข้างหน้าก็ใช้งานได้แล้ว แต่การค้นหาแบบย้อนกลับ (เช่นการค้นหา 1.2.3.4 แทน google.com) ไม่ได้ผล

หลังจากเจ็บปวดมากดูเหมือนว่า mDNSResponder จะแปลงการค้นหานี้เป็น 4.3.2.1.in-addr.arpa และทำการค้นหาชื่อ นี่อาจเป็นวิธีที่ DNS ชอบใช้งาน แต่ใช้ไม่ได้กับ / etc / hosts

เว้นแต่คุณจะเพิ่มนามแฝง 4.3.2.1.in-addr.arpa สำหรับแต่ละโฮสต์โดยที่ 4.3.2.1 คือที่อยู่ IP ในลำดับตรงข้ามกับที่คุณคุ้นเคย สิ่งนี้แก้ไขทุกอย่างให้ฉัน นี่คือตัวอย่างรายการ / etc / hosts:

1.2.3.4 foo foo.example.com alias.example.com 4.3.2.1.in-addr.arpa

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