问题

在使用emby的时候,明明配置了ipv4 dns服务器为软路由,结果发现域名解析的结果是被污染的ip,并没有走ipv4 dns服务器返回的A记录。

经过排查,原来win10开启ipv6后,会自动把路由器当成dns服务器,并且优先通过ipv6向路由器发送dns查询请求。

解决方案

问题出现的原因找到了,那么想解决这个dns污染问题,首先得配置一个不会返回污染记录的DNS服务器,再使用如下方案:

  1. 关闭ipv6
  2. 设置ipv6 dns为::ffff:127.0.0.1
  3. 设置ipv6的dns服务器为自建且有ipv6地址的dns服务器

设置win10优先使用ipv4进行连接

其中1和2的解决方法是最简单粗暴的,但是我选择的是3.

使用方案3的时候需要注意,如果使用了代理,且代理服务器不支持ipv6,如果dns服务器返回过来的是AAAA记录,那么就会造成无法建立连接,因此需要在自建的dns上抛弃掉AAAA记录,只返回A记录,或者配置Windows10,优先使用IPV4进行连接。

配置Windows10优先 IPv4 而非 IPv6

在 Windows 中为高级用户配置 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进行查询。

Snipaste_2023-01-22_00-47-36.png

在OpenWrt中丢弃AAAA记录

最简单是在网络->DHCP/DNS->高级设置->勾选禁止解析 IPv6 DNS 记录,然后保存应用

Snipaste_2023-01-22_00-58-09.png

我使用的是ADGHopenclash,因此做了以下设置

在ADGM使用53端口代替dnsmasq

Snipaste_2023-01-22_01-00-27.png

设置ADGH的上级dns为openclash

Snipaste_2023-01-22_01-02-10.png

openclash配置好DOHDOT等值得信任的DNS服务器

Snipaste_2023-01-22_01-03-51.png

关于DNS解析问题,在查找资料中找到了这两篇文章,DNS污染对Clash(for Windows)的影响

dns中fallback的作用

根据规则,如果域名或ip没有被代理,那么DNS返回的可能是被污染的IP

Last modification:January 22nd, 2023 at 01:13 am
如果觉得我的文章对你有用,请随意赞赏