vxiaov / vClash

Clash插件 for Koolshare系列梅林、官方改版,适用于380/384/386/388版本固件啦。安装即用(内置免费代理订阅源)。
https://vlike.work/
GNU General Public License v3.0
526 stars 62 forks source link

[TCP] dial DIRECT (match RuleSet/direct) to www.baidu.com:80 error: all DNS requests failed, first error: use default dns resolve failed: couldn't find ip #25

Closed crazyn2 closed 1 year ago

crazyn2 commented 1 year ago

Bug描述

proxychains curl www.baidu.com
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16
[proxychains] Strict chain  ...  192.168.50.1:1080  ...  www.baidu.com:80  ...  OK
curl: (56) Recv failure: Connection reset by peer

clash日志显示 [TCP] dial DIRECT (match RuleSet/direct) to www.baidu.com:80 error: all DNS requests failed, first error: use default dns resolve failed: couldn't find ip

Bug重现 描述触发Bug的步骤:

  1. 添加https://sub.shellclash.cf/sub转换的订阅并更新
  2. 启动clash
  3. proxychains代理命令行proxychains curl www.baidu.com
  4. Bug出现了。

截图 如果可以,请附上截图,截图 Screenshot from 2022-10-24 22-24-50 记得将敏感信息打上马赛克。 Screenshot from 2022-10-24 22-25-04 Screenshot from 2022-10-24 22-25-14

Screenshot from 2022-10-24 22-25-22 config.yaml

port: 7890
socks-port: 1080 # SOCKS5代理端口,DNS请求会中转
redir-port: 3333 # 透明代理端口
allow-lan: true
# allow-lan=true时,最好设置内网访问IP,关闭IPv6监听
# '*': bind all IP addresses
# 192.168.122.11: bind a single IPv4 address
# "[aaaa::a8aa:ff:fe09:57d8]": bind a single IPv6 addres
bind-address: '*'
# 不使用IPv6地址(配合上面的bind-address)
ipv6: true
mode: Rule
log-level: info # 日志显示级别: debug-问题调试,info-基本信息
external-controller: 192.168.50.1:9090
external-ui: /koolshare/clash/dashboard
secret: route
# 透明代理开启DNS
dns:
  enable: true
  ipv6: true
  listen: 0.0.0.0:1053
  enhanced-mode: redir-host # redir-host or fake-ip
  fake-ip-range: 198.18.0.1/16 # Fake IP addresses pool CIDR
  use-hosts: false # lookup hosts and return IP record
  nameserver:
    # - 114.114.114.114
    # - https://dns.alidns.com/dns-query
    - tcp://223.5.5.5:53
  # 提供 fallback 时,如果GEOIP非 CN 中国时使用 fallback 解析
  fallback:
    - 8.8.8.8 # Google DNS over TCP
    - tls://dns.google # Google DNS over TLS
    # - 1.1.1.1 # cloudflare DNS over TCP
    # - '[2001:4860:4860::8888]:53' # Google ipv6 DNS
    # - '[2606:4700:4700::1111]:53'  # cloudflare ipv6 DNS
    # - '[2620:119:35::35]:53'     # openDNS ipv6 DNS
    # - https://dns.google/dns-query # Google DNS over HTTPS
    # - https://cloudflare-dns.com/dns-query # cloudflare DNS over HTTPS
  # 强制DNS解析使用`fallback`配置
  fallback-filter:
    # true: CN使用nameserver解析,非CN使用fallback
    geoip: true
    geoip-code: CN
    # geoip设置为false时有效: 不匹配`ipcidr`地址时会使用`nameserver`结果,匹配`ipcidr`地址时使用`fallback`结果。
    ipcidr:
      - 240.0.0.0/4
    domain:
      - +.google.com
      - +.facebook.com
      - +.youtube.com
      - +.duckduckgo.com
      - +.startpage.com
# 保留的proxy节点列表(启动配置文件不包含任何节点信息,节点信息通过 proxy-provider 提供)
proxies: []
# 配置规则参考文档: https://github.com/Dreamacro/clash/wiki/configuration
# 设置代理提供者(远程订阅地址+本地订阅文件)
proxy-providers:
  provider_url:
    # 免费订阅源代理组
    type: file
    path: ./providers/provider_remote.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
  provider_diy:
    # 个人VPS代理组
    type: file
    path: ./providers/provider_diy.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
  provider_free:
    # 墙内可用代理组
    type: file
    path: ./providers/provider_free.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
  provider_outwall:
    # 被墙代理组
    type: file
    path: ./providers/provider_outwall.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
  provider_netflix:
    # 解锁Netflix代理组
    type: file
    path: ./providers/provider_netflix.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
  provider_home_netflix:
    # 解锁Netflix代理组
    type: file
    path: ./providers/provider_home_netflix.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
