Rescached
rescached 是一个将互联网名称和地址缓存到本地内存中以加速 DNS 解析的守护进程。
rescached 并非像 BIND 那样的 DNS 服务器重新实现。rescached 的主要目标仅在于缓存 DNS 查询和响应,以最大限度地减少不必要的对外网络流量。它适用于个人系统或为一小组用户提供服务。
特性
当前功能列表:
- 能够处理来自 UDP 和 TCP 连接的请求
- 能够使用 UDP 或 TCP 转发请求
- 加载并提供
/etc/hosts中的地址和主机名 - 加载并提供
/etc/rescached/hosts.d/目录内 hosts 格式的文件 - 通过
/etc/rescached/hosts.d/中的主机列表拦截广告和/或恶意网站 - 支持加载并提供来自
/etc/rescached/zone.d/的区域文件 (zone file) 格式 - 与 openresolv 集成
- 支持 DNS over TLS (DoT) (RFC:7858)
- 支持 DNS over HTTPS (DoH) (RFC:8484)
rescached 的缓存工作原理
缓存中的每个 DNS 记录都有一个“最后访问时间”字段,该字段定义了缓存在内存中的排序方式。最近查询的主机名将位于缓存列表的底部,而最久未查询的主机名将位于缓存列表的顶部。
下表展示了内存中的缓存列表:
| 访问时间 | 主机名 |
|---|---|
| 2018-01-01 00:00:01 | kilabit.info |
| 2018-01-01 00:00:02 | archlinux.org |
| ... | ... |
| 2018-01-01 00:01:00 | wiki.archlinux.org |
每隔 cache.prune_delay(例如每 5 分钟),rescached 会尝试从缓存中清除旧记录。如果缓存中记录的访问时间小于 当前时间 + cache.threshold(请记住 "cache.threshold" 的值必须为负数),它将从缓存中删除该记录。
安装
安装 rescached-gitAUR 软件包。
安装后配置
默认配置允许直接启动守护进程。
Rescached 的配置文件位于 /etc/rescached/rescached.cfg。需要修改的条目包括:
- 设置上游 DNS 服务器
- 根据您偏好的 DNS 服务器更改
parent的值。
- 设置缓存清除延迟和阈值
- 编辑 rescached 配置文件
/etc/rescached/rescached.cfg,根据需求更改cache.prune_delay和/或cache.threshold的值。
编辑配置文件后,修改 resolv.conf 文件,将当前的解析器地址替换为回环地址
nameserver 127.0.0.1
其他程序可能会覆盖此设置;详见 域名解析#覆盖 /etc/resolv.conf。
与 OpenResolv 的集成
Rescached 可以检测由 resolvconf 生成的 resolv.conf 文件的更改。要使用此功能,请在配置文件中将 file.resolvconf 设置为 /etc/rescached/resolv.conf。在 /etc/resolvconf.conf 中,将 dnsmasq_resolv、pdnsd_resolv 或 unbound_conf 设置为指向同一个文件 /etc/rescached/resolv.conf。
Web 用户界面
rescached 服务提供了一个可以通过 http://127.0.0.1:5380 访问的 Web 用户界面。最新版本提供以下界面:
首页允许用户监控活动缓存、查询缓存以及删除缓存。
环境页面允许用户实时修改 rescached 配置。
主机拦截页面允许用户启用或禁用外部的主机拦截列表源。
Hosts.d 页面允许用户管理 hosts 文件,包括创建新 hosts 文件、创建新记录或删除记录。
Zone.d 页面允许用户管理区域文件,包括创建新区域文件,以及在区域文件中添加或删除新的资源记录。
参见
- 安装后,更多信息和配置请参阅 rescached.cfg(5)
- Bug 报告和功能请求请优先提交至 GitHub