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

Sne*_*ike 3 dns https pihole cloudflare 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
Run Code Online (Sandbox Code Playgroud)

在环境下的cloudflared服务内: . 我将设置设置为. 以及dns: to下的pihole服务。TUNNEL_DNS_UPSTREAM=https://9.9.9.9/dns-query,https://149.112.112.112/dns-query9.9.9.9

一切都很好,但是当我浏览到这个这个cloudflare 检查器时,它说我没有通过 https / secure dns 使用 dns:

在此输入图像描述 在此输入图像描述

但是,如果我使用 cloudflares DoH,我将设置设置TUNNEL_DNS_UPSTREAM=TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query并将pihole服务设置为dns: to 1.1.1.1,然后再次运行两个 cloudflare 测试,它现在显示:Using DNS over HTTPS (DoH) yes绿色勾号表示 secure dns

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

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

use*_*686 5

\n

一切都很好,但是当我浏览到这个和这个 cloudflare 检查器时,它说我没有通过 https / secure dns 使用 dns:

\n
\n

一般来说,Cloudflare 检查器无法知道您是否使用基于 HTTPS 的 DNS。它唯一知道的是您是否专门使用Cloudflare DoH 服务。

\n

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

\n

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

\n

但是所有这些神奇的子域都是 Cloudflare 特定的 \xe2\x80\x93 如果您询问其中任何一个,例如 9.9.9.9,它总是会该域不存在,因为从全局 DNS 的角度来看它确实存在才不是。

\n
\n

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

\n
\n

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

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

    \n

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

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

    \n

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

    \n
  • \n
\n

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

\n

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

\n

(这不仅仅是端口号 \xe2\x80\x93 DoH 实际上将查询放入 HTTP 请求中,而 DoT 则不然。您不会在 Wireshark 中看到这一点,因为它是 TLS 加密的,但这并不重要无论如何,为了你的目的。)

\n

请注意,由于 DoH 与常规 HTTPS 没有区别(例如在浏览器中访问 https://xc2\xad/1.1.1.1 网站),因此端口 443 上存在TLS 数据包并没有多大意义 \xe2\x80\x93您还需要注意的是端口 53 上没有明文 DNS 数据包

\n