我将 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: to下的pihole服务。9.9.9.9
一切都很好,但是当我浏览到这个和这个cloudflare 检查器时,它说我没有使用 dns over https/secure dns:
但是,如果我使用 cloudflares DoH,我将TUNNEL_DNS_UPSTREAM=
设置设置为dns: to下TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query
的pihole服务,然后再次运行两个 cloudflare 测试,它现在显示:Using DNS over HTTPS (DoH) yes and a green tick for secure dns。1.1.1.1
我不确定为什么这些测试不适用于 Quad9 DoH。还有其他方法可以验证我使用的是 Quad9 DoH 吗?
我什至不确定是否可以使用wireshark 查看数据包以查看dns 查询是否已加密?我对wirehshark很陌生,所以如果这是一种验证Quad9 DoH的方法,那么我不确定我在寻找什么。
Cloudflare 检查器通常无法知道您是否通过 HTTPS 使用 DNS。它唯一知道的是您是否专门使用Cloudflare DoH 服务。
此检查器的工作方式是 Cloudflare 已将其服务器设置为根据查询的方式对某些域做出不同的响应。该网页实际上无法知道您的 DNS 设置是什么,而是查询一些只有1.1.1.1 才能识别的特殊域。
例如,如果您向 1.1.1.1 询问 name
is-cf.help.every1dns.net
,您会得到成功的回复,但如果您向任何其他 DNS 服务器询问相同的名称,它会说该域不存在。(同样,is-dot
如果查询是通过 DoT 到达的,子域只会为您提供结果,并且is-doh
只会通过 DoH 响应。)但是所有这些神奇的子域都是 Cloudflare 特定的——如果您询问 9.9.9.9 中的任何一个,它总是会说该域不存在,因为从全球 DNS 的角度来看,它确实不存在。
从过滤发送到配置的 DNS 服务器的数据包开始。例如,如果您配置了 DNS 服务器
1.1.1.1
+1.0.0.1
和 DoH URLhttps://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 没有。你不会在 Wireshark 中看到它,因为它是 TLS 加密的,但无论如何这对你的目的都没有关系。 )
请注意,由于 DoH 与常规 HTTPS 无法区分(例如在浏览器中访问 https://1.1.1.1 网站),因此端口 443 上存在TLS 数据包并没有多大意义——它也缺少明文 DNS 数据包您还需要注意的端口 53。
您正在尝试确定上游是否为 DoH。但是,您的浏览器可能正在对 pihole 执行普通的旧 UDP 查询。
在这种情况下,只有当您的 DNS 查询被发送到他们的服务器时,Cloudflare 检查程序才能可靠地评估您的设置。他们可以做到这一点,例如,让您在浏览器中查询一些随机生成的子域字符串,然后检查他们的服务器是否通过 DoH 接收到对该子域的查询。但是,如果您将 DNS 查询发送到他们无法控制的服务器,他们就无法做到这一点。