61

记一次解决 clash all DNS requests failed, context deadline exceeded 问题

 2 years ago
source link: https://hellodk.cn/post/870
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

记一次解决 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

解决问题的可能途径

  1. 观察 config.yaml 中是否有绑定 interface name,如果有检查是否填写错误
  2. clash 内置 dns 关闭再开启,再次查看 log
  3. 内置 dns 开启的情况下观察是否有 fallback 的配置

我的问题就是在修改了3之后解决的。

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 相关技术,请自行查阅规范文档。

from http://blog.joylau.cn/2020/05/01/Clash-Config/

修改好 config.yaml 之后重启 clash 服务,国内国外的服务就都正常了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK