Debian

如何在 Linux 上手動設置 DNS?

  • May 17, 2020

在 Linux/etc/resolv.conf中,當我們設置 DNS 時,經常會被覆蓋,因為管理 DNS 伺服器的程序很多。

如何正確設置 DNS?

Linux下的DNS配置

Linux 上的 DNS 使用是通過C 庫中的一組常式完成的,這些常式提供對 Internet 域名系統 (DNS) 的訪問。解析器配置文件 ( resolv.conf) 包含解析器常式第一次被程序呼叫時讀取的資訊。簡而言之,每個請求 DNS/etc/resolv.conf的程序都會讀取庫。NSS位於此之上,並由/etc/nsswitch.conf.

Linux DNS 配置位於文件中,/etc/resolv.conf 有許多程序/服務想要自動管理和處理位於/etc/resolv.conf. 在某些情況下,您可能希望自己管理此文件。每個管理 DNS 的程序/服務都有自己的配置文件,例如/etc/dnsmasq.conf(用於 dnsmasq 服務),並在連接更改和/或其他事件時附加 DNS 配置……一個快速的解決方案是鎖定 DNS 配置文件,chattr +i /etc/resolv.conf但不推薦這樣做在某些情況下,更好的解決方案是使用 DNS 正確設置所有程序/服務,例如 (dnsmasq/network-manager/resolvconf/etc.)

奪回對 DNS 的控制權

這是一個詳盡的設置列表,用於恢復對 resolv.conf 的控制並避免將其覆蓋(如何從 resolv.conf 以外的其他位置禁用/設置 DNS)請注意,resolvconf 是一個獨立於 resolv.conf 的程序,也根據您的系統/配置,您可能沒有此處列出的一個或多個程序。

1.解析配置:

配置文件

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

更新配置

sudo resolvconf -u

禁用解析配置

systemctl disable --now resolvconf.service 

2.DNSmasq服務:

配置文件

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

更新配置

sudo systemctl restart dnsmasq.service

3.網路管理員:

配置文件

/etc/NetworkManager/*

禁用 DNS

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

啟用 DNS

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

使用已解析的服務

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

使用 resolvconf

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

更新配置

systemctl restart NetworkManager.service

4. 網路介面:

配置文件

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

更新配置

reboot

5. DHCP客戶端:

配置文件

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

更新配置

reboot

6. Rdnssd服務:

禁用 rdnssd

systemctl disable --now rdnssd.service

7. 解決服務:

禁用已解決

systemctl disable --now systemd-resolved.service

8.網路配置:

配置文件

/etc/sysconfig/network/config

禁用網路配置

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

更新配置

reboot

設置 DNS 伺服器

/etc/resolv.conf配置範例

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan

引用自:https://unix.stackexchange.com/questions/494324