如何在 Linux 上手動設置 DNS?
在 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