目 录CONTENT

文章目录

【运维】使用Knot kdig测试DoH服务速度

EulerBlind
2025-07-08 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

概述

DNS over HTTPS (DoH) 是一种通过HTTPS协议进行DNS查询的技术,提供更好的隐私保护和安全性。本文将介绍如何安装Knot DNS工具并使用kdig命令测试不同DoH服务提供商的响应速度。

什么是Knot DNS

Knot DNS是由CZ.NIC开发的高性能权威DNS服务器,同时也提供了强大的DNS客户端工具kdig。kdig是dig命令的现代化替代品,支持DNS over HTTPS (DoH)、DNS over TLS (DoT)等新协议。

Knot DNS的优势

  • 现代协议支持:原生支持DoH、DoT、DNSSEC等
  • 高性能:专为现代网络环境优化
  • 丰富功能:提供详细的调试和分析信息
  • 跨平台:支持Linux、macOS、Windows等操作系统

安装Knot DNS

macOS安装

# 使用Homebrew安装
brew install knot

Ubuntu/Debian安装

# 更新软件包列表
sudo apt update
​
# 安装knot-dnsutils包
sudo apt install knot-dnsutils

CentOS/RHEL/Fedora安装

# Fedora
sudo dnf install knot-utils
​
# CentOS/RHEL (需要EPEL)
sudo yum install epel-release
sudo yum install knot-utils

验证安装

# 检查kdig是否安装成功
kdig --version
​
# 查看帮助信息
kdig --help

DoH测试脚本

我编写了一个测试脚本来自动化DoH服务的速度测试:

#!/bin/bash
​
# 简化版 Knot kdig DoH测试脚本
# 使用kdig工具测试常用DoH服务的响应速度
​
echo "============================================"
echo "    Knot kdig DoH速度测试工具 (简化版)"
echo "============================================"
echo ""
​
# 检查kdig是否安装
if ! command -v kdig &> /dev/null; then
    echo "错误:未找到kdig命令"
    echo "请安装Knot DNS工具包:"
    echo "  macOS:   brew install knot"
    echo "  Ubuntu:  sudo apt install knot-dnsutils"
    echo "  CentOS:  sudo dnf install knot-utils"
    exit 1
fi
​
# 定义测试域名
DOMAIN="www.google.com"
​
# 定义服务器列表
declare -a servers=(
    "Cloudflare:1.1.1.1"
    "Google:8.8.8.8"
    "AliDNS:223.5.5.5"
    "TencentDNS:119.29.29.29"
    "AdGuard:94.140.14.14"
    "Quad9:9.9.9.9"
)
​
echo "测试域名: $DOMAIN"
echo "记录类型: A"
echo ""
​
# 测试每个服务器
for server in "${servers[@]}"; do
    name=$(echo $server | cut -d: -f1)
    ip=$(echo $server | cut -d: -f2)
    
    echo "测试 $name ($ip)..."
    
    # 使用time命令测试
    { time kdig +https @$ip $DOMAIN A > /dev/null 2>&1; } 2>&1 | grep real
    
    # 检查是否成功
    result=$(kdig +https @$ip $DOMAIN A 2>&1)
    if echo "$result" | grep -q "ANSWER: [1-9]"; then
        echo "✅ 成功"
    else
        echo "❌ 失败"
    fi
    echo ""
done
​
echo "============================================"
echo "           手动测试命令示例"
echo "============================================"
echo ""
echo "您可以使用以下命令手动测试:"
echo ""
for server in "${servers[@]}"; do
    name=$(echo $server | cut -d: -f1)
    ip=$(echo $server | cut -d: -f2)
    echo "# 测试 $name"
    echo "time kdig +https @$ip $DOMAIN A"
    echo ""
done
​
echo "测试完成!"
echo ""
echo "注意事项:"
echo "• 使用 'real' 时间作为响应时间参考"
echo "• 多次测试取平均值更准确"
echo "• 选择响应时间最短且稳定的服务器"

运行测试脚本

**将上述脚本保存为 **kdig_doh_simple.sh,然后运行:

# 添加执行权限
chmod +x kdig_doh_simple.sh
​
# 运行测试
./kdig_doh_simple.sh

实际测试结果

在macOS环境下的测试结果如下:

============================================
    Knot kdig DoH速度测试工具 (简化版)
============================================
​
测试域名: www.google.com
记录类型: A
​
测试 Cloudflare (1.1.1.1)...
real    0m0.699s
✅ 成功
​
测试 Google (8.8.8.8)...
real    0m0.709s
✅ 成功
​
测试 AliDNS (223.5.5.5)...
real    0m0.048s
✅ 成功
​
测试 TencentDNS (119.29.29.29)...
real    0m5.026s
❌ 失败
​
测试 AdGuard (94.140.14.14)...
real    0m0.937s
✅ 成功
​
测试 Quad9 (9.9.9.9)...
real    0m0.667s
✅ 成功

