![如何在 Ubuntu Server 上设置静态 DNS 名称服务器地址?](https://linux22.com/image/1078968/%E5%A6%82%E4%BD%95%E5%9C%A8%20Ubuntu%20Server%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%E9%9D%99%E6%80%81%20DNS%20%E5%90%8D%E7%A7%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我正在尝试在作为虚拟机运行的 Ubuntu 服务器上静态设置 DNS 服务器地址。我遵循了官方 Ubuntu 支持页面上的所有建议,但我就是无法摆脱由 DHCP 设置的 ISP 的 DNS 服务器。
我为主机上的 br0 接口分配了静态 IP 地址,并为虚拟机上的 eth0 分配了 Google DNS,并通过在 中设置它来在第二台虚拟机上运行我自己的本地 DNS /etc/network/interfaces
。尝试摆弄头部、基础和尾部文件,/etc/resolvconf/resolv.conf.d/
并尝试打乱接口顺序,/etc/resolvconf/interface-order
但每次重新启动网络服务时,我都会得到 ISP 的 DNS 地址。
有没有办法可以禁用 resolvconf 并手动设置 resolv.conf 文件,就像我在 Red Hat 上一直做的那样?或者你能告诉我哪个钩子脚本一直在将 ISP DNS 放入 resolv.conf 中吗?我的 ISP 不允许我更改路由器上的 DHCP 设置,所以我无法通过这种方式进行更改。
为什么像设置 DNS 服务器这样简单的事情变得如此复杂???
答案1
1:Resolvconf 将其动态 resolv.conf 文件写入/run/resolvconf/resolv.conf
。/etc/resolv.conf
是指向后者位置的符号链接。如果您想使用静态 resolv.conf 文件,只需将 /etc/resolv.conf 符号链接替换为文件即可。目前支持但不建议这样做。
2:据我了解,受影响的机器正在运行 Ubuntu Server 版本。在这种情况下,它使用ifup
配置文件为 的程序配置接口/etc/network/interfaces
。对于通过dhcp
方法配置的接口,ifup
(通常)使用包dhclient
中的isc-dhcp-client
。Dhclient 从 DHCP 服务器接收名称服务器信息,其钩子脚本/etc/dhcp/dhclient-enter-hooks.d/resolvconf
将此信息发送到 ,resolvconf
并将其放入resolv.conf
。
您可以做的一件事是编辑在之前的/etc/resolvconf/interface-order
。(我假设相关界面是。)如果您有默认值,您可以,例如,在 行之前添加一行。eth0.dhcp
eth0.dhclient
eth0
interface-order
eth0.dhcp
eth*
--- interface-order_ORIG 2012-11-06 10:12:47.630529145 +0100
+++ interface-order 2012-11-06 10:13:16.410529800 +0100
@@ -9,6 +9,7 @@
hso*
em+([0-9])?(_+([0-9]))*
p+([0-9])p+([0-9])?(_+([0-9]))*
+eth0.dhcp
eth*
ath*
wlan*
然后dns-nameservers
在该iface eth0
节中添加一行,/etc/network/interfaces
包含正确的名称服务器地址。
iface eth0 inet dhcp
dns-nameservers 1.2.3.4
因为eth0.dhcp
在 之前eth0.dhclient
,正确的名称服务器地址将包含在resolv.conf
错误的名称服务器地址之前。
覆盖包含 DHCP 服务器提供的名称服务器地址这一不必要行为的另一种方法是编辑 dhclient 钩子脚本。例如,您可以添加如下一行(其中 1.2.3.4 是您想要丢弃的名称服务器地址)。
--- resolvconf_ORIG 2012-03-29 22:37:14.000000000 +0200
+++ resolvconf 2012-11-05 20:53:33.312681077 +0100
@@ -54,6 +54,7 @@
fi
shopt -s nocasematch
for nameserver in $new_dhcp6_name_servers ; do
+ [ "$nameserver" = "1.2.3.4" ] && continue
还有一种可能性(稍微粗糙一些,因为它是完全静态的)是向中添加名称服务器选项/etc/resolvconf/resolv.conf.d/head
。
3:设置 DNS 名称服务器地址变得更加复杂,因为机器变得越来越移动,接口越来越多,静态配置逐渐被自动配置所取代。
答案2
只需利用 dhclient(出于示例目的,它使用 google DNS)。在我看来,这比其他答案要简洁得多:
备份 /etc/resolv.conf:
sudo cp /etc/resolv.conf /etc/resolv.conf.auto
编辑 /etc/dhcp[3]/dhclient.conf (ubuntu 14.04 省略了 3):
sudo vi /etc/dhcp/dhclient.conf
- 如果有一行包含域名服务器,请记下 IP 地址以供将来参考。
- 将该行替换为以下行,或者添加以下行:对于 IPv4:
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
对于 IPv6:prepend domain-name-servers 2001:4860:4860::8888, 2001:4860:4860::8844;
- 现发布并续订IP:
ifdown eth0 && ifup eth0
现在重新启动您正在使用的任何网络客户端(例如 chrome 或其他)
答案3
在我看来:这是图形配置工具的一个错误。
我最简单的解决方法是注释(或删除)文件 /etc/dhcp/dhclient.conf 中以“request...”开头的行