![How do I get resolvconf to regenerate resolv.conf after I change /etc/network/interfaces?](https://linux22.com/image/828271/How%20do%20I%20get%20resolvconf%20to%20regenerate%20resolv.conf%20after%20I%20change%20%2Fetc%2Fnetwork%2Finterfaces%3F.png)
After updating /etc/network/interfaces
with something very similar to below, how do I get /etc/resolv.conf
to update? I tried (as root) resolver -u
, service networking restart
but they didn't work. I also fixed the symlink for resolv.conf
and tried resolver -u
again. Finally in frustration I rebooted, which did fix the problem by rebuilding /etc/resolv.conf
.
Ubuntu 12.04, 64bit server, all the latest patches installed.
Example /etc/network/interfaces
:
iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameservers 192.168.3.45 192.168.8.10
答案1
service networking restart
is not always a reliable way of down-upping all interfaces.
The resolvconf -u
command only updates resolv.conf
from resolvconf's own database. You need to update the database.
To update the database you have to call resolvconf with the -a
or -d
option. That happens behind the scenes when you run ifup or ifdown. So, normally, as with any other change to /etc/network/interfaces
, to activate changes to the dns-* options you have to ifdown the interface in question and ifup it again. Or you can reboot.
If you want to make changes to an interface without ifdownupping it (perhaps because you are administering the machine remotely and happen to be connected via that interface, natch) then you can achieve the same result by running resolvconf directly from the command line. This requires a bit more knowledge of resolvconf's semantics. Assume the relevant /e/n/i stanza is
iface IIII FFFF static
address ...
...
dns-nameservers X.X.X.X Y.Y.Y.Y
dns-search SSSS
where FFFF is an address family ("inet" or "inet6").
To activate these dns-* options you run resolvconf as follows (yes, with newlines in the string piped to resolvconf).
echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF
For the stanza given in the question this would be the following.
echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet
Consult the resolvconf(8) manual page and the resolvconf package README file (/usr/share/doc/resolvconf/README.gz) for more information.
答案2
Although the manpage isn't installed by default it's documented via the update scripts option, just run:
sudo resolvconf -u
答案3
For those of you managing your servers remotely you can:
- update the
dns-nameservers
line in/etc/network/interfaces
# ifdown eth01; ifup eth01
Notice that this has to be on one line divided with ; (the linux command line separator). You should not even lose your current connection. The exception is making a typo in the interfaces file. If this happens ifup
will fail and you will have to have physical access or another ethxx
connection.
答案4
Simple answer :
Just install resolvconf. apt install resolvconf
After that, ifup eth0
updates the dns in etc/resolv.conf
, according to the dns-nameservers
line in /etc/network/interfaces
.