# 类型选择 简介
# select : 用于选择代理或代理组, 可以通过 RESTful API 来切换代理,建议在 GUI 中使用
# load-balance : 相同eTLD+1的请求将拨号到同一个代理。
# url-test : 通过对 URL 的速度进行基准测试来选择将使用哪个代理。
# fallback : 按优先级选择可用的策略。通过访问 URL 来测试可用性,就像自动 url-test 组一样。
# relay : 中继链接代理。代理不应包含中继。不支持 UDP。 流量:Clash <-> http <-> vmess <-> ss1 <-> ss2 <-> Internet 
#  
# 推荐选择:
#   命令行服务建议选择 url-test / fallback / load-balance
#   GUI窗口 官方建议选择 select ,当然也推荐使用url-test 自动检测可用性。
proxy-groups:
  # 保留的自定义节点
  - name: DIY组 # 私人的代理节点组
    type: select # load-balance, select, relay, fallback, url-test
    use: # 引入 proxy-provider 使用 use 关键字
      - provider_diy # 个人自定义的代理文件
    url: http://www.gstatic.com/generate_204
    interval: 300
  - name: 跳板代理组 # 为了让DIY组可以做出口
    type: select # load-balance, select, relay, fallback, url-test
    use:
      - provider_diy
    url: http://www.gstatic.com/generate_204
    interval: 300
  - name: PROXY # 免费可用代理组
    type: select
    use:
      - provider_url
      - provider_free
    url: http://www.gstatic.com/generate_204
    interval: 300
  - name: 被墙代理组 # 国内不可用,国外可用
    type: select
    use: # 引入 proxy-provider 使用 use 关键字
      - provider_outwall # 墙外订阅源代理组
    url: http://www.gstatic.com/generate_204
    interval: 300
  - name: 仅支持Netflix自制剧
    type: select
    use:
      - provider_home_netflix
    url: http://www.gstatic.com/generate_204
    interval: 300
  - name: 解锁Netflix非自制剧
    type: select
    use:
      - provider_netflix
    url: http://www.gstatic.com/generate_204
    interval: 300
  - name: 入口代理组
    type: select
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - 跳板代理组
      - DIY组
      - PROXY
      - 仅支持Netflix自制剧
      - 解锁Netflix非自制剧
  - name: 出口代理组
    type: select
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - 解锁Netflix非自制剧
      - 被墙代理组
      - 仅支持Netflix自制剧
      - DIY组
  - name: 中继组-解锁奈飞
    # 中继代理组,不支持UDP协议。线路: clash <-> 入口代理组 <-> 出口代理组 <-> Internet
    type: relay
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - 入口代理组
      - 出口代理组
  - name: NETFLIX_PROXY
    type: select
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - 中继组-解锁奈飞
      - DIY组
      - 解锁Netflix非自制剧
      - 仅支持Netflix自制剧
      - PROXY
  - name: Tiktok_PROXY
    type: select
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - DIY组
      - 中继组-解锁奈飞
      - 解锁Netflix非自制剧
      - 仅支持Netflix自制剧
      - PROXY
      - DIRECT
  - name: Bili_PROXY
    type: select
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - DIRECT
      - DIY组
      - 中继组-解锁奈飞
      - PROXY
      - 解锁Netflix非自制剧
      - 仅支持Netflix自制剧
  - name: IQiyi_PROXY
    type: select
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - DIRECT
      - DIY组
      - PROXY
      - 解锁Netflix非自制剧
      - 仅支持Netflix自制剧
  - name: 默认代理组
    type: select
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - DIY组
      - PROXY
      - 解锁Netflix非自制剧
      - 仅支持Netflix自制剧
      - 中继组-解锁奈飞
      - DIRECT
