如何在 Ubuntu Server 上设置静态 DNS 名称服务器地址?

如何在 Ubuntu Server 上设置静态 DNS 名称服务器地址?

我正在尝试在作为虚拟机运行的 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.dhcpeth0.dhclienteth0interface-ordereth0.dhcpeth*

--- 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)。在我看来,这比其他答案要简洁得多:

  1. 备份 /etc/resolv.conf: sudo cp /etc/resolv.conf /etc/resolv.conf.auto

  2. 编辑 /etc/dhcp[3]/dhclient.conf (ubuntu 14.04 省略了 3): sudo vi /etc/dhcp/dhclient.conf

  3. 如果有一行包含域名服务器,请记下 IP 地址以供将来参考。
  4. 将该行替换为以下行,或者添加以下行:对于 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;
  5. 现发布并续订IP: ifdown eth0 && ifup eth0

现在重新启动您正在使用的任何网络客户端(例如 chrome 或其他)

答案3

在我看来:这是图形配置工具的一个错误。

我最简单的解决方法是注释(或删除)文件 /etc/dhcp/dhclient.conf 中以“request...”开头的行

相关内容