1. 问题描述及原因分析
在使用物理机和虚拟机的时候,系统版本为Kylin-4.0.2-server-sp2-2000-19080414.J1-arm64,地址是通过DHCP获取的,每次更改完/etc/resolv.conf,在重启系统后,发现/etc/resolv.conf均被还原为最初的状态,例如通过openstack云创建的虚拟机的resolv.conf文件,如下
通过ls -hl查看/etc/resolv.conf查看发现是被NetworkManager接管了
发现该问题后,NetworkManager取消对resolv.conf的接管,如下
vim /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
dns=none
rc-manager=unmanaged
[ifupdown]
managed=false
删除原先的文件,手动生成配置文件
rm -rf /etc/resolv.conf
touch /etc/resolv.conf
vim /etc/resolv.conf
nameserver 127.0.0.1
系统重启后,发现 /etc/resolv.conf依然被重置。
经过一系列排查,发现resolv.conf文件之所以会被重置,是由于dhcp获取IP时,从dhcp server处获取到的值,通过查看确实发现server处配置了domain-name-servers、domain-name等,在客户端查看cat /var/lib/dhcp/dhclient.eth0.leases文件,也有相应发现,如下
lease {
interface "eth0";
fixed-address 172.19.2.209;
option subnet-mask 255.255.255.0;
option routers 172.19.2.254;
option dhcp-lease-time 86400;
option dhcp-message-type 5;
option domain-name-servers 172.19.2.201;
option dhcp-server-identifier 172.19.2.201;
option interface-mtu 1500;
option dhcp-renewal-time 43200;
option rfc3442-classless-static-routes 32,169,254,169,254,172,19,2,201,0,172,19,2,254;
option broadcast-address 172.19.2.255;
option dhcp-rebinding-time 75600;
option host-name "host-172-19-2-209";
option domain-name "openstacklocal";
renew 2 2022/11/01 13:03:00;
rebind 2 2022/11/01 22:14:19;
expire 3 2022/11/02 01:14:19;
}
找到问题的根,就着手解决这个问题,由于服务器端也服务于其他节点,故仅能对当前主机做配置,我们采用基于客户端禁用dns更新的策略,如下:
删除原先的文件,手动生成配置文件
rm -rf /etc/resolv.conf
touch /etc/resolv.conf
vim /etc/resolv.conf
nameserver 127.0.0.1
dhcp client端禁用dns更新,如下
vim /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
#!/bin/sh
make_resolv_conf(){
:
}
chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
重新启动系统后,查看文件/etc/resolv.conf,没有被重置更新,问题解决。
2. 解决方案:
删除原先的文件,手动生成配置文件
rm -rf /etc/resolv.conf
touch /etc/resolv.conf
vim /etc/resolv.conf
nameserver 127.0.0.1
dhcp client端禁用dns更新,如下
vim /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
#!/bin/sh
make_resolv_conf(){
:
}
chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
3.参考文献
https://www.cyberciti.biz/faq/dhclient-etcresolvconf-hooks/