win10使用全局DoH最佳实践
介绍了一种win10使用全局DoH(Dns Over Https)的最完美方案:搭建本地dnscrypt服务, 本文包含了配置以及验证
起因
目前使用doh(Dns Over Https)的方案有如下(对于Windows用户):
- 浏览器配置DoH地址(1.非浏览器应用无法使用, 2.无法设置备用dns)
- 升级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查询
- DNSCrypt version 2 - Official Project Home Page
- DNSCrypt - Download clients and servers for DoH and DNSCrypt
具体软件
安装方法跟着官方文档走即可, 建议安装为Service方式
配置
配置入门和具体配置作用, 请参考官方文档, 这里不再赘述
测试时日志级别设置为debug, 测试完毕后关闭日志
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
- wireshark 抓包localhost适配器,看是否有53端口的
- 出站doh流量
- wireshark 抓包外网访问适配器, 看是否有dns地址ip的加密包
ip.addr==223.5.5.5 || ip.addr==<server_names中服务的ip>
- wireshark 抓包外网访问适配器, 看是否有dns地址ip的加密包
其它问题
多适配器配置了ipv4-dns导致了dns没走localhost53
实测如果多个适配器都进行了ipv4 dns配置, 那么所有的流量都会走其中的某一个dns(具体优先级未知), 删除多余的配置并只保留一个即可
虚拟机访问宿主机的53端口不通
子网通过nat方式向:53请求不通
防火墙对应的规则的设置中, 看是否是限制了专用网络, 同时连接的网卡设为了公用网络
防火墙对应的规则的设置中高级->边缘遍历默认为阻止导致的,改为遵从应用程序即可