win10使用全局DoH最佳实践

介绍了一种win10使用全局DoH(Dns Over Https)的最完美方案:搭建本地dnscrypt服务, 本文包含了配置以及验证

起因

目前使用doh(Dns Over Https)的方案有如下(对于Windows用户):

  1. 浏览器配置DoH地址(1.非浏览器应用无法使用, 2.无法设置备用dns)
  2. 升级Win11😒

如果你是有一定网络知识的用户, 可以采用一个很容易想到的方案来实现近似win11的全局原生方式的DoH, 即 DNS over (Local DoH Application).

All Your Applcation ----(local DNS port53)----> DNSCrypt ----(https)-----> DoH Service Provider(google, alidns... )

这样, 本机的全部应用虽然是通过传统的dns端口53进行查询, 但是发出去的都是DoH查询, 从而实现了全局DoH.(localhost的通信可以视为没有安全问题)

除了在单机上运行服务开放53端口, 也可以放在内网服务器上, 实现内网机器的DNS over (Intranet DoH Service)

DNSCrypt介绍

简而言之, dnscrypt是一种DoH的标准, 不同平台都有实现的应用/服务, 它的作用是启动一个应用/服务, 接收(通过本地53接口)传统dns查询, 发出DoH查询

具体软件

GitHub - DNSCrypt/dnscrypt-proxy: dnscrypt-proxy 2 - A flexible DNS proxy, with support for encrypted DNS protocols.

安装方法跟着官方文档走即可, 建议安装为Service方式

配置

配置入门和具体配置作用, 请参考官方文档, 这里不再赘述

测试时日志级别设置为debug, 测试完毕后关闭日志

dnscrypt-proxy.toml 自定义部分

dnscrypt-proxy.toml
## Servers from the "public-resolvers" source (see down below) can
## be viewed here: https://dnscrypt.info/public-servers

server_names = [ 'tuna-doh-ipv6','dnspod','easymosdns-doh','google']

👆👆:

  • 从public-resolvers中选了这几个, 防止某个服务临时性无法访问, dnscrypt会自动依次查询直到查询成功
  • 本来在[static]中配置了阿里腾讯的doh, 但是后来发现不好用, 经常出现长时间的查询, 推测可能时阿里的DNS/DOH限制了查询频率的原因, 虽然国外的doh延迟高, 但是比较稳定

windows网络配置

控制面板\网络和 Internet\网络连接 -> 你上网的适配器 -> ipv4 dns:127.0.0.1

测试验证

nslookup

使用默认dns查询

nslookup www.google.com

如果配置结果正常, 返回:

服务器:  UnKnown
Address:  127.0.0.1

非权威应答:
名称:    www.google.com
Address:  142.250.196.196

如果配置结果服务器不是127.0.0.1, 说明网卡配置有问题导致dns没有打到本地53, 先临时指定127.0.0.1进行测试

nslookup www.google.com 127.0.0.1

powershell检查本地53端口

Get-NetTCPConnection | Where-Object {$_.State -eq 'Listen'}

日志方式

配置开启日志,重启应用/服务后,查看日志中是否有访问的查询

[query_log]

file = 'query.log'
format = 'tsv'
ignored_qtypes = ['DNSKEY', 'NS']

抓包方式

  • 本地53端口通信
    • wireshark 抓包localhost适配器,看是否有53端口的 udp.port==53
  • 出站doh流量
    • wireshark 抓包外网访问适配器, 看是否有dns地址ip的加密包 ip.addr==223.5.5.5 || ip.addr==<server_names中服务的ip>

其它问题

多适配器配置了ipv4-dns导致了dns没走localhost53

实测如果多个适配器都进行了ipv4 dns配置, 那么所有的流量都会走其中的某一个dns(具体优先级未知), 删除多余的配置并只保留一个即可

虚拟机访问宿主机的53端口不通

子网通过nat方式向:53请求不通 防火墙对应的规则的设置中, 看是否是限制了专用网络, 同时连接的网卡设为了公用网络 防火墙对应的规则的设置中高级->边缘遍历默认为阻止导致的,改为遵从应用程序即可

© api2o.com:: a website of blog, tools, APIs. 一个包含: 博客、在线工具、API 的网站. All rights reserved.