searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

谈谈Linux上的DNS cache

2025-03-28 06:19:30
3
0
在Windows上,一直都提供了系统级的dns缓存能力(ipconfig /displaydns),一些应用程序比如浏览器也会实现应用级别的dns cache能力。
但是在Linux上,没有一致的系统级dns cache的实现,很多发行版默认也没有提供dns cache的能力。
在一些性能测试的场景,可能会引起一些干扰。本文扼要梳理一下Linux上的dns cache情况。

1. 早期阶段:无系统级DNS缓存

在Linux的早期版本中(例如20世纪90年代的发行版),并没有内置的系统级DNS缓存机制。应用程序(如浏览器或邮件客户端)通常直接通过gethostbyname()等libc函数调用解析DNS请求。这些请求会通过/etc/resolv.conf文件中指定的DNS服务器进行解析,每次查询都会直接发送到外部DNS服务器。这种方式效率较低,尤其是在网络连接较慢或DNS服务器响应延迟较高的情况下。

2. NSCD的引入(Name Service Cache Daemon)

随着Linux系统的发展,为了提升DNS解析效率,nscd(Name Service Cache Daemon)在1990年代后期被引入,作为glibc的一部分。它是一个可选的守护进程,用于缓存DNS解析结果、用户信息(如/etc/passwd)和组信息(如/etc/group)。
  • 工作方式nscd运行在系统后台,拦截应用程序的DNS请求,并将解析结果存储在内存中。
  • 优点:减少了对外部DNS服务器的直接查询,提升了性能。
  • 局限性:配置复杂,稳定性不佳(有时会导致缓存失效或进程崩溃),而且需要手动启用和管理。因此,许多发行版选择不使用它。

3. Bind作为本地缓存(2000年代初)

在服务器场景中,系统管理员开始使用BIND(Berkeley Internet Name Domain)作为本地DNS缓存服务器。BIND是一个功能强大的DNS服务器软件,可以配置为递归解析器并缓存DNS查询结果。
  • 应用场景:通常用于企业或高负载环境,而不是普通桌面用户。
  • 特点:支持复杂的DNS配置,但对于普通Linux用户来说过于重量级,部署和维护成本较高。

4. dnsmasq的兴起(2000年代中期)

dnsmasq是一个轻量级的DNS转发和缓存工具,逐渐成为Linux系统中流行的解决方案,尤其是在家庭网络和小型服务器中。
  • 特点
    • 简单易用,配置开箱即用。
    • 支持DNS缓存、DHCP服务和本地主机名解析。
    • 默认缓存DNS查询结果,减少外部请求。
  • 普及:许多Linux发行版(如Ubuntu)开始在网络管理工具(如NetworkManager)中集成dnsmasq,将其作为默认的本地DNS缓存方案。
  • 局限性:功能相对简单,不适合需要复杂DNS策略的场景。

5. Systemd-resolved的引入(2015年代之后)

随着systemd在Linux生态中的广泛采用,systemd-resolved在2015年左右被引入,作为一个现代化的DNS解析和缓存解决方案。
它是systemd套件的一部分,旨在取代传统的解析机制。
  • 工作方式
    • 通过127.0.0.53提供本地DNS stub监听服务。
    • 支持DNS缓存、DNSSEC验证(可选)和多协议解析(包括mDNS和LLMNR)。
    • /etc/resolv.conf动态集成,自动管理DNS配置。
  • 优点
    • 系统级集成度高,默认启用在许多现代发行版(如Ubuntu 16.04+、Fedora等)。
    • 支持更安全的DNS协议(如DNS over TLS)。
  • 争议:部分用户认为systemd-resolved过于复杂或与现有工具冲突,导致很多发行版(如Debian和RHEL等)默认不启用。

6. 现代发展:DNS安全与隐私(2020年代)

近年来,随着对网络隐私和安全的关注增加,Linux中的DNS缓存机制进一步演进:
  • DNS over HTTPS (DoH) 和 DNS over TLS (DoT)Unboundsystemd-resolved开始支持加密DNS协议,以防止DNS劫持和监听。
  • Unbound开始流行Unbound是一个专注于递归解析和缓存的轻量级DNS服务器,支持DNSSEC和DoT,逐渐成为许多高级用户的首选。
 
