在 Linux 上配置 DNS 缓存


  1. 在 Linux 中,DNS 缓存通常由 nscd(Name Service Cache Daemon)或 dnsmasq 等工具提供。如果你的 Linux 系统没有自动启用 DNS 缓存,你可以手动安装并配置它。(放弃)

  2. 使用 systemd-resolved 配置 DNS 缓存。在某些现代 Linux 发行版(如 Ubuntu 18.04 及以后版本)中,systemd 提供了 systemd-resolved 服务用于处理 DNS 解析和缓存。你可以通过配置 systemd-resolved 来管理 DNS 缓存。


配置 systemd-resolved 缓存

  1. 打开 systemd-resolved 的配置文件 /etc/systemd/resolved.conf:
1
nano /etc/systemd/resolved.conf
  1. 查找并设置以下选项:
1
2
3
4
5
6
7
8
9
[Resolve]
DNS=1.1.1.1
FallbackDNS=8.8.8.8
DNSSEC=yes
DNSOverTLS=yes
Cache=yes
LLMNR=no
MulticastDNS=no
DNSStubListener=no
  • DNS:配置主 DNS 服务器的地址。
  • FallbackDNS:配置备用 DNS 服务器的地址。
  • Cache:启用 DNS 缓存(默认为启用)。
  1. 保存并退出文件。

  2. 重启 systemd-resolved 服务以使更改生效:

1
systemctl restart systemd-resolved

查看 DNS 缓存状态

使用以下命令查看当前 DNS 缓存的状态:

1
systemd-resolve --status

验证 DNS 缓存工作

要验证 DNS 缓存是否有效,可以执行以下操作:

  1. 查询 DNS 地址:

你可以使用 dig 或 nslookup 命令进行 DNS 查询。

1
dig google.com
  1. 查看缓存:

使用以下命令查看缓存中的 DNS 记录:

1
2
nscd -g  # 对于使用 nscd 的系统
systemd-resolve --status # 对于使用 systemd-resolved 的系统

总结

  1. 使用 nscd:可以通过编辑 /etc/nscd.conf 文件来配置 DNS 缓存。
  2. 使用 systemd-resolved:编辑 /etc/systemd/resolved.conf 来配置 DNS 缓存。

根据你的系统和需求,选择适合的 DNS 缓存工具,并根据需要调整缓存的过期时间和其他参数。


手动设置 DNS

1
nano /etc/resolv.conf
1
2
3
4
5
6
nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2606:4700:4700::1111
nameserver 2001:4860:4860::8888

优先级问题

在 Linux 系统中,systemd-resolved 和 /etc/resolv.conf 的优先级取决于它们的配置和如何设置。通常,systemd-resolved 作为一个 DNS 解析服务,会通过管理 /etc/resolv.conf 文件来控制 DNS 配置。

优先级关系:

  1. systemd-resolved 控制 /etc/resolv.conf

    当 systemd-resolved 启用时,它会通过符号链接将 /etc/resolv.conf 指向 /run/systemd/resolve/stub-resolv.conf 或 /etc/systemd/resolved.conf(根据系统配置不同而不同)。这样,systemd-resolved 成为系统的默认 DNS 解析器,/etc/resolv.conf 中的 DNS 配置会被自动管理和覆盖。

    • 如果 systemd-resolved 启动并且 /etc/resolv.conf 是一个符号链接,它的配置优先级高。
    • 此时,您直接修改 /etc/resolv.conf 文件不会生效,因为它会被 systemd-resolved 自动覆盖。
  2. 当 systemd-resolved 被禁用时

    如果您禁用 systemd-resolved,那么 /etc/resolv.conf 文件会回到传统的手动配置状态。此时,您可以直接编辑 /etc/resolv.conf 来配置 DNS,且该配置会生效。

综上:

  • 如果 systemd-resolved 启用,systemd-resolved 控制 DNS 配置,并通过 /etc/resolv.conf 的符号链接管理 DNS 解析。
  • 如果 systemd-resolved 被禁用,则 /etc/resolv.conf 配置直接生效。

因此,systemd-resolved 配置的优先级通常高于手动修改的 /etc/resolv.conf,除非您关闭了 systemd-resolved 服务并恢复了传统的 DNS 配置方式。


安装并启用 nscd:

  1. 在基于 Debian 系统(如 Ubuntu)上,使用以下命令安装 nscd:
1
apt-get install nscd
  1. 启动 nscd 服务:
1
systemctl start nscd
  1. 检查 nscd 是否正在运行:
1
systemctl status nscd