IrineSistiana / mosdns

一个 DNS 转发器
GNU General Public License v3.0
2.96k stars 336 forks source link

[Bug] passwall(4.77-6 最新版)加luci-app-mosdns会导致无法访问海外 #824

Closed kylongteng closed 4 months ago

kylongteng commented 4 months ago

在提交之前,请确认

mosdns 版本

v5.3.1

操作系统

openwrt

Bug 描述和复现步骤

Bug: passwall(4.77-6 最新版)加luci-app-mosdns会导致无法访问海外。不确定是mosdns还是luci-app-mosdns的问题,所以两边都发了issue。 详细情况:passwall使用127.0.0.1:5335将远程DNS交给mosdns解析;Dnsmasq转发也转发给5335,此时会出现无法访问海外网站的情况。经过搜索,我在https://github.com/IrineSistiana/mosdns/discussions/470 看到过一样的问题,但是没有解决方案,只是通过将Dnsmasq的转发关闭解决问题,试过,确实可以,但是Dnsmasq就不能转发给mosdns解析了。经过多次测试,很确定是两者启动先后顺序问题导致。passwall必须比mosdns后启动才能正常使用,并且,如果在使用过程中mosdns因修改而重启,那么问题立刻重新出现,passwall必须跟着重启一次才行!

使用的配置文件

log:
  level: info
  file: "/var/log/mosdns.log"

# API 入口设置
api:
  http: "0.0.0.0:9091"

include: []

plugins:
  # 国内域名
  - tag: geosite_cn
    type: domain_set
    args:
      files:
        - "/var/mosdns/geosite_cn.txt"

  # 国内 IP
  - tag: geoip_cn
    type: ip_set
    args:
      files:
        - "/var/mosdns/geoip_cn.txt"

  # 国外域名
  - tag: geosite_no_cn
    type: domain_set
    args:
      files:
        - "/var/mosdns/geosite_geolocation-!cn.txt"

  # 缓存
  - tag: lazy_cache
    type: cache
    args:
      size: 20000
      lazy_cache_ttl: 86400
      dump_file: "/etc/mosdns/cache.dump"
      dump_interval: 600

  # 转发至本地服务器
  - tag: forward_local
    type: forward
    args:
      upstreams:
        - addr: "https://doh.pub/dns-query"
          bootstrap: 180.76.76.76
        - addr: 119.29.29.29

  # 转发至远程服务器
  - tag: forward_remote
    type: forward
    args:
      upstreams:
        - addr: tls://8.8.8.8
          enable_pipeline: false

  # 国内解析
  - tag: local_sequence
    type: sequence
    args:
      - exec: $forward_local

  # 国外解析
  - tag: remote_sequence
    type: sequence
    args:
      - exec: prefer_ipv4
      - exec: $forward_remote

  # 有响应终止返回
  - tag: has_resp_sequence
    type: sequence
    args:
      - matches: has_resp
        exec: accept

  # fallback 用本地服务器 sequence
  # 返回非国内 ip 则 drop_resp
  - tag: query_is_local_ip
    type: sequence
    args:
      - exec: $local_sequence
      - matches: "!resp_ip $geoip_cn"
        exec: drop_resp

  # fallback 用远程服务器 sequence
  - tag: query_is_remote
    type: sequence
    args:
      - exec: $remote_sequence

  # fallback 用远程服务器 sequence
  - tag: fallback
    type: fallback
    args:
      primary: query_is_local_ip
      secondary: query_is_remote
      threshold: 500
      always_standby: true

  # 查询国内域名
  - tag: query_is_local_domain
    type: sequence
    args:
      - matches: qname $geosite_cn
        exec: $local_sequence

  # 查询国外域名
  - tag: query_is_no_local_domain
    type: sequence
    args:
      - matches: qname $geosite_no_cn
        exec: $remote_sequence

  # 主要的运行逻辑插件
  # sequence 插件中调用的插件 tag 必须在 sequence 前定义,
  # 否则 sequence 找不到对应插件。
  - tag: main_sequence
    type: sequence
    args:
      - exec: $lazy_cache
      - exec: $query_is_local_domain
      - exec: jump has_resp_sequence
      - exec: $query_is_no_local_domain
      - exec: jump has_resp_sequence
      - exec: $fallback

  # 启动 udp 服务器。
  - tag: udp_server
    type: udp_server
    args:
      entry: main_sequence
      listen: ":5335"

  # 启动 tcp 服务器。
  - tag: tcp_server
    type: tcp_server
    args:
      entry: main_sequence
      listen: ":5335"

