我正在使用 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具体有两种验证方法:
- https://on.quad9.net/
dig +short txt proto.on.quad9.net.
前者仅告诉您是否正在使用 Quad9,后者(文档) 将使用您所使用的协议进行响应。