rule-providers:
  webgfw:
    type: http
    behavior: domain
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt
    path: ./ruleset/gfw.yaml
    interval: 86400
  webdirect:
    type: http
    behavior: domain
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt
    path: ./ruleset/direct.yaml
    interval: 86400
  telegramcidr:
    type: http
    behavior: domain
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt
    path: ./ruleset/telegramcidr.yaml
    interval: 86400
  lancidr:
    type: file
    behavior: domain
    path: ./ruleset/lancidr.yaml
  gfw:
    type: file
    behavior: domain
    path: ./ruleset/rule_diy_gfw.yaml
  direct:
    type: file
    behavior: domain
    path: ./ruleset/rule_diy_direct.yaml
  blacklist_rules:
    type: file
    behavior: classical
    path: ./ruleset/rule_diy_blacklist.yaml
  whitelist_rules:
    type: file
    behavior: classical
    path: ./ruleset/rule_diy_whitelist.yaml
  video_netflix:
    type: file
    behavior: classical
    path: ./ruleset/video_netflix.yaml
  video_tiktok:
    type: file
    behavior: classical
    path: ./ruleset/video_tiktok.yaml
  video_iqiyi:
    type: file
    behavior: classical
    path: ./ruleset/video_iqiyi.yaml
  video_ibilibili:
    type: file
    behavior: classical
    path: ./ruleset/video_ibilibili.yaml
# 黑名单模式,命中规则使用代理
rules:
  - DOMAIN,clash.razord.top,DIRECT
  - DOMAIN,yacd.haishan.me,DIRECT
  # 所有IPv6直连-避免不支持IPv6代理节点无法处理请求而导致无法上网问题
  - IP-CIDR6,::/0,DIRECT,no-resolve
  - RULE-SET,lancidr,DIRECT
  - RULE-SET,video_netflix,NETFLIX_PROXY
  - RULE-SET,video_tiktok,Tiktok_PROXY
  - RULE-SET,video_iqiyi,IQiyi_PROXY
  - RULE-SET,video_ibilibili,Bili_PROXY
  # > 白名单列表
  - RULE-SET,whitelist_rules,DIRECT
  # > 黑名单列表
  - RULE-SET,blacklist_rules,默认代理组
  # 白名单模式最后规则
  - RULE-SET,direct,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,默认代理组

路由器信息: 您可以将 路由器信息按钮显示的内容粘帖在这里,以便于我们针对您的路由器出现问题进行定位与修复。

您可以手工填写如下信息:

Awkee commented 1 year ago

@crazyn2 看了你的配置没啥改动,我的感觉:

[proxychains] Strict chain ... 192.168.50.1:1080 ... www.baidu.com:80 ... OK curl: (56) Recv failure: Connection reset by peer

给你的建议:

  1. 测试代理节点是否正常,可以那 www.youtube.com 测试。
  2. 测试国内网站访问是否正常,直接 curl 访问就可以了,不要加 proxychains 命令前缀(万一你的机场节点不稳定或者限制呢)
crazyn2 commented 1 year ago
[TCP] dial 🚀 节点选择 (match DomainKeyword/google) to www.google.com:443 error: mdss-moble.gatknqh.cn:12001 connect error: all DNS requests failed, first error: read udp4 192.168.50.188:58775->1.0.0.1:53: i/o timeout

好像是vpn服务器的域名无法解析,mdss-moble.gatknqh.cn就是服务器域名

crazyn2 commented 1 year ago

问题已经找到了,到114域名服务器的包被公司网关拦截了,换成公司域名服务器就行了

crazyn2 commented 1 year ago

麻烦问下怎么配置yacd的Proxies,才能直接curl www.google.com访问google,不需要增加proxychains,虽然已经开启透明代理模式

Awkee commented 1 year ago

开启透明代理模式时,正常情况下在你这个路由器下的主机就应该可以直接通过curl命令访问google的。

clash根据域名及IP规则匹配使用或不使用代理节点,你可以看下 yacd 面板的连接 来产看你访问google匹配了哪个规则,然后在看这个规则使用的Chains是哪个代理节点。

看你说的情况,是不是公司网关也把8.8.8.8域名服务器请求给拦截了呀,这样的话,你只能通过代理转发DNS请求了(Clash目前没有这功能)。只能把你的路由器当个代理客户端使用了。

crazyn2 commented 1 year ago

proxychains curl www.google.com可以在日志上找到google记录,直接curl www.googl.com则没有记录,不知是不是这个原因

crazyn2 commented 1 year ago

我把公司的域名服务器添加到了falllback,然后就能用了,而且得到的谷歌ip不是被公司域名服务器被污染的ip,太奇怪了