ตั้งค่าเซิร์ฟเวอร์ DNS บน OS X แม้ว่าจะไม่มีการเชื่อมต่ออินเทอร์เน็ต


17

ฉันได้ติดตั้งเซิร์ฟเวอร์ DNS ที่กำหนดค่าแล้ว (อินสแตนซ์ในเครื่องของ Dnsmasq) ซึ่งแก้ไขเป็น localhost ได้ตามที่ต้องการทั้งหมดตกลง

เมื่อฉันออฟไลน์มันจะหยุดทำงานเนื่องจากเนื้อหา OS X ว่างของ resolv.conf และไม่สนใจความพยายามในการสะท้อนการเปลี่ยนแปลงในไฟล์นี้

ความคิดใด ๆ วิธีกำหนดค่า DNS แม้ในขณะออฟไลน์

ปัญหาที่คล้ายกัน (ยังไม่ได้แก้ไข): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

แรงจูงใจหลักคือการพัฒนาแอพพลิเคชั่น RoR ที่ใช้โดเมนย่อยเป็นรหัสบัญชีได้อย่างง่ายดาย และคุณไม่สามารถใช้ 127.0.0.1 * .yourapp.local ใน / etc / hosts ผู้ชายบางคนที่ลงทะเบียนโดเมน smackaho.st และ srt DNS สำหรับมันเช่น. smackaho.st ที่ 127.0.0.1 แต่ก็ยังคุณไม่สามารถใช้งานได้เมื่อคุณทำงานออฟไลน์

แก้ไข: ลองใช้คำสั่ง scutil แต่ดูเหมือนว่าคุณสามารถเปลี่ยน DNS ได้หากออฟไลน์

หมายเหตุ: เมื่อคุณปิดอินเทอร์เฟซทั้งหมดคุณจะไม่สามารถตั้งค่าเซิร์ฟเวอร์ DNS ใน Pref ได้ แผงหน้าปัด.


ที่เกี่ยวข้อง: dnsmasq ไม่ทำงานหากไม่มีการเชื่อมต่ออินเทอร์เน็ตใน OS X Yosemiteสำหรับผู้ใช้ขั้นสูง (ไม่มีวิธีแก้ปัญหา แต่มีการอ้างอิงบางอย่าง)
Arjan

คำตอบ:


29

ดูการปรับปรุงด้านล่าง!

ฉันยังสนุกกับการใช้ Dnsmasq บนเครื่องของฉันและฉันก็มีปัญหานี้เช่นกัน นี่คือทางออก:

จากman 5 resolver:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/ไม่ปรากฏตามค่าเริ่มต้น คุณต้องสร้างมันเอง

ยังมาจากหน้าคน:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

ดังนั้นหากคุณต้องการสอบถาม DNS ทั้งหมดสำหรับโดเมนระดับบนสุดของdevที่จะกำหนดเส้นทางไปยัง nameserver ท้องถิ่นคุณจะ:

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configdไม่เปลี่ยนแปลงไฟล์ใน/etc/resolver/ดังนั้นการตั้งค่านี้จะคงอยู่ผ่านการเปลี่ยนแปลงและรีบูตเครือข่าย

อัปเดต 17 กรกฎาคม 2555

น่าเสียดายที่ OS X Lion ตัวแก้ไขอันดับต้น ๆ (ดังแสดงโดยscutil --dns) จะหายไปเมื่อไม่มีส่วนต่อประสานที่ใช้งานอยู่:

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

ขอให้สังเกตว่าตัวแก้ไข # 1 ว่างเปล่า แต่รายการเนมเซิร์ฟเวอร์ที่ได้รับ / etc / resolver ยังคงอยู่

ปรากฎว่าเนื่องจากคุณสามารถระบุโดเมนตัวจำแนกโดยตรงในไฟล์ / etc / resolver / ไฟล์การระบุโดเมนรูทอินเทอร์เน็ตพิเศษ. ทำให้เกิดการสร้างรายการตัวแก้ไขส่วนกลางที่มีลักษณะดังนี้:

resolver #8
  nameserver[0] : 127.0.0.1

ตอนนี้แบบสอบถาม DNS ทั้งหมดจะถูกส่งไปยัง localhost แม้ในขณะออฟไลน์

แน่นอนว่าคุณจะต้องแก้ไขโดเมนที่คุณเลือกเป็น 127.0.0.1 โดยใช้ตัวเลือก --address ของ dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

