เปลี่ยนเซิร์ฟเวอร์ DNS จาก Terminal (หรือสคริปต์) ใน Mac OS X


29

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

คำตอบ:


15

คุณสามารถใช้scutilแบบโต้ตอบจากเทอร์มินัล เรียกใช้sudo scutilและเรียกใช้คำสั่งเหล่านี้สลับเซิร์ฟเวอร์ DNS ของคุณในตำแหน่งที่เหมาะสม:

> เปิด
> d.init
> d.add เซิร์ฟเวอร์ที่อยู่ * 8.8.8.8 9.9.9.9
> ตั้งค่าสถานะ: / เครือข่าย / บริการ / primary_SERVICE_ID / DNS
> ออกจาก

แทนที่จะใช้8.8.8.8และ9.9.9.9ใช้เซิร์ฟเวอร์ DNS ของคุณ

ปัญหาเดียวก็คือนี่เป็นไม่ถาวรทั่วเรียบ หากคุณต้องการเปลี่ยนแปลงอย่างถาวรคุณจะต้องการncutil เหตุผลในการแก้ไข/etc/resolv.confไม่เพียงพอใน OS X เวอร์ชันใหม่กว่าเพราะตอนนี้ configd ใช้ฐานข้อมูลเพื่อเก็บข้อมูลการตั้งค่าปัจจุบันซึ่งแอปพลิเคชันอื่นอ่าน แอปพลิเคชันบางอย่างจะยังคงอ่าน /etc/resolv.conf (โฮสต์ตัวอย่าง) แม้ว่าจะไม่ได้เป็นกรณีสำหรับแอปพลิเคชันทั้งหมด


2
8.8.8.8 เป็นสิ่งที่ถูกต้อง DNS สาธารณะของ Google 8.8.4.4 เป็นรอง :-)
Semicolon ที่ถูกลืม

ฉันรู้ว่าฉันใช้มัน :)
จอห์น T

1
มันควรจะ. คุณสามารถใช้scutil --dnsเพื่อยืนยัน
John T

2
ดูเหมือนว่าจะใช้งานไม่ได้กับ Mac OSX 10.7.5 MBP ของฉันอย่างน้อยก็ไม่ได้ทำอย่างแท้จริง ฉันควรจะแทนที่สิ่งใด ๆ ในset State:/Network/Service/PRIMARY_SERVICE_ID/DNSบรรทัดหรือฉันสามารถใช้สิ่งนั้นได้หรือไม่ เซิร์ฟเวอร์ DNS ใหม่ควรแสดงในscutil --dnsผลลัพธ์หลังจากการเปลี่ยนแปลงหรือไม่
ssc

2
@ssc Run scutilตามด้วย> listเพื่อค้นหากุญแจเพื่อแทนที่ Primary_SERVICE_ID ด้วย
J.Money

46

คุณสามารถใช้networksetup:

sudo networksetup -setdnsservers <networkservice> DNS1, DNS2, DNS3

เช่น (การเชื่อมต่อกับสนามบินใช้เซิร์ฟเวอร์ DNS ของ Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

networksetup -listallnetworkservicesคุณสามารถหาชื่อของบริการเครือข่ายโดยใช้ อาจเป็น 'Wi-Fi'

นี่เหมือนกับว่าคุณจะต้องแก้ไขรายการในบานหน้าต่างการตั้งค่าเครือข่ายในการตั้งค่าระบบดังนั้นจึงคงอยู่ตลอดการบู๊ตเครื่อง

คุณอาจพบปัญหา DNS ใน Snow Leopard ที่เกิดขึ้นเมื่อเซิร์ฟเวอร์ DNS ในใบสั่งถูกสอบถามการเปลี่ยนแปลง (ดูคำถาม84144 )


ว้าว 84144 เป็นปัญหาที่ฉันมีอยู่ ยังคงประมวลผลทั้งหมดนี้ .... ขอบคุณมาก!
แดน Rosenstark

6
หมายเหตุหนึ่งสำหรับทุกคนที่ต้องการลบ DNS เพียงแค่เขียน "ว่างเปล่า" (โดยไม่ใส่เครื่องหมายอัญประกาศ) แทน DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe

14

ฉันไม่มีคะแนนมากพอที่จะตอบโพสต์ของ Chealion แต่เพื่อเพิ่มเข้าไปฉันจะเริ่มต้นด้วยการแสดงรายการอินเตอร์เฟส

networksetup -listallnetworkservices

เมื่อคุณมีอินเทอร์เฟซที่คุณต้องการเปลี่ยนคุณสามารถทำด้านล่าง (ฉันใช้ Wi-Fi แต่คุณสามารถทำอินเทอร์เฟซอื่น ๆ )

sudo networksetup -setdnsservers Wi-Fi empty
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4
sudo killall -HUP mDNSResponder

บรรทัดแรกของด้านบนจะล้างการตั้งค่า DNS จากนั้นตามด้วยเซิร์ฟเวอร์ DNS ที่เราต้องการใช้และล้างแคช DNS อย่างละเอียด

ในการตรวจสอบการเปลี่ยนแปลง DNS คุณสามารถทำได้ทั้งก่อนและหลังหรือหลัง

scutil --dns | grep 'nameserver\[[0-9]*\]'

ทุกคนที่สะดุดข้ามหน้านี้ ฉันมีส่วนสำคัญใน GitHub ตอนนี้ที่ควรช่วย gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
David Kittell

1

resolv.conf ไม่ทำงานบน OSX อีกต่อไป มีประกาศที่ด้านบนของไฟล์ดังต่อไปนี้:

#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#

นอกจากนี้networksetup -listallnetworkservicesไม่ได้แสดงรายการอินเทอร์เฟซ VPN ทั้งหมด

นี่คือวิธีหนึ่งในการใช้ scutil เพื่อกำหนดเป้าหมายอินเทอร์เฟซที่ถูกต้อง: 1. สร้างไฟล์commands.txtด้วยคำสั่งของคุณสำหรับเครื่องมือ scutil แบบโต้ตอบ เช่นเนื้อหาสำหรับ Pulse Secure Interface ในกรณีของฉัน:

get State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
d.add ServerAddresses * 8.8.8.8 9.9.9.9
set State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
  1. เรียกใช้ scutil ด้วยคำสั่ง piped (คุณต้องใช้ sudo สำหรับset)
sudo scutil < commands.txt

0

คุณควรจะสามารถทำได้โดยการแก้ไข /etc/resolv.conf (จำไว้ว่า resolv.conf ถูกรีเซ็ตหลังจากรีบูต) หวังว่าจะช่วยได้ - http://developer.apple.com/mac/library/documentation/Darwin/Reference/ manpages / man5 / resolver.5.html


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