![当 resolv.conf 不断被覆盖时,如何使用 dhclient 设置静态 DNS?](https://linux22.com/image/79523/%E5%BD%93%20resolv.conf%20%E4%B8%8D%E6%96%AD%E8%A2%AB%E8%A6%86%E7%9B%96%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20dhclient%20%E8%AE%BE%E7%BD%AE%E9%9D%99%E6%80%81%20DNS%EF%BC%9F.png)
继Debian 网络配置 wiki,我一直在尝试设置静态OpenNIC DNS没有成功。我尝试的第一件事是直接编辑/etc/resolv.conf
,但它不断被覆盖。维基页面列出了三种可能的覆盖来源:
- 这
resolvconf
程序- 这
network-manager
守护进程- DHCP 客户端
$ apt-cache policy resolvconf
resolvconf:
Installed: (none)
Candidate: 1.76.1
Version table:
1.76.1 0
500 http://ftp.us.debian.org/debian/ jessie/main amd64 Packages
$ apt-cache policy network-manager
network-manager:
Installed: (none)
Candidate: 0.9.10.0-7
Version table:
0.9.10.0-7 0
500 http://ftp.us.debian.org/debian/ jessie/main amd64 Packages
考虑到我没有resolvconf
或network-manager
安装,我们可以假设源是 DHCP 客户端。我正在使用 的wicd
替代方案network-manager
,但在属性中设置静态 dnswicd-gtk
不起作用。因此,我/etc/dhcp/dhclient.conf
通过添加进行编辑supersede domain-name-servers 50.116.40.226;
,但我的/etc/resolv.conf
仍然是:
$ cat /etc/resolv.conf
nameserver 2001:558:feed::2
nameserver 2001:558:feed::1
这到底是怎么回事?我应该安装resolvconf
看看它是否有效吗?我应该放弃wicd
并安装network-manager
吗?
答案1
我认为您的 DHCP 服务器发送了未经请求的响应,因此如果您设置了 supersede 参数,您的 resolv.conf 也会被覆盖。添加 +i 属性可能是一个解决方案,但如果您必须进行一些更改,则需要您手动取消设置并重新设置它。
事实上,您可以在客户端编写一些脚本(请参阅man 8 dhclient-script
)。
这个主题也有解释Debian 维基:
另一种方法利用 dhclient-script 的钩子脚本。根据 dhclient-script(8):
启动时,客户端脚本首先定义一个 shell 函数 make_resolv_conf ,该函数稍后用于创建 /etc/resolv.conf 文件。要覆盖默认行为,请在 Enter 挂钩脚本中重新定义此函数。因此,我们可以通过执行以下操作来阻止 dhclient 覆盖 resolv.conf:
echo 'make_resolv_conf() { :; }' > /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone chmod 755 /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone
需要执行位,因为 dhclient-script 使用 run-parts(8) 来决定读取哪些文件。出于同样的原因,文件名不能包含除字母、数字、下划线和连字符之外的任何内容。
答案2
使用以下解决方法可以防止 dhcp 客户端更新精心设计的 /etc/resolv.conf:
# chattr +i /etc/resolv.conf
答案3
顺便说一句,事情进展得不太顺利,甚至不是朋友,但你应该在离开之前好好看看它,因此将“chattr + i”文件应用到系统中,我认为我们应该寻找解决问题的方法有时,这些事情非常简单,就在我们面前,我们无法填写,因为我们很紧张,想要将我们的意志强加给系统,有时,一个小脚本在网络中执行得当时甚至会产生奇迹,但显然你不希望这样顺便说一下,我不是或正在学习成为一名系统管理员,抱歉!但是,如果您宁愿紧张并在系统上执行这些无意义的把戏,好吧,毕竟它不在我的系统上,很抱歉让您生气!而不是这样做!要使用“chattr”命令配置,请编辑“interfaces”文件(通常位于 /etc/network/ 文件夹中),并使用所需的名称服务器 IP 添加/更改 dns-nameserver 选项。如果这些选项不在文件中,您可以将它们添加为小示例:
-示例:只需这样编辑“/etc/network/interfaces”文件即可。
auto lo
iface lo inet loopback
iface lo inet6 loopback
iface eth0 inet dhcp <= Here would be for DHCP devices.
iface eth0 init 192.168.1.2 <= Here your fixed IP on the network.
iface eth0 inet6 auto <= Here you define your IPv6 automatically.
dns-nameserver 192.168.1.1 <= Your IP address here.
dns-nameserver 8.8.8.8
dns-nameserver 8.8.4.4
-保存文件并重新启动网络...
在您的情况下,您只想设置服务器的 IP 地址,只需将以下内容设置到接口文件的末尾。
dns-nameserver 8.8.4.4
dns-nameserver 8.8.8.8
这是这里使用的一个示例,只有不使用 DHCP 才应该使用由路由器自动定义的 IP,该 IP 会在网络系统上每次启动时更改。
auto lo
iface lo inet loopback
iface lo inet6 loopback
iface eth0 inet static
address 192.168.1.4/24
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameserver 192.168.1.4
dns-nameserver 8.8.4.4
dns-nameserver 8.8.8.8
-这里只是一个小示例,供您验证更好地理解。