ฉันจะเปลี่ยนเซิร์ฟเวอร์ DNS ของฉันจาก Terminal ใน Mac OS X ได้อย่างไร [ฉันต้องการสิ่งนี้เพราะ DNS ของฉันทำงานไม่ถูกต้องกับ VPN ของฉัน บางครั้งมันใช้ DNS สำหรับการเชื่อมต่อหลักของฉันและบางครั้งก็ใช้ DNS ที่ระบุสำหรับ VPN (ซึ่งควร))
ฉันจะเปลี่ยนเซิร์ฟเวอร์ DNS ของฉันจาก Terminal ใน Mac OS X ได้อย่างไร [ฉันต้องการสิ่งนี้เพราะ DNS ของฉันทำงานไม่ถูกต้องกับ VPN ของฉัน บางครั้งมันใช้ DNS สำหรับการเชื่อมต่อหลักของฉันและบางครั้งก็ใช้ DNS ที่ระบุสำหรับ VPN (ซึ่งควร))
คำตอบ:
คุณสามารถใช้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
(โฮสต์ตัวอย่าง) แม้ว่าจะไม่ได้เป็นกรณีสำหรับแอปพลิเคชันทั้งหมด
scutil --dns
เพื่อยืนยัน
set State:/Network/Service/PRIMARY_SERVICE_ID/DNS
บรรทัดหรือฉันสามารถใช้สิ่งนั้นได้หรือไม่ เซิร์ฟเวอร์ DNS ใหม่ควรแสดงในscutil --dns
ผลลัพธ์หลังจากการเปลี่ยนแปลงหรือไม่
scutil
ตามด้วย> list
เพื่อค้นหากุญแจเพื่อแทนที่ Primary_SERVICE_ID ด้วย
คุณสามารถใช้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 )
sudo networksetup -setdnsservers <networkservice> empty
ฉันไม่มีคะแนนมากพอที่จะตอบโพสต์ของ 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]*\]'
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
set
)sudo scutil < commands.txt
คุณควรจะสามารถทำได้โดยการแก้ไข /etc/resolv.conf (จำไว้ว่า resolv.conf ถูกรีเซ็ตหลังจากรีบูต) หวังว่าจะช่วยได้ - http://developer.apple.com/mac/library/documentation/Darwin/Reference/ manpages / man5 / resolver.5.html