前文介绍的 XDP 程序主动修改 DNS 报文实现 RRL、Cookie 与填充,本文转向被动遥测:在 XDP 层不改包、不动权威服务器软件,直接对入向查询计数并按 QTYPE、QR 位、IP 版本、EDNS0 缓冲区等维度聚合,最终输出至 Prometheus + Grafana 仪表盘。
为何选择 XDP 而非 TC 层
对出向应答做统计虽能反映服务器实际资源消耗,但需在 TC 层挂载,此时报文已穿越用户态,且服务器自身可完整采集。改在 XDP 处理入向查询,可捕获被服务器早期丢弃的畸形包、非本区查询等“从未被应答”的流量,这些在应答侧完全不可见。实验证实 TC 与 XDP 均可落地,但 XDP 能提供应答侧缺失的丢包视角。
指标维度与数据结构
参考 DNS-OARC DSC 设计,核心指标为查询计数与速率,按 QTYPE、QR 位、IPv4/IPv6、EDNS0 缓冲区大小四个维度交叉聚合。维度组合数随参数取值增长,原文未给出具体数据上限,但指出需在 BPF map 容量与键宽度间权衡。代码层面,XDP 与 TC 在 map 创建、报文修改、尾调用等 API 上有细微差异,均非阻碍。
落地路径与可行性
程序在 XDP 解析 DNS 首部,提取上述字段后原子增计数器,再通过 perf event 或 ring buffer 导出用户态,接入 Prometheus 抓取并由 Grafana 绘图。全程不修改报文载荷,不依赖权威服务器配合,实验中双层部署均通过功能验证,确认被动遥测在生产链路可行。
对运维而言,这套方案在不侵入 DNS 软件、不改包转发路径的前提下,补齐了“被丢弃查询”的可观测盲区,配合现有监控栈即可上线,适合快速排查异常流量来源与协议异常分布。
原文: APNIC Blog(2022-07-13)|编译自 APNIC Blog,事实以原文为准。
来源:APNIC Blog