0条评论
作者已关闭评论
c****w
3文章数
0粉丝数
c****w
3 文章 | 0 粉丝
c****w
3文章数
0粉丝数
c****w
3 文章 | 0 粉丝
原创

谈谈Linux上的DNS cache

2025-03-28 06:19:30
3
0
在Windows上,一直都提供了系统级的dns缓存能力(ipconfig /displaydns),一些应用程序比如浏览器也会实现应用级别的dns cache能力。
但是在Linux上,没有一致的系统级dns cache的实现,很多发行版默认也没有提供dns cache的能力。
在一些性能测试的场景,可能会引起一些干扰。本文扼要梳理一下Linux上的dns cache情况。

1. 早期阶段:无系统级DNS缓存

在Linux的早期版本中(例如20世纪90年代的发行版),并没有内置的系统级DNS缓存机制。应用程序(如浏览器或邮件客户端)通常直接通过gethostbyname()等libc函数调用解析DNS请求。这些请求会通过/etc/resolv.conf文件中指定的DNS服务器进行解析,每次查询都会直接发送到外部DNS服务器。这种方式效率较低,尤其是在网络连接较慢或DNS服务器响应延迟较高的情况下。

2. NSCD的引入(Name Service Cache Daemon)

随着Linux系统的发展,为了提升DNS解析效率,nscd(Name Service Cache Daemon)在1990年代后期被引入,作为glibc的一部分。它是一个可选的守护进程,用于缓存DNS解析结果、用户信息(如/etc/passwd)和组信息(如/etc/group)。
  • 工作方式nscd运行在系统后台,拦截应用程序的DNS请求,并将解析结果存储在内存中。
  • 优点:减少了对外部DNS服务器的直接查询,提升了性能。
  • 局限性:配置复杂,稳定性不佳(有时会导致缓存失效或进程崩溃),而且需要手动启用和管理。因此,许多发行版选择不使用它。

3. Bind作为本地缓存(2000年代初)

在服务器场景中,系统管理员开始使用BIND(Berkeley Internet Name Domain)作为本地DNS缓存服务器。BIND是一个功能强大的DNS服务器软件,可以配置为递归解析器并缓存DNS查询结果。
  • 应用场景:通常用于企业或高负载环境,而不是普通桌面用户。
  • 特点:支持复杂的DNS配置,但对于普通Linux用户来说过于重量级,部署和维护成本较高。

4. dnsmasq的兴起(2000年代中期)

dnsmasq是一个轻量级的DNS转发和缓存工具,逐渐成为Linux系统中流行的解决方案,尤其是在家庭网络和小型服务器中。
  • 特点
    • 简单易用,配置开箱即用。
    • 支持DNS缓存、DHCP服务和本地主机名解析。
    • 默认缓存DNS查询结果,减少外部请求。
  • 普及:许多Linux发行版(如Ubuntu)开始在网络管理工具(如NetworkManager)中集成dnsmasq,将其作为默认的本地DNS缓存方案。
  • 局限性:功能相对简单,不适合需要复杂DNS策略的场景。

5. Systemd-resolved的引入(2015年代之后)

随着systemd在Linux生态中的广泛采用,systemd-resolved在2015年左右被引入,作为一个现代化的DNS解析和缓存解决方案。
它是systemd套件的一部分,旨在取代传统的解析机制。
  • 工作方式
    • 通过127.0.0.53提供本地DNS stub监听服务。
    • 支持DNS缓存、DNSSEC验证(可选)和多协议解析(包括mDNS和LLMNR)。
    • /etc/resolv.conf动态集成,自动管理DNS配置。
  • 优点
    • 系统级集成度高,默认启用在许多现代发行版(如Ubuntu 16.04+、Fedora等)。
    • 支持更安全的DNS协议(如DNS over TLS)。
  • 争议:部分用户认为systemd-resolved过于复杂或与现有工具冲突,导致很多发行版(如Debian和RHEL等)默认不启用。

6. 现代发展:DNS安全与隐私(2020年代)

近年来,随着对网络隐私和安全的关注增加,Linux中的DNS缓存机制进一步演进:
  • DNS over HTTPS (DoH) 和 DNS over TLS (DoT)Unboundsystemd-resolved开始支持加密DNS协议,以防止DNS劫持和监听。
  • Unbound开始流行Unbound是一个专注于递归解析和缓存的轻量级DNS服务器,支持DNSSEC和DoT,逐渐成为许多高级用户的首选。
 
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0