┌─────────────────────────────────────────────────────────────────────────────────────┐ │ DNS 数据包流程 - LoongFire │ │ XDP_DNS_DENYLIST + XDP 加速模式 │ └─────────────────────────────────────────────────────────────────────────────────────┘ ═══════════════════════════════════════════════════════════════════════════════════════ 模式 1:XDP 加速已禁用(xdp_dns_denylist 运行,dns_fw 已禁用) ═══════════════════════════════════════════════════════════════════════════════════════ ┌──────────┐ ┌─────────────────────────────────────────────────────────────────┐ │ 客户端 │ │ XDP 层(内核) │ │ (LAN) │────▶│ ┌───────────────────────────────────────────────────────────┐ │ └──────────┘ │ │ xdp_dns_denylist(优先级 60)- 始终运行 │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ 检查 DNS 查询是否匹配黑名单/白名单映射 │ │ │ │ │ │ ✅ 支持通配符域名(如 *.example.com) │ │ │ │ │ │ ✅ 支持完全限定域名(FQDN) │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ 检查匹配结果 │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────┐ ┌─────────────┐ ┌──────────────────┐ │ │ │ │ │ ALLOW │ │ BLOCKED │ │ UNMATCHED │ │ │ │ │ │ (白名单)│ │ (黑名单) │ │ (未匹配任何规则) │ │ │ │ │ └─────────┘ └─────────────┘ └──────────────────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────────────────┐ │ │ │ │ │XDP_PASS │ │XDP_DROP│ │ XDP_REDIRECT │ │ │ │ │ │(STOP │ │(丢弃) │ │ (CONTINUE) │ │ │ │ │ │ CHAIN) │ │ │ │ 继续链处理) │ │ │ │ │ └─────────┘ └─────────┘ └─────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────┐│ │ │ │ │ 白名单: XDP_PASS → 停止链 → 直接进入网络栈 ││ │ │ │ │ 黑名单: XDP_DROP → 丢弃 ││ │ │ │ │ 未匹配: XDP_REDIRECT → 继续到 dns_fw (但未加载)││ │ │ │ └─────────────────────────────────────────────────────┘│ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ dns_fw(优先级 65)- 已禁用 │ │ │ │ (XDP=off 时不加载) │ │ │ │ ⚠️ 即使有 XDP_REDIRECT 数据包,也没有程序处理 │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ xdp_tls_sni(优先级 70)- 不相关 │ │ │ │ (仅当 XDP_REDIRECT 时才会到达,但未加载) │ │ │ └───────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ knot-resolver │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ 完整策略处理 │ │ │ ├───────────────────────────────────────────────────────────┤ │ │ │ 1. RPZ/DNSBL 黑名单(ENABLE_RPZ=on) │ │ │ │ 2. 安全搜索强制 │ │ │ │ 3. 自定义允许/阻止列表 │ │ │ │ 4. 主机文件(/etc/hosts) │ │ │ │ 5. DHCP 租约 │ │ │ │ 6. 转发器 │ │ │ │ 7. 缓存查询 │ │ │ └───────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 返回客户端响应 │ └─────────────────────────────────────────────────────────────────┘ 关键特性: ✓ xdp_dns_denylist 提供快速的黑名单/白名单过滤 ✓ ✅ 支持通配符域名(如 *.example.com) ✓ ✅ 支持完全限定域名(FQDN) ✓ dns_fw 未加载(XDP 加速已禁用) ✓ knot-resolver 处理所有过滤(RPZs、安全搜索等) ✓ XDP_PASS 停止链处理(白名单直接进入网络栈) ✓ XDP_REDIRECT 数据包会继续到 dns_fw,但没有程序处理 ═══════════════════════════════════════════════════════════════════════════════════════ 模式 2:XDP 加速已启用,xdp_dns_denylist 已卸载(dns_fw 单独运行) ═══════════════════════════════════════════════════════════════════════════════════════ ┌──────────┐ ┌─────────────────────────────────────────────────────────────────┐ │ 客户端 │ │ XDP 层(内核) │ │ (LAN) │────▶│ ┌───────────────────────────────────────────────────────────┐ │ └──────────┘ │ │ xdp_dns_denylist(优先级 60)- 已卸载 │ │ └──────────────────│ (已分离/停止/禁用) │ │ │ │ ⚠️ 所有数据包直接传递给下一个 XDP 程序 │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ dns_fw(优先级 65)- 已启用 │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ XDP DNS 过滤加速 │ │ │ │ │ │ ⚠️ 仅支持完全限定域名(FQDN) │ │ │ │ │ │ ❌ 不支持通配符(如 *.example.com) │ │ │ │ │ │ ✅ 仅支持精确域名匹配 │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ 检查匹配结果 │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ ▼ ▼ │ │ │ │ ┌─────────┐ ┌─────────────────────────────────────┐ │ │ │ │ │ DROP │ │ XDP_PASS 到 socket │ │ │ │ │ │ (阻止) │ │ (转发到 knot-resolver) │ │ │ │ │ └─────────┘ └─────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ xdp_tls_sni(优先级 70)- 不相关 │ │ │ │ (数据包已通过 XDP_PASS 进入网络栈) │ │ │ └───────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ knot-resolver │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ 最小化处理 │ │ │ ├───────────────────────────────────────────────────────────┤ │ │ │ ✓ 主机文件(/etc/hosts) │ │ │ │ ✓ DHCP 租约 │ │ │ │ ✓ 转发器 │ │ │ │ ✓ 缓存查询 │ │ │ │ ✗ RPZ/DNSBL(ENABLE_RPZ=off - 已禁用) │ │ │ │ ✗ 安全搜索(如果启用仍然工作) │ │ │ └───────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 返回客户端响应 │ └─────────────────────────────────────────────────────────────────┘ 关键特性: ✓ xdp_dns_denylist 已卸载(不运行) ✓ dns_fw 处理 DNSBL 加速(XDP 已启用) ⚠️ 仅支持完全限定域名(FQDN),不支持通配符 ❌ 通配符域名(如 *.example.com)不支持 ✓ knot-resolver 仅处理必要的解析功能 ✓ 内核中非常快速的 DNSBL 过滤 ═══════════════════════════════════════════════════════════════════════════════════════ 模式 3:XDP 加速已启用,xdp_dns_denylist 运行(两者共存) ═══════════════════════════════════════════════════════════════════════════════════════ ┌──────────┐ ┌─────────────────────────────────────────────────────────────────┐ │ 客户端 │ │ XDP 层(内核) │ │ (LAN) │────▶│ ┌───────────────────────────────────────────────────────────┐ │ └──────────┘ │ │ xdp_dns_denylist(优先级 60)- 始终运行 │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ 检查 DNS 查询是否匹配黑名单/白名单映射 │ │ │ │ │ │ ✅ 支持通配符域名(如 *.example.com) │ │ │ │ │ │ ✅ 支持完全限定域名(FQDN) │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ 检查匹配结果 │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────┐ ┌─────────────┐ ┌──────────────────┐ │ │ │ │ │ ALLOW │ │ BLOCKED │ │ UNMATCHED │ │ │ │ │ │ (白名单)│ │ (黑名单) │ │ (未匹配任何规则) │ │ │ │ │ └─────────┘ └─────────────┘ └──────────────────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────────────────┐ │ │ │ │ │XDP_PASS │ │XDP_DROP│ │ XDP_REDIRECT │ │ │ │ │ │(STOP │ │(丢弃) │ │ (CONTINUE) │ │ │ │ │ │ CHAIN) │ │ │ │ 继续链处理) │ │ │ │ │ └─────────┘ └─────────┘ └─────────────────────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────┐│ │ │ │ │ 白名单: XDP_PASS → 停止链 → 直接进入网络栈 ││ │ │ │ │ 黑名单: XDP_DROP → 丢弃 ││ │ │ │ │ 未匹配: XDP_REDIRECT → 继续到 dns_fw (dns_fw) ││ │ │ │ └─────────────────────────────────────────────────────┘│ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ dns_fw(优先级 65)- 已启用 │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ XDP DNS 过滤加速 │ │ │ │ │ │ ⚠️ 仅处理 XDP_REDIRECT 的数据包 │ │ │ │ │ │ ✅ 白名单数据包已被 XDP_PASS 跳过 │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ │ │ 检查匹配结果 │ │ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ │ │ ▼ ▼ │ │ │ │ ┌─────────┐ ┌─────────────────────────────────────┐ │ │ │ │ │ DROP │ │ XDP_PASS 到 socket │ │ │ │ │ │ (阻止) │ │ (转发到 knot-resolver) │ │ │ │ │ └─────────┘ └─────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ xdp_tls_sni(优先级 70)- 不相关 │ │ │ │ (仅当 XDP_REDIRECT 时才会到达) │ │ │ └───────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ knot-resolver │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ 最小化处理 │ │ │ ├───────────────────────────────────────────────────────────┤ │ │ │ ✓ 主机文件(/etc/hosts) │ │ │ │ ✓ DHCP 租约 │ │ │ │ ✓ 转发器 │ │ │ │ ✓ 缓存查询 │ │ │ │ ✗ RPZ/DNSBL(ENABLE_RPZ=off - 已禁用) │ │ │ │ ✗ 安全搜索(如果启用仍然工作) │ │ │ └───────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 返回客户端响应 │ └─────────────────────────────────────────────────────────────────┘ 关键特性: ✓ xdp_dns_denylist 始终运行(白名单/黑名单优先) ✓ dns_fw 处理未匹配数据包的 DNSBL 加速 ✓ 白名单数据包 (XDP_PASS) 跳过 dns_fw,直接进入网络栈 ✓ 黑名单数据包 (XDP_DROP) 被丢弃 ✓ 未匹配数据包 (XDP_REDIRECT) 由 dns_fw 处理 ✓ knot-resolver RPZ 已禁用(避免冲突) ✅ 这是最全面的过滤模式:白名单 + 黑名单 + DNSBL 加速 ═══════════════════════════════════════════════════════════════════════════════════════ XDP_DNS_DENYLIST 返回行为详解 ═══════════════════════════════════════════════════════════════════════════════════════ ┌─────────────────────────────────────────────────────────────────────────────────┐ │ xdp_dns_denylist 返回码逻辑 │ │ ───────────────────────────────────────────────────────────────────────────── │ │ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ is_allowed == 1 (白名单命中) │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ return XDP_PASS → STOP 链处理 │ │ │ │ ✅ 数据包直接进入网络栈 │ │ │ │ ✅ 跳过所有后续 XDP 程序 (dns_fw, xdp_tls_sni) │ │ │ │ ✅ 数据包到达 knot-resolver (无 RPZ) │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ is_blocked == 1 (黑名单命中) │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ return XDP_DROP → 丢弃数据包 │ │ │ │ ❌ 数据包被丢弃 │ │ │ │ ❌ 不会到达任何后续程序 │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────────┐ │ │ │ 默认 (未匹配任何规则) │ │ │ │ ────────────────────────────────────────────────────────────────────── │ │ │ │ return XDP_REDIRECT → 继续链处理 │ │ │ │ ✅ 数据包传递给下一个 XDP 程序 (dns_fw, 如果加载) │ │ │ │ ✅ dns_fw 检查 DNSBL 黑名单 (精确匹配) │ │ │ │ ✅ 如果未匹配,XDP_PASS 到 knot-resolver │ │ │ └─────────────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────────┘ ═══════════════════════════════════════════════════════════════════════════════════════ 三种模式完整对比 ═══════════════════════════════════════════════════════════════════════════════════════ ┌─────────────────────────────┬──────────────────┬──────────────────┬──────────────────┐ │ 功能 │ 模式 1 │ 模式 2 │ 模式 3 │ │ │ XDP=off │ XDP=on │ XDP=on │ │ │ denylist=on │ denylist=off │ denylist=on │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ xdp_dns_denylist │ ✅ 运行中 │ ❌ 已卸载 │ ✅ 运行中 │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ dns_fw (XDP 加速) │ ❌ 已禁用 │ ✅ 运行中 │ ✅ 运行中 │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 白名单 (XDP_PASS) │ ✅ 停止链 │ N/A │ ✅ 停止链 │ │ │ (直接进入栈) │ │ (直接进入栈) │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 黑名单 (XDP_DROP) │ ✅ 丢弃 │ ✅ 丢弃 │ ✅ 丢弃 │ │ │ (denylist) │ (dns_fw) │ (denylist) │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 未匹配 (XDP_REDIRECT) │ ✅ 继续链 │ N/A │ ✅ 继续链 │ │ │ (无程序处理) │ │ (到 dns_fw) │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 通配符域名支持 │ ✅ 支持 │ ❌ 不支持 │ ✅ 支持 │ │ │ (denylist) │ (dns_fw 仅精确) │ (denylist) │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 精确域名匹配 │ ✅ 支持 │ ✅ 支持 │ ✅ 支持 │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ DNSBL 过滤位置 │ knot-resolver │ XDP (dns_fw) │ XDP (dns_fw) │ │ │ + denylist │ + 无 denylist │ + denylist │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ knot-resolver RPZ │ ✅ 启用 │ ❌ 禁用 │ ❌ 禁用 │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 安全搜索 │ ✅ 启用 │ ✅ 启用 │ ✅ 启用 │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 性能 │ 良好 │ ⚡ 优秀 │ ⚡ 优秀 │ │ │ │ (最快) │ (最快+全面) │ ├─────────────────────────────┼──────────────────┼──────────────────┼──────────────────┤ │ 功能完整性 │ 最全面 │ 有限 │ 最全面+最快 │ │ │ (最慢) │ (仅精确匹配) │ (推荐) │ └─────────────────────────────┴──────────────────┴──────────────────┴──────────────────┘ ═══════════════════════════════════════════════════════════════════════════════════════ XDP 链处理流程详解 (Mode 3 - Recommended) ═══════════════════════════════════════════════════════════════════════════════════════ ┌─────────────────────────────────────────────────────────────────────────────────┐ │ 完整 XDP 链处理流程 (Mode 3) │ │ ───────────────────────────────────────────────────────────────────────────── │ │ │ │ ┌──────────────┐ │ │ │ 数据包到达 │ │ │ └──────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │ xdp_dns_denylist (优先级 60) │ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ 检查: 是否在 allowlist? → 是 → XDP_PASS (停止链) │ │ │ │ │ │ └→ 直接进入网络栈 → knot-resolver │ │ │ │ │ │ 检查: 是否在 blocklist? → 是 → XDP_DROP (丢弃) │ │ │ │ │ │ 默认: 未匹配 → XDP_REDIRECT (继续链) → dns_fw │ │ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ │ │ (仅 XDP_REDIRECT 继续) │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │ dns_fw (优先级 65) - XDP 加速 │ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ 检查: 是否在 DNSBL 黑名单? → 是 → XDP_DROP (丢弃) │ │ │ │ │ │ 默认: 未匹配 → XDP_PASS (继续) → 进入网络栈 │ │ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │ xdp_tls_sni (优先级 70) - TLS SNI 过滤 (不相关) │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │ knot-resolver (ENABLE_RPZ=off) │ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ ✓ 主机文件 (/etc/hosts) │ │ │ │ │ │ ✓ DHCP 租约 │ │ │ │ │ │ ✓ 转发器 │ │ │ │ │ │ ✓ 缓存查询 │ │ │ │ │ │ ✗ RPZ/DNSBL (已禁用) │ │ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────────────────────┐ │ │ │ 返回客户端响应 │ │ │ └──────────────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────────┘ ✅ Mode 3 是推荐的配置: - xdp_dns_denylist 处理白名单/黑名单 (支持通配符) - dns_fw 处理未匹配数据包的 DNSBL 加速 - knot-resolver RPZ 禁用 (避免冲突) - 最快速度 + 最全面功能