如何验证您是否正在使用 Quad9/其他非 Cloudflare DNS 提供商的 DNS over HTTPS (DoH)

如何验证您是否正在使用 Quad9/其他非 Cloudflare DNS 提供商的 DNS over HTTPS (DoH)

我正在使用 pihole 和 Quad9 DoH 的上游 DNS 服务器。上游 DNS 和 pihole 通过 docker 配置docker-compose.yml file,上游 DoH 服务器使用cloudflared服务。

version: "3.5"
networks:
   network-pihole:
     name: "dns-pihole"
     driver: bridge
     ipam:
       driver: default
       config:
         - subnet: 192.10.0.0/24    #Internal Docker Network between pihole and wirguard, bridged
  
  cloudflared:
    image: crazymax/cloudflared:latest
    container_name: cloudflared
    ports:
      - '5053:5053/udp'
      - '5053:5053/tcp'
    environment:
      - "TZ=Europe/Budapest"
      - "TUNNEL_DNS_UPSTREAM=https://9.9.9.9/dns-query,https://149.112.112.112/dns-query"
      # - "TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query"
    restart: unless-stopped
    networks:
      network-pihole:
        ipv4_address: 192.10.0.2

  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    environment:
      - "TZ=Europe/London"
      - "PIHOLE_DNS_=192.10.0.2#5053"
    dns:
      - 127.0.0.1
      - 9.9.9.9
    # Volumes store your data between container upgrades
    volumes:
      - "./etc-pihole/:/etc/pihole/"
      - "./etc-dnsmasq.d/:/etc/dnsmasq.d/"
    cap_add:
      - NET_ADMIN
    restart: unless-stopped
    networks:
      network-pihole:
        ipv4_address: 192.10.0.3

cloudflared服务环境:。我将TUNNEL_DNS_UPSTREAM=设置设为https://9.9.9.9/dns-query,https://149.112.112.112/dns-query。然后皮孔服务DNS:9.9.9.9

一切都运行良好,但是当我浏览到cloudflare 检查器说我没有使用 https 上的 dns / 安全 dns:

在此处输入图片描述 在此处输入图片描述

但是,如果我使用 cloudflares DoH,我将设置设置TUNNEL_DNS_UPSTREAM=TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query皮孔服务DNS:然后1.1.1.1再次运行两个 cloudflare 测试,它现在显示:使用 DNS over HTTPS (DoH) 是和一个绿色勾号表示安全 DNS

我不确定为什么这些测试不适用于 Quad9 DoH。还有其他方法可以验证我正在使用 Quad9 DoH 吗?

我甚至不确定我是否可以使用 wireshark 查看数据包以查看 dns 查询是否已加密?我对 wirehshark 还很陌生,所以如果这是验证 Quad9 DoH 的一种方法,那么我不确定我要寻找什么。

答案1

一切都运行良好,但是当我浏览到这个和这个 cloudflare 检查器时,它说我没有使用 https 上的 dns / 安全 dns:

Cloudflare 检查器通常无法知道您是否正在使用 DNS over HTTPS。它唯一知道的是您是否正在使用Cloudflare特别是 DoH 服务。

此检查器的工作方式是,Cloudflare 已将其服务器设置为根据查询方式对某些域做出不同的响应。网页实际上无法知道您的 DNS 设置是什么,而是查询一些特殊域,这些域仅有的1.1.1.1 将会识别。

例如,如果您向 1.1.1.1 询问名称is-cf.help.every1dns.net,您将获得成功的答复,但如果您向任何其他 DNS 服务器询问相同的名称,它会说该域不存在。(同样,is-dot只有当查询通过 DoT 到达时,子域才会给您结果,并且is-doh只会通过 DoH 做出响应。)

但所有这些神奇的子域名都是 Cloudflare 特有的——如果你向 9.9.9.9 询问其中任何一个,它只会总是说该域不存在,因为从全局 DNS 的角度来看它确实不存在。

我甚至不确定我是否可以使用 wireshark 查看数据包以查看 dns 查询是否已加密?我对 wirehshark 还很陌生,所以如果这是验证 Quad9 DoH 的一种方法,那么我不确定我要寻找什么。

首先过滤发送到已配置 DNS 服务器的数据包。例如,如果您已配置 DNS 服务器1.1.1.1+ 1.0.0.1,并且 DoH URL 为https://1.1.1.1/dns-query,则应过滤这两个 IP 地址的捕获。

  • 捕获过滤器(libpcap 语法):host 1.1.1.1 or 1.0.0.1

    IPv6 使用相同的语法,例如host 1.1.1.1 or 2606:4700:4700::1111

  • 显示过滤器(Wireshark 语法):ip.addr == 1.1.1.1 || ip.addr == 1.0.0.1

    对于 IPv6,语法是ipv6.addr == 2606:4700:4700::1111

明文 DNS 将立即被识别为明文 DNS – Wireshark 将向您显示每个查询和响应的实际内容。

同时,DoH 和 DoT 都将显示为 TLS 数据包。两者都使用相同类型的 TLS,区分它们的主要方法是查看 TCP 端口号:如果您使用的是 DoT,您将看到与专用“DNS over TLS”端口 853 的连接,而 DoH 使用与 HTTPS 相同的端口 443。

(这不仅仅是端口号——DoH 实际上将查询放在 HTTP 请求中,而 DoT 则不然。由于它是 TLS 加密的,您不会在 Wireshark 中看到这一点,但无论如何这对您的目的来说并不重要。)

请注意,由于 DoH 与常规 HTTPS(例如在浏览器中访问 https://1.1.1.1 网站)无法区分,因此在场端口 443 上的 TLS 数据包数量意义不大——这也是缺席您还需要注意端口 53 上的明文 DNS 数据包。

答案2

您正在尝试确定 pihole 上游是否为 DoH。但是,您的浏览器可能正在对 pihole 执行普通的旧式 UDP 查询。

在这种情况下,Cloudflare 检查器只能在您的 DNS 查询被发送到他们的服务器。例如,他们可以让你的浏览器查询一些随机生成的子域字符串,然后检查他们的服务器是否通过 DoH 收到该子域的查询。但如果你将 DNS 查询发送到他们无法控制的服务器,他们就无法做到这一点。

答案3

Quad9具体有两种验证方法:

  1. https://on.quad9.net/
  2. dig +short txt proto.on.quad9.net.

前者仅告诉您是否正在使用 Quad9,后者(文档) 将使用您所使用的协议进行响应。

相关内容