如何在 Linux 上手动设置 DNS?

int*_*ika 5 networking dns debian vpn resolv.conf

在 Linux 中,/etc/resolv.conf当我们设置 DNS 时,经常会被覆盖,因为管理 DNS 服务器的程序很多。

如何正确设置DNS?

int*_*ika 9

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
Run Code Online (Sandbox Code Playgroud)

更新配置

sudo resolvconf -u
Run Code Online (Sandbox Code Playgroud)

禁用resolvconf

systemctl disable --now resolvconf.service 
Run Code Online (Sandbox Code Playgroud)

2. Dnsmasq 服务:

配置文件

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4
Run Code Online (Sandbox Code Playgroud)

更新配置

sudo systemctl restart dnsmasq.service
Run Code Online (Sandbox Code Playgroud)

3. 网络管理员:

配置文件

/etc/NetworkManager/*
Run Code Online (Sandbox Code Playgroud)

禁用 DNS

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none
Run Code Online (Sandbox Code Playgroud)

启用 DNS

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

[global-dns]
searches=example.com

[global-dns-domain-*]
Run Code Online (Sandbox Code Playgroud)

使用解析服务

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved
Run Code Online (Sandbox Code Playgroud)

使用 resolvconf

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf
Run Code Online (Sandbox Code Playgroud)

更新配置

systemctl restart NetworkManager.service
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

更新配置

reboot
Run Code Online (Sandbox Code Playgroud)

5. DHCP 客户端:

配置文件

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;
Run Code Online (Sandbox Code Playgroud)

更新配置

reboot
Run Code Online (Sandbox Code Playgroud)

6.Rdnssd服务:

禁用 rdnssd

systemctl disable --now rdnssd.service
Run Code Online (Sandbox Code Playgroud)

7.已解决的服务:

禁用已解决

systemctl disable --now systemd-resolved.service
Run Code Online (Sandbox Code Playgroud)

8. 网络配置:

配置文件

/etc/sysconfig/network/config
Run Code Online (Sandbox Code Playgroud)

禁用网络配置

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""
Run Code Online (Sandbox Code Playgroud)

更新配置

reboot
Run Code Online (Sandbox Code Playgroud)

设置 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
Run Code Online (Sandbox Code Playgroud)