mosdns 的 log 记录

2024-07-09T05:31:31.213Z    INFO    unpacking entry {"tag": "cn", "length": 11389, "file": "/var/mosdns/geoip_cn.txt"}
2024-07-09T05:31:31.720Z    INFO    unpacking entry {"tag": "cn", "length": 80816, "file": "/var/mosdns/geosite_cn.txt"}
2024-07-09T05:31:31.730Z    INFO    unpacking entry {"tag": "apple", "length": 1762, "file": "/var/mosdns/geosite_apple.txt"}
2024-07-09T05:31:31.730Z    INFO    unpacking entry {"tag": "geolocation-!cn", "length": 25190, "file": "/var/mosdns/geosite_geolocation-!cn.txt"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "geosite_cn", "type": "domain_set"}
2024-07-09 05:31:32 INFO    starting api http server    {"addr": "0.0.0.0:9091"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "geoip_cn", "type": "ip_set"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "geosite_apple", "type": "domain_set"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "geosite_no_cn", "type": "domain_set"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "whitelist", "type": "domain_set"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "blocklist", "type": "domain_set"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "greylist", "type": "domain_set"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "ddnslist", "type": "domain_set"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "hosts", "type": "hosts"}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "redirect", "type": "redirect"}
2024-07-09 05:31:32 INFO    redirect    redirect rules loaded   {"length": 0}
2024-07-09 05:31:32 INFO    loading plugin  {"tag": "adlist", "type": "domain_set"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "local_ptr", "type": "domain_set"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "cloudflare_cidr", "type": "ip_set"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "lazy_cache", "type": "cache"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "forward_xinfeng_udp", "type": "forward"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "forward_local", "type": "forward"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "forward_remote", "type": "forward"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "forward_remote_upstream", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "modify_ttl", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "modify_ddns_ttl", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "has_resp_sequence", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_non_local_ip", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "fallback", "type": "fallback"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "apple_domain_fallback", "type": "fallback"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_apple_domain", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_ddns_domain", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_local_domain", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_no_local_domain", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_whitelist_domain", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_greylist_domain", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "query_is_reject_domain", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "main_sequence", "type": "sequence"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "udp_server", "type": "udp_server"}
2024-07-09 05:31:33 INFO    udp_server  udp server started  {"addr": "[::]:5335"}
2024-07-09 05:31:33 INFO    loading plugin  {"tag": "tcp_server", "type": "tcp_server"}
2024-07-09 05:31:33 INFO    tcp_server  tcp server started  {"addr": "[::]:5335", "tls": false}
2024-07-09 05:31:33 INFO    all plugins are loaded
2024-07-09 05:31:42 WARN    udp_server  entry err   {"query": {"uqid": 1, "client": "::ffff:127.0.0.1", "qname": "www.google.com.", "qtype": 1, "qclass": 1, "elapsed": "5.000256545s"}, "error": "context deadline exceeded"}
2024-07-09 05:31:42 WARN    forward_remote  upstream error  {"uqid": 2, "qname": "www.google.com.", "qclass": 1, "qtype": 1, "upstream": "tls://8.8.8.8", "error": "context deadline exceeded"}
Zerorigin commented 4 months ago

这个是 passwall 配置问题,请到 pw 的仓库提 issue 或者去研读 pw 的相关文档看下有没有什么遗漏的配置或解决方案

kylongteng commented 4 months ago

这个是 passwall 配置问题,请到 pw 的仓库提 issue 或者去研读 pw 的相关文档看下有没有什么遗漏的配置或解决方案

我去提一下吧,看pw哪边怎么说