For DHCP users, there may be times when you need to edit /etc/resolv.conf to use other nameservers. Then, after some time (or after a system reboot), you discover that your changes to /etc/resolv.conf have been reverted.
This tutorial shows three methods to stop DHCP from changing the /etc/resolv.conf on Debian or Ubuntu.
Method 1: Change Interface Settings To Static
- On a cloud VPS, I do not suggest using this method.
- If you use this method, you may find that the reboot processing (until you can log in through SSH) takes longer.
First, we need to get the IP/netmask/gateway of the server. Run the following command.
ifconfig | grep "inet addr" | head -n 1 | awk '{print $2, $4}'
This provides the server IP and netmask. Looking at the example output…
addr:1.2.3.4 Mask:255.255.254.0
… the server IP address is 1.2.3.4 and mask is 255.255.254.0.
To get the gateway address, run the following command.
netstat -rn | grep '^0.0.0.0' | awk '{print $2}'
In this example, I will use the gateway address 1.2.3.1.
Now that we have the IP/netmask/gateway, edit /etc/network/interfaces.
vim /etc/network/interfaces
Make the following edits:
# Comment out this line
# iface eth0 inet dhcp
# Add these contents
iface eth0 inet static
address 1.2.3.4
mask 255.255.254.0
gateway 1.2.3.1
Remember, you must replace these values with the appropriate IP/netmask/gateway of the Server.
Save and exit, then reboot.
Method 2: Write Protect Your Nameservers
Change your nameservers by editing /etc/resolv.conf. Once you have made your edits, write-protect that file.
chattr +i /etc/resolv.conf
The +i option (attribute) write protects the /etc/resolv.conf file on Linux so that no one can modify it, not even the root user.
If you need to remove the write-protect attribute, use the following command.
chattr -i /etc/resolv.conf
Method 3: Use DHCP Hooks
This is the method that I recommend using the most.
Edit /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate.
vim /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
Make the following edits:
#!/bin/sh
make_resolv_conf(){
:
}
Save and exit.
Update the permissions on the nodnsupdate file.
chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
Reboot your server. You can now update nameservers by editing /etc/resolv.conf without worrying about rollback.