南方數據技术观察
首页 行业新闻 教程 技术文章 AI 对话 官网 咨询与报价
首页 / 行业新闻

XDP 为 DNS 分流:在内核态完成轻量响应,把复杂查询留给用户态

NLnet Labs 通过实现 XDP 版 Response Rate Limiting,验证了在内核态直接处理简单 DNS 查询、将复杂查询上送用户态权威/递归服务器的可行路径。这种“内核分流 + 用户态深度处理”模式避免了重写成熟 DNS 软件,同时利用 XDP 的零拷贝、无 socket buffer 特性吸收大流量攻击或无效查询。

分层考量与无状态前提

DNS 位于应用层,XDP 却工作在驱动层,二者跨层协作必须承认两个硬约束。首先,XDP 仅能以平凡方式处理未加密、无状态流量——即普通 UDP DNS;DNS over TLS (DoT) 等加密协议因需维护会话状态与握手,超出 XDP 资源模型,原文明确留作读者练习。其次,跨层不等于破坏分层:XDP 程序只负责报文级别的校验、速率限制与 REFUSED 等轻量响应,保证合法查询完整上送协议栈,上层软件仍按 RFC 处理区域传送、递归解析、DNSSEC 验证等完整语义。NLnet Labs 强调,这种“内核态做过滤、用户态做语义”并不违背 IP 协议栈分层,而是把分层边界下沉到驱动入口。

xdp-dns-says-no 与 RRL 的工程取舍

早期演示程序 xdp-dns-says-no 直接在 XDP 中构造 REFUSED 响应,连校验和都在 eBPF 里重算,完全绕过协议栈与 socket 分配,展示了“零用户态参与”的极致性能。但生产环境需要更细粒度策略:Response Rate Limiting (RRL) 需对客户端 IP、查询名、查询类型计数并滑动窗口判断。受限于 eBPF map 大小与指令上限,NLnet Labs 在 XDP 侧仅实现基于源 IP 的简单计数与阈值拦截,复杂的按域名、按类型限速仍留在用户态 NSD/Unbound 完成。这种取舍保证了 XDP 程序在 4096 条指令预算内稳定运行,同时不丢失现有软件十余年积累的 RFC 合规性与运维生态。

用户态无关性与部署现实

XDP 程序只要保证“合法查询原封推送给协议栈”,上层无论跑 NSD、Unbound、PowerDNS 还是自研解析器均无需改动,实现了真正的用户态无关性。部署时只需在网卡驱动挂载 xdp-dns-rrl 等程序,配置阈值与动作(DROP/TCPRESP/REFUSED),即可在不重启命名服务、不修改防火墙规则的情况下生效。原文未给出具体吞吐量或丢包率数据,但指出该方案已在 NLnet Labs 生产集群验证,能在不增加服务器成本前提下吸收数百万 pps 级别的放大攻击流量。

对运维与网络工程师而言,XDP 不是要替换 BIND 或 Unbound,而是给现有 DNS 基础设施加一层“内核态前置过滤器”:用几百行 eBPF 代码在驱动入口拦截显而易见的垃圾查询,把宝贵的用户态 CPU 留给真正需要递归、验签、区域传送的合法流量。这种增量部署、零侵入改造的特性,使其成为应对 DNS 放大攻击、配置错误风暴的低成本、高兼容性补充手段。

原文: APNIC Blog(2020-10-23)|编译自 APNIC Blog,事实以原文为准。

来源:APNIC Blog

返回列表