测试结果分析

速度排名(从快到慢)

  1. 阿里DNS (223.5.5.5) - 48ms ⭐⭐⭐⭐⭐
    • 响应速度最快
    • 国内用户访问延迟低
    • 阿里云DNS服务稳定可靠
  2. Quad9 (9.9.9.9) - 667ms ⭐⭐⭐⭐
    • 专注隐私和安全的DNS服务
    • 自动阻止恶意域名
    • 响应速度良好
  3. Cloudflare (1.1.1.1) - 699ms ⭐⭐⭐⭐
    • 全球知名的公共DNS
    • 隐私保护政策完善
    • 全球CDN网络支持
  4. Google (8.8.8.8) - 709ms ⭐⭐⭐
    • 老牌公共DNS服务
    • 技术成熟稳定
    • 响应速度中等
  5. AdGuard (94.140.14.14) - 937ms ⭐⭐⭐
    • 内置广告和跟踪器拦截
    • 隐私保护功能丰富
    • 响应速度偏慢
  6. 腾讯DNS (119.29.29.29) - 超时失败 ❌
    • 测试中出现连接超时
    • 可能是服务器配置或网络问题
    • 建议多次测试确认

关键发现

  1. 地理位置影响显著:阿里DNS作为国内服务商,响应时间明显优于国际服务商
  2. 服务可用性差异:腾讯DNS在测试中失败,可能存在配置或兼容性问题
  3. 隐私与速度平衡:Cloudflare和Quad9在隐私保护和响应速度间取得良好平衡

手动测试命令

除了使用脚本,您也可以手动测试特定服务:

# 测试Cloudflare DoH
time kdig +https @1.1.1.1 www.google.com A
​
# 测试Google DoH
time kdig +https @8.8.8.8 www.google.com A
​
# 测试阿里DNS DoH
time kdig +https @223.5.5.5 www.google.com A
​
# 查看详细输出
kdig +https @1.1.1.1 www.google.com A
​
# 测试其他记录类型
kdig +https @1.1.1.1 www.google.com AAAA
kdig +https @1.1.1.1 www.google.com MX

高级用法

启用详细调试

# 显示详细调试信息
kdig +https @1.1.1.1 www.google.com A +trace
​
# 显示DNS报文内容
kdig +https @1.1.1.1 www.google.com A +short

批量测试

# 测试多个域名
for domain in google.com facebook.com github.com; do
    echo "测试 $domain:"
    time kdig +https @1.1.1.1 $domain A
    echo ""
done

比较DoH与传统DNS

# 传统DNS查询
time kdig @8.8.8.8 www.google.com A
​
# DoH查询
time kdig +https @8.8.8.8 www.google.com A
​
# DoT查询(如果支持)
time kdig +tls @1.1.1.1 www.google.com A

配置建议

基于测试结果,推荐以下配置:

国内用户

  • 首选:阿里DNS (223.5.5.5)
  • 备选:腾讯DNS (119.29.29.29) - 需验证可用性
  • 国际备选:Cloudflare (1.1.1.1)

国际用户

  • 首选:Cloudflare (1.1.1.1)
  • 备选:Quad9 (9.9.9.9)
  • 传统选择:Google (8.8.8.8)

隐私敏感用户

  • 首选:Quad9 (9.9.9.9) - 无日志记录
  • 备选:AdGuard (94.140.14.14) - 内置广告拦截
  • 国际选择:Cloudflare (1.1.1.1) - 隐私政策透明

故障排除

常见问题

  1. "command not found: kdig"
    • 解决方案:按照安装部分重新安装Knot DNS
  2. 连接超时
    • 检查网络连接
    • 尝试其他DNS服务器
    • 检查防火墙设置
  3. 证书错误
    • 更新系统证书库
    • 检查系统时间是否正确
  4. 性能异常
    • 多次测试取平均值
    • 检查网络延迟
    • 尝试不同时间段测试

调试技巧

# 显示详细错误信息
kdig +https @1.1.1.1 www.google.com A 2>&1
​
# 使用curl验证DoH端点
curl -H "Accept: application/dns-json" \
     "https://1.1.1.1/dns-query?name=google.com&type=A"
​
# 检查TLS连接
openssl s_client -connect 1.1.1.1:443 -servername 1.1.1.1

总结

通过本文的介绍和实际测试,我们可以得出以下结论:

  1. Knot kdig是优秀的DoH测试工具:提供简洁易用的命令行接口,支持现代DNS协议
  2. 地理位置是关键因素:选择地理位置最近的DNS服务通常能获得最佳性能
  3. 稳定性同样重要:除了速度,还需要考虑服务的可用性和稳定性
  4. 隐私与性能需要平衡:根据个人需求在隐私保护和响应速度间做出选择

建议定期进行DoH服务测试,因为网络状况和服务质量会随时间变化。同时,配置多个DNS服务器作为备选方案,确保DNS解析的高可用性。

0

评论区