สรุป:

  • ตั้งค่าเซิร์ฟเวอร์อินเทอร์เฟซเครือข่ายทั้งหมดของคุณเป็น 127.0.0.1:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • สร้างไฟล์ / etc / resolver / อะไรก็ตาม:
    เนมเซิร์ฟเวอร์ 127.0.0.1
    โดเมน
  • ตั้งค่าเซิร์ฟเวอร์ DNS ในเครื่องและยินดี

cf เลย http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c


นั่นคือสิ่งที่ pow ใช้ ( pow.cx )
daeltar

แต่น่าเสียดายที่มันไม่ทำงาน - github.com/37signals/pow/issues/104
daeltar

3
@guns โซลูชันนี้ยังใช้งานได้ในโยเซมิตีหรือไม่ dnsmasq ทำงานได้ดีสำหรับฉันแบบออฟไลน์จนกว่าฉันจะอัปเกรด ตอนนี้สิ่งที่ฉันได้รับเมื่อฉันทำงานscutil --dnsเมื่อไม่ได้เชื่อมต่อกับอินเทอร์เน็ตทั้งหมดที่ฉันได้รับคือNo DNS configuration available ฉันทำตามคำแนะนำของคุณด้านบน แต่ไม่มีโชค
MatthewLee

1
@MatthewLee ใช่คุณพูดถูกดูเหมือนว่ามีเพียงสิ่งเดียวที่กำลังเพิ่มรายการในไฟล์โฮสต์
Lenciel

1
ใครพบวิธีแก้ปัญหาสำหรับ Yosemite หรือยัง
jmagnusson

2

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

ตัวแก้ไขใน OS X ทำงานแตกต่างจากใน Linux หรือ Unixes อื่น ๆ นี่อาจเป็นส่วนหนึ่งของสิ่งที่ทำให้คุณเศร้าโศก เช่นมีการตั้งค่าสำหรับวิธีการแก้ไขที่จะใช้ก่อนและแคชผลลัพธ์ของแบบสอบถามทั้งหมดเป็นระยะเวลาหนึ่ง

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


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

1

(ตอบ b / c ฉันยังไม่สามารถแสดงความคิดเห็น ... )

คุณจะออฟไลน์อย่างไร

(คำตอบที่ดีที่สุดที่ฉันได้ตอนนี้)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

ดังนั้นคุณควรจะสามารถป้อนบางสิ่งบางอย่างใน UI และควรจะติด ฉันทำสิ่งนี้สองครั้งเมื่อฉันไม่ชอบเซิร์ฟเวอร์ DNS ที่เซิร์ฟเวอร์ DHCP ในพื้นที่ของฉันมอบให้


การเปลี่ยนการกำหนดค่า DNS ใน NetworkPreferences จะเปลี่ยนไฟล์ /etc/resolv.conf
เฟเบียนเซรินด์

0

OSX มีไฟล์การกำหนดค่า /etc/dhcp3/dhclient.conf ที่การกำหนดค่าไคลเอนต์ Linux / UNIX DHCP ปกติมีหรือไม่

ถ้าเป็นเช่นนั้นควรมีบรรทัดที่คุณไม่ใส่ข้อคิดเห็น

prepend domain-name-servers 127.0.0.1;

เพื่อให้ไคลเอ็นต์ DHCP เพิ่มบรรทัดนั้นไปยัง resolv.conf ของคุณเสมอ


การเพิ่มไปยัง resolv.conf ไม่ได้ช่วยใน OS X เนื้อหาของ resolv.conf ถูกสร้างขึ้นและตัวเองเป็น symlink บน /var/run/resolv.conf และแม้ว่าฉันจะเปลี่ยน /var/run/resolv.conf ก็ไม่ได้สะท้อนถึงการเปลี่ยนแปลง .
daeltar

0

ลองเพิ่มบริการอีเธอร์เน็ตที่สองที่กำหนดค่าด้วยที่อยู่แบบคงที่และ 127.0.0.1 เป็นเซิร์ฟเวอร์ DNS ของคุณ หรือเพิ่มที่ตั้งเครือข่ายซึ่งตั้งค่าเซิร์ฟเวอร์ DNS ของคุณเป็น 127.0.0.1 การเปลี่ยนแปลงทั้งสองนี้จะเกิดขึ้นใน "การตั้งค่าระบบ" ใต้แผง "เครือข่าย"


-2

มันอาจช่วยให้ใส่

127.0.0.1       localhost

เป็น / etc / hosts ดังนั้นจึงไม่จำเป็นต้องแก้ไขเพื่อค้นหา localhost


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