在 Linux 上配置 DNS 缓存
在 Linux 上配置 DNS 缓存
在 Linux 中,DNS 缓存通常由 nscd(Name Service Cache Daemon)或 dnsmasq 等工具提供。如果你的 Linux 系统没有自动启用 DNS 缓存,你可以手动安装并配置它。(放弃)
使用 systemd-resolved 配置 DNS 缓存。在某些现代 Linux 发行版(如 Ubuntu 18.04 及以后版本)中,systemd 提供了 systemd-resolved 服务用于处理 DNS 解析和缓存。你可以通过配置 systemd-resolved 来管理 DNS 缓存。
配置 systemd-resolved 缓存
- 打开 systemd-resolved 的配置文件 /etc/systemd/resolved.conf:
1 | nano /etc/systemd/resolved.conf |
- 查找并设置以下选项:
1 | [Resolve] |
- DNS:配置主 DNS 服务器的地址。
- FallbackDNS:配置备用 DNS 服务器的地址。
- Cache:启用 DNS 缓存(默认为启用)。
保存并退出文件。
重启 systemd-resolved 服务以使更改生效:
1 | systemctl restart systemd-resolved |
查看 DNS 缓存状态
使用以下命令查看当前 DNS 缓存的状态:
1 | systemd-resolve --status |
验证 DNS 缓存工作
要验证 DNS 缓存是否有效,可以执行以下操作:
- 查询 DNS 地址:
你可以使用 dig 或 nslookup 命令进行 DNS 查询。
1 | dig google.com |
- 查看缓存:
使用以下命令查看缓存中的 DNS 记录:
1 | nscd -g # 对于使用 nscd 的系统 |
总结
- 使用 nscd:可以通过编辑 /etc/nscd.conf 文件来配置 DNS 缓存。
- 使用 systemd-resolved:编辑 /etc/systemd/resolved.conf 来配置 DNS 缓存。
根据你的系统和需求,选择适合的 DNS 缓存工具,并根据需要调整缓存的过期时间和其他参数。
手动设置 DNS
1 | nano /etc/resolv.conf |
1 | nameserver 1.1.1.1 |
优先级问题
在 Linux 系统中,systemd-resolved 和 /etc/resolv.conf 的优先级取决于它们的配置和如何设置。通常,systemd-resolved 作为一个 DNS 解析服务,会通过管理 /etc/resolv.conf 文件来控制 DNS 配置。
优先级关系:
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 自动覆盖。
当 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:
- 在基于 Debian 系统(如 Ubuntu)上,使用以下命令安装 nscd:
1 | apt-get install nscd |
- 启动 nscd 服务:
1 | systemctl start nscd |
- 检查 nscd 是否正在运行:
1 | systemctl status nscd |
