ubuntu 获取ip由dhcp变成成static,需要重启机器dns才能更新?

包含网卡/无线网的网络问题和ADSL/校园网/宽带拨号支持及代理/共享等网络使用问题
回复
ringgo
帖子: 6
注册时间: 2020-06-16 16:58
系统: ubuntu 16.04
来自: 帝都

ubuntu 获取ip由dhcp变成成static,需要重启机器dns才能更新?

#1

帖子 ringgo » 2020-06-16 17:01

当前网卡接口的配置在/etc/net/interfaces如下:

auto enp2s0
iface enp2s0 inet dhcp

查看dns如下:

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.0.193
nameserver 219.141.140.10
nameserver 219.141.136.10

现在将ip改成静态设置,配置dns为网关192.168.0.193:

auto enp2s0
iface enp2s0 inet static
address 192.168.0.130
netmask 255.255.255.0
gateway 192.168.0.193

dns-nameservers 192.168.0.193

重启服务:sudo ip addr flush && sudo systemctl restart networking.service 

查看dns 仍然是dhcp自动生成的

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.0.193
nameserver 219.141.140.10
nameserver 219.141.136.10

重启完机器后,再次查看dns,已经更新到192.168.0.193

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.0.193

有什么方法可以不用重启电脑,让dns生效么
头像
astolia
论坛版主
帖子: 6489
注册时间: 2008-09-18 13:11

Re: ubuntu 获取ip由dhcp变成成static,需要重启机器dns才能更新?

#2

帖子 astolia » 2020-06-17 1:01

你这系统有点老了啊,还在用resolvconf,差不多16.04的样子了吧。现在/etc/network/interfaces已经不再是系统的网络配置文件了,最新的20.04安装后都不会有它存在。

你的问题是因为resolvconf自身的缺陷。在你的例子里,原来用dhcp方式时,/run/resolvconf/interface/下面会生成一个enp2s0.dhclient文件,内容就是219.141.xxx.10的那两行。而改成static后重启网络,原来的 enp2s0.dhclient并没有删掉,又多了一个内容为192.168.0.193的enp2s0.inet文件,在生成resolv.conf文件时,把这两个文件的内容都加入了。

所以解决方法也很简单,重启网络前把/run/resolvconf/interface/里面对应的文件都删掉就行了。你可以手动删,如果经常改来改去,也可以在/etc/network/if-post-down.d下面加个脚本自动删
ringgo
帖子: 6
注册时间: 2020-06-16 16:58
系统: ubuntu 16.04
来自: 帝都

Re: ubuntu 获取ip由dhcp变成成static,需要重启机器dns才能更新?

#3

帖子 ringgo » 2020-06-17 8:56

astolia 写了: 2020-06-17 1:01 你这系统有点老了啊,还在用resolvconf,差不多16.04的样子了吧。现在/etc/network/interfaces已经不再是系统的网络配置文件了,最新的20.04安装后都不会有它存在。

你的问题是因为resolvconf自身的缺陷。在你的例子里,原来用dhcp方式时,/run/resolvconf/interface/下面会生成一个enp2s0.dhclient文件,内容就是219.141.xxx.10的那两行。而改成static后重启网络,原来的 enp2s0.dhclient并没有删掉,又多了一个内容为192.168.0.193的enp2s0.inet文件,在生成resolv.conf文件时,把这两个文件的内容都加入了。

所以解决方法也很简单,重启网络前把/run/resolvconf/interface/里面对应的文件都删掉就行了。你可以手动删,如果经常改来改去,也可以在/etc/network/if-post-down.d下面加个脚本自动删
我用的系统是 16.04,如果我执行 dhclient -r enp2s0 然后执行 service networking restart ,/etc/resolv.conf里的dns会更新,但是也出现过没更新的情况
头像
astolia
论坛版主
帖子: 6489
注册时间: 2008-09-18 13:11

Re: ubuntu 获取ip由dhcp变成成static,需要重启机器dns才能更新?

#4

帖子 astolia » 2020-06-17 10:47

ringgo 写了: 2020-06-17 8:56 如果我执行 dhclient -r enp2s0 然后执行 service networking restart ,/etc/resolv.conf里的dns会更新,但是也出现过没更新的情况
resolvconf包里包含/etc/dhcp/dhclient-enter-hooks.d/resolvconf这个配置文件,会阻止dhclient往/etc/resolv.conf里写数据。具体的修改操作还是由resolvconf来完成的。
ringgo
帖子: 6
注册时间: 2020-06-16 16:58
系统: ubuntu 16.04
来自: 帝都

Re: ubuntu 获取ip由dhcp变成成static,需要重启机器dns才能更新?

#5

帖子 ringgo » 2020-06-17 13:34

astolia 写了: 2020-06-17 10:47 resolvconf包里包含/etc/dhcp/dhclient-enter-hooks.d/resolvconf这个配置文件,会阻止dhclient往/etc/resolv.conf里写数据。具体的修改操作还是由resolvconf来完成的。
谢谢,用了您说的删除/run/resolvconf/interface/enp2s0.dhclient 再重启网络服务。解决了问题
回复