在我切换了 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之后解决的(增加 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 相关技术,请自行查阅规范文档。

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

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