Home » Questions » Computers [ Ask a new question ]

Change DNS Server From Terminal (or script) on Mac OS X

Change DNS Server From Terminal (or script) on Mac OS X

How can I change my DNS server from the Terminal on Mac OS X? [I need this because my DNS is not working correctly with my VPN. Sometimes it's using the DNS for my main connection, and sometimes it's using the DNS specified for the VPN (which it should).]

Asked by: Guest | Views: 257
Total answers/comments: 3
Guest [Entry]

"You can use scutil interactively from the terminal. Run sudo scutil and run these commands, swapping your DNS servers in where appropriate:

> open
> d.init
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> set State:/Network/Service/PRIMARY_SERVICE_ID/DNS
> quit

Instead of using 8.8.8.8 and 9.9.9.9 use your DNS servers.

The only problem is this is not persistent across reboots. If you want permanent changes, you'll want ncutil. The reason editing /etc/resolv.conf isn't sufficient in newer versions of OS X is because configd now uses a database to store information of current settings, which other applications read. Certain applications will still read /etc/resolv.conf (host for example), although that is not the case for all applications."
Guest [Entry]

"I don't have enough points to reply to Chealion's post but to add on to it I'd start with listing the interfaces

networksetup -listallnetworkservices

Once you have the interface you'd like to change you can do the below (I'm using the Wi-Fi but you can do any other interface)

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

The first line of the above will empty out the DNS settings then follow it with the DNS servers we'd like to use and finely clear the DNS cache

To verify the DNS change you can do this before and after or simply after

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

"If you just want to resolve certain domains over the vpn you can do this. Not sure what all versions of macos this works on but it works on Big Sur. Just replace that IP with that of your nameserver over the vpn and the filename is the domain you want to resolve there. It seems to work pretty instantaneously, you don't need to HUP anything.
sudo bash
mkdir /etc/resolver
cd /etc/resolver
echo 10.10.10.1 > domain.tld"