记一次解决 clash all DNS requests failed, context deadline exceeded 问题
在我切换了 clash 透明代理和普通代理之后遇到了如题所述的问题。
下面是详细日志
[TCP] dial ? 规则之外 (match Match/) to dns.alidns.com:443 error: advanced-cm-3.nodesub.com:3600 connect error: all DNS requests failed, first error: Post "https://dns.alidns.com/dns-query": context deadline exceeded
21-12-19 09:58:51
ps: 如何切换普通代理和透明代理?
透明代理需要 iptables 规则,切换成普通代理就需要把 iptables 相关规则删除掉,然后主路由的 dhcp gateway 和 dns 分发改成主路由本身(或者删掉 dhcp gateway 和 dns 的 option 声明)
遇到如题所述的问题后 google 查到相关 issue
解决问题的可能途径
- 观察
config.yaml
中是否有绑定 interface name,如果有检查是否填写错误 - clash 内置 dns 关闭再开启,再次查看 log
- 内置 dns 开启的情况下观察是否有 fallback 的配置
我的问题就是在修改了3之后解决的(增加 fallback 配置,原本没有)。
dns:
enable: true # 启用自定义DNS
ipv6: false # default is false
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16 # if you don't know what it is, don't change it
default-nameserver:
- 180.76.76.76
- 223.5.5.5
- 119.29.29.29
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
fallback:
- tls://1.1.1.1:853
- tls://1.0.0.1:853
- 101.6.6.6:5353
添加 fallback 配置
fallback:
- tls://1.1.1.1:853
- tls://1.0.0.1:853
- 101.6.6.6:5353
clash fallback
配置项的解释
(1) 当访问一个域名时, nameserver 与 fallback 列表内的所有服务器并发请求,得到域名对应的 IP 地址。
(2) clash 将选取 nameserver 列表内,解析最快的结果。
(3) 若解析结果中,IP 地址属于 国外,那么 clash 将选择 fallback 列表内,解析最快的结果。
引用一段别人的见解:
# 1. clash DNS 请求逻辑:
# (1) 当访问一个域名时, nameserver 与 fallback 列表内的所有服务器并发请求,得到域名对应的 IP 地址。
# (2) clash 将选取 nameserver 列表内,解析最快的结果。
# (3) 若解析结果中,IP 地址属于 国外,那么 clash 将选择 fallback 列表内,解析最快的结果。
#
# 因此,我在 nameserver 和 fallback 内都放置了无污染、解析速度较快的国内 DNS 服务器,以达到最快的解析速度。
# 但是 fallback 列表内服务器会用在解析境外网站,为了结果绝对无污染,我仅保留了支持 DoT/DoH 的两个服务器。
#
# 2. clash DNS 配置注意事项:
# (1) 如果您为了确保 DNS 解析结果无污染,请仅保留列表内以 tls:// 或 https:// 开头的 DNS 服务器,但是通常对于国内域名没有必要。
# (2) 如果您不在乎可能解析到污染的结果,更加追求速度。请将 nameserver 列表的服务器插入至 fallback 列表内,并移除重复项。
#
# 3. 关于 DNS over HTTPS (DoH) 和 DNS over TLS (DoT) 的选择:
# 对于两项技术双方各执一词,而且会无休止的争论,各有利弊。各位请根据具体需求自行选择,但是配置文件内默认启用 DoT,因为目前国内没有封锁或管制。
# DoH: 以 https:// 开头的 DNS 服务器。拥有更好的伪装性,且几乎不可能被运营商或网络管理封锁,但查询效率和安全性可能略低。
# DoT: 以 tls:// 开头的 DNS 服务器。拥有更高的安全性和查询效率,但端口有可能被管制或封锁。
# 若要了解更多关于 DoH/DoT 相关技术,请自行查阅规范文档。
修改好 config.yaml
之后重启 clash 服务,国内国外的服务就都正常了。
通过您的方案解决了!all DNS requests failed问题。 感谢!!! 虽然不知道为什么可行。。原配置文件中是有fallback选项的1.1.1.1; 8.8.8.8,但是添加您写的才有用。。 电脑重启/clash重装 都没用,配置文件更新订阅后重新下载也不行。
😁️
很奇怪的是我的订阅没有开启dns的功能,突然某一天连接性测试全部超时,其他设备都正常使用,唯独这台电脑超时。然后我加上了你的代码,开启dns就恢复了。这可能是什么原因导致的呢
感觉是一些配置需要 reload,所以重启服务是最方便实现的手段
谢谢🤣🤣
你好,请问fallback是在哪里添加的呀?那个面板怎么打开呢?
fallback 的添加文中有描述在 config.yaml 的哪个位置。面板地址一般是
http://IP:PORT/ui
多谢,解决了困扰多时的问题
解决了。太好用了,感谢?
太酷啦
好用!原先配置里的dns fallback替换了一下就ok了;也试过直接 dns enable 改成 false 也可以。
瞎 jb 写垃圾博客居然还有点意义。感谢回复 ?️ ?️
搜这个问题,然后在知乎上看到这篇文章的链接() 感谢~
https://www.zhihu.com/question/464846886/answer/2307673597?utm_id=0