问题
在使用emby的时候,明明配置了ipv4 dns服务器为软路由,结果发现域名解析的结果是被污染的ip,并没有走ipv4 dns服务器返回的A记录。
经过排查,原来win10开启ipv6后,会自动把路由器当成dns服务器,并且优先通过ipv6向路由器发送dns查询请求。
解决方案
问题出现的原因找到了,那么想解决这个dns污染问题,首先得配置一个不会返回污染记录的DNS服务器,再使用如下方案:
- 关闭ipv6
- 设置ipv6 dns为
::ffff:127.0.0.1
- 设置ipv6的dns服务器为自建且有ipv6地址的dns服务器
设置win10优先使用ipv4进行连接
其中1和2的解决方法是最简单粗暴的,但是我选择的是3.
使用方案3的时候需要注意,如果使用了代理,且代理服务器不支持ipv6,如果dns服务器返回过来的是AAAA记录,那么就会造成无法建立连接,因此需要在自建的dns上抛弃掉AAAA记录,只返回A记录,或者配置Windows10,优先使用IPV4进行连接。
配置Windows10优先 IPv4 而非 IPv6
修改注册表,CMD后输入regedit
打开注册表,修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\
的DisabledComponents项的值为十进制的32,那么如果DNS服务器返回了AAAA记录和A记录,Windows10会优先使用IPV4进行连接。
需要注意的是,单独配置Windows10优先 IPv4 而非 IPv6是无法解决DNS污染问题的,系统仍然会优先向IPV6 DNS服务器发送查询请求,这项配置并没有配置优先使用IPV4 DNS进行查询。
在OpenWrt中丢弃AAAA记录
最简单是在网络->DHCP/DNS->高级设置->勾选禁止解析 IPv6 DNS 记录,然后保存应用
我使用的是ADGH
和openclash
,因此做了以下设置
在ADGM使用53端口代替dnsmasq
设置ADGH
的上级dns为openclash
在openclash
配置好DOH
、DOT
等值得信任的DNS服务器
关于DNS解析问题,在查找资料中找到了这两篇文章,DNS污染对Clash(for Windows)的影响
根据规则,如果域名或ip没有被代理,那么DNS返回的可能是被污染的IP
版权属于:本文为原创文章,版权归 猫先生 所有
本文链接:https://loli.rip/index.php/archives/604/
转载时须注明出处及本声明