在 Linux 中对 resolv.conf 进行永久 DNS 更改

按照本指南学习如何在 Linux 中对 resolv.conf 进行 DNS 永久更改。

据人说 resolv.conf, resolv.conf 是解析器配置文件。 解析器是 C 库中的一组例程,提供对 Internet 域名系统 (DNS) 的访问。 解析器配置文件包含解析器例程首次被进程调用时读取的信息。 该文件被设计为人类可读的,并包含一个关键字列表,其中包含提供各种类型的解析器信息的值。 配置文件被认为是 DNS 信息的可信来源(例如,DNSSEC AD 位信息将从该来源未经修改地返回)。

如果此文件不存在,则只会查询本地机器上的名称服务器,搜索列表包含根据主机名确定的本地域名。

在 Linux 中对 resolv.conf 进行永久 DNS 更改

手动对 /etc/resolv.conf 配置文件必然会在网络更改或系统重新启动时被覆盖。

根据文件中的注释,该文件是动态的。 “请勿手动编辑此文件 — 您的更改将被覆盖“。

举个例子,如果你想在你的 Linux 机器上添加一个 DNS 服务器,你通常会通过指定解析器应该查询的名称服务器的 IP 地址来更新这个文件。 看下面的命令, which updates the resolv.conf file with the public primary DNS server for Google DNS, 通过运行类似的命令;

echo "nameserver 8.8.8.8" > /etc/resolv.conf

如果您进行任何更改,例如系统重新启动,或运行 dhclient 命令上面添加的行,将消失。

那么如何在 Linux 中对 resolv.conf 进行永久性 DNS 更改?

好吧,您可以通过多种方式对 Linux 中的 resolv.conf 进行永久性 DNS 更改。

  1. 使用 Resolvconf 框架
  2. 在您的接口设置中设置名称服务器 IP 地址
  3. 更新 dhclient.conf 上的 DNS 服务器设置

使用 Resolvconf 框架

Resolvconf 是一个框架,用于更新系统关于名称服务器的信息。 它将自己设置为提供此信息的程序(如 ifup 和 ifdown、DHCP 客户端、PPP 守护程序和本地名称服务器)与使用此信息的程序(如 DNS 缓存和解析器库)之间的中介。

在 Ubuntu/Debian 发行版上,您可以通过运行以下命令来安装 resolvconf 框架;

sudo apt install resolvconf

一旦安装了框架,它就会启动并允许在系统引导时运行。

接下来,编辑配置文件, /etc/resolvconf/resolv.conf.d/base,然后输入您的 DNS 设置。 请参阅下面的示例设置;

sudo vim /etc/resolvconf/resolv.conf.d/base
domain kifarunix.com nameserver 8.8.8.8 nameserver 8.8.4.4

Save 并退出配置文件。

接下来,更新 /etc/resolv.conf 文件以进行永久性 DNS 更改;

sudo resolvconf -u

更新 dhclient.conf 上的 DNS 服务器设置

如果您使用 DHCPd 进行自动 IP 地址分配,请编辑 /etc/dhcp/dhclient.conf 文件并添加行; supersede domain-name-servers IP1, IP2;. 将 IP1 和 IP2 替换为您各自的名称服务器 IP 地址;

vim /etc/dhcp/dhclient.conf
supersede domain-name-servers 8.8.8.8, 8.8.4.4;

Save 文件并退出。

现在,如果你运行 dhclient,你的 /etc/resolv.conf 将使用 dhclient.conf 中定义的名称服务器进行更新。

您可以使用 prepend 选项而不是 supersede 添加额外的 IP 地址到 ISP 提供的默认地址。

咨询;

man dhclient.conf

在您的接口设置中设置名称服务器 IP 地址

编辑您的网络接口配置文件并添加名称服务器的地址。

在 Ubuntu 18.04/20.04 中,您可以像这样更新 Netplan 配置文件;

sudo vim /etc/netplan/01-network-manager-all.yaml
network:   version: 2   renderer: networkd   ethernets:           wlp0s20f3:                   dhcp4: no                   addresses: [192.168.100.80/24]                   gateway4: 192.168.100.1                   nameservers:                           addresses: [8.8.8.8]

我们将 DNS 设置为 google 公共 DNS 服务器地址,8.8.8.8。 您的情况可能有所不同。

应用更改;

sudo netplan apply

在 Debian 和

vim /etc/network/interfaces
auto wlp0s20f3 iface wlp0s20f3 inet static     address 192.168.100.80     netmask 255.255.255.0     dns-nameservers 8.8.8.8

重新启动网络以应用更改;

systemctl restart networking

在 CentOS 和类似的衍生系统上,按如下方式编辑有问题的界面。 将 INTERFACE 替换为您的接口名称。

nmcli con mod INTERFACE ipv4.dns 8.8.8.8

此外,通过 NetworkManager 守护程序禁用网络接口管理。

echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-INTERFACE

应用更改;

nmcli con down INTERFACE nmcli con up INTERFACE

您现在应该设置了静态 DNS。

我们关于如何在 Linux 中对 resolv.conf 进行 DNS 永久更改的指南到此结束。

进一步阅读

man resolv.conf
man resolvconf

在 Linux 中使用 du 命令检查目录使用情况

如何在 Linux 中使用 htop 命令

ps 命令在 Linux 中的使用示例

ls 命令在 Linux 中的使用示例