侧边栏壁纸
  • 累计撰写 65 篇文章
  • 累计创建 46 个标签
  • 累计收到 105 条评论

目 录CONTENT

文章目录

mosdns自定义配置V5版本【附smartdns与passwall更新】

草莓牛奶
2023-04-16 / 29 评论 / 0 点赞 / 4,631 阅读 / 1,894 字 / 正在检测是否收录...
温馨提示:
「博客文章out of date 会及时更新,无特殊说明仍然有效,欢迎指正内容中的错误」

零、AdguardHome开启HTTP/3支持

如果在vps上搭建了AdguardHome服务器可以尝试开启serve_http3,使得Mosdns可以通过HTTP/3进行dns查询。(意义在于:如果使用的vless+reality协议,减少一个IP上的不同域名的基于TCP的TLS连接,gfw对于UPD的审查较弱)

修改AdGuardHome.yaml中的配置

serve_http3: true
use_http3_upstreams: true
  1. use_http3_upstreams 启用上游 DNS 服务器中的常规 https:// 的 HTTP/3 探测
  2. serve_http3 使 AdGuard Home 在配置了加密后运行 DoH3 服务器(监听UDP)

此外,如果使用 h3:// ,则无需启用这两个配置参数

以下配置中的查询流程和逻辑与V4版本相同,并且可以搭配smartdns+adguardhome+passwall

关于国外是否需要正确的IP及IP测速,详见*Ray设置流量嗅探,减少DNS解析次数 (只对域名进行一次解析)

一、V5自定义配置

MOSDNS查询流程

  • 缓存,缓存未命中则进入下一步.
  • cn 域名? -> 国内上游
    • 返回是国内 ip ? -> 返回结果,结束.
    • 不是国内 ip -> 无污染上游-> 返回结果,结束.
  • 非 cn 域名? -> 无污染上游
    • 返回非国内 ip ? -> 返回结果,结束.
    • 返回国内 ip -> 国内上游-> 返回结果,结束.
  • 其他所有情况?
    • 优先国内上游结果.
    • 否则无污染上游结果.

配置说明(请根据自己的需求修改):

​ **本地DNS:**配置中由AdguardHome负责,监听本地5353,即配置中forward 127.0.0.1:5353需要修改

​ (可配置多个上游可配置多个上游,支持UDP、TCP、DOT、DOH)

​ **远程DNS:**cloudflare和google的DOH(或VPS上的AdguardHome服务器)

​ (如果启用http3,请确保代理设置中不拦截443端口的UPD,或者使用其他端口)

​ **远程ECS:**133.1.0.1

​ (以上为日本IP的ECS,请根据需求自行更改;若开启了流量嗅探功能,可忽略)

​ **MosDNS服务器:**监听本地5335

log:
  level: info
  file: "/tmp/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"

  # 白名单 加入的域名始终允许使用 “本地 DNS” 进行解析
  - tag: whitelist
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rule/whitelist.txt"

  # 黑名单 加入的域名将屏蔽 DNS 解析
  - tag: blocklist
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rule/blocklist.txt"

  # 灰名单 加入的域名始终使用 “远程 DNS” 进行解析
  - tag: greylist
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rule/greylist.txt"

  # DDNS域名 加入的域名始终使用 “本地 DNS” 进行解析,并且修改 TTL 为 5 秒,解析结果不进行缓存
  - tag: ddnslist
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rule/ddnslist.txt"

  # 自定义 Hosts 重写
  - tag: hosts
    type: hosts
    args:
      files:
        - "/etc/mosdns/rule/hosts.txt"

  # 重定向请求的域名
  - tag: redirect
    type: redirect
    args:
      files:
        - "/etc/mosdns/rule/redirect.txt"

  # PTR 黑名单 加入的域名将阻止 PTR 请求
  - tag: local_ptr
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rule/local-ptr.txt"

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

  # 转发至远程服务器
  - tag: forward_remote
    type: forward
    args:
      concurrent: 1
      upstreams:
        - addr: "https://dns.google/dns-query"
          dial_addr: "8.8.4.4"
          bootstrap: "127.0.0.1:5353"
          enable_pipeline: true
          insecure_skip_verify: false
          idle_timeout: 10
          #enable_http3: true
        - addr: "https://dns.cloudflare.com/dns-query"
          dial_addr: "1.0.0.1"
          bootstrap: "127.0.0.1:5353"
          enable_pipeline: true
          insecure_skip_verify: false
          idle_timeout: 10
          #enable_http3: true
        # 如果有VPS的AdguardHome可以自行配置,否则删除
        #- addr: "https://【vps域名】:【端口】/dns-query"
          #dial_addr: "【vps的IP】:【端口】"
          #bootstrap: "127.0.0.1:5353"
          #enable_pipeline: true
          #insecure_skip_verify: false
          #idle_timeout: 10
          #enable_http3: true

  # 修改ttl(默认0 不修改ttl)
  - tag: modify_ttl
    type: sequence
    args:
      - exec: ttl 0-0

  # 修改 ddns 域名 ttl(默认 5秒)
  - tag: modify_ddns_ttl
    type: sequence
    args:
      - exec: ttl 5-5

  # 国内解析
  - tag: forward_local
    type: sequence
    args:
      - exec: forward 127.0.0.1:5353

  # 国外esc
  - tag: ecs_foreign
    type: ecs_handler
    args:
      forward: false        # 是否转发来自下游的 ecs
      preset: 133.1.0.1     # 发送预设 ecs
      send: false           # 是否发送 ecs
      mask4: 24             # ipv4 掩码。默认 24
      mask6: 48             # ipv6 掩码。默认 48  2001:b000:168::/48

  # 国外解析
  - tag: forward_remote_upstream
    type: sequence
    args:
      # 设置ECS
      - exec: $ecs_foreign
      - exec: $forward_remote

  # 有响应则修改 TTL 并终止返回
  - tag: has_resp_sequence
    type: sequence
    args:
      - matches: qname $ddnslist
        exec: $modify_ddns_ttl
      - matches: "!qname $ddnslist"
        exec: $modify_ttl
      - matches: has_resp
        exec: accept

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

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

  # 查询 DDNS 域名
  - tag: query_is_ddns_domain
    type: sequence
    args:
      - matches: qname $ddnslist
        exec: $forward_local

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

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

  # 查询白名单
  - tag: query_is_whitelist_domain
    type: sequence
    args:
      - matches: qname $whitelist
        exec: $forward_local

  # 查询灰名单
  - tag: query_is_greylist_domain
    type: sequence
    args:
      - matches: qname $greylist
        exec: $forward_remote_upstream

  # 拒绝名单
  - tag: query_is_reject_domain
    type: sequence
    args:
      - matches: qname $blocklist
        exec: reject 3
      - matches:
        - qtype 12
        - qname $local_ptr
        exec: reject 3
      - matches: qtype 65
        exec: reject 3

  # 主要的运行逻辑插件
  # sequence 插件中调用的插件 tag 必须在 sequence 前定义,
  # 否则 sequence 找不到对应插件。
  - tag: main_sequence
    type: sequence
    args:
      - exec: $hosts
      - exec: jump has_resp_sequence
      # 非 “拒绝名单” 或 “DDNS域名” 则启用缓存
      - matches:
        - "!qname $ddnslist"
        - "!qname $blocklist"
        - "!qname $local_ptr"
        exec: $lazy_cache
      - exec: $redirect
      - exec: jump has_resp_sequence
      - exec: $query_is_ddns_domain
      - exec: jump has_resp_sequence
      - exec: $query_is_whitelist_domain
      - exec: jump has_resp_sequence
      - exec: $query_is_reject_domain
      - exec: jump has_resp_sequence
      - exec: $query_is_greylist_domain
      - exec: jump has_resp_sequence
      - 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"

二、内置预设

由于自定义配置中的大部分内容都是基于luci-app-mosdns/config_custom.yaml,所以以下内置预设除了DNS解析服务器与ECS配置的自由度上,基本不存在差别

image-20230416193409715

不建议开启此处的DNS广告过滤(建议自建AdguardHome)

image-20230416193428023

三、smartdns的配置

不详细展开,基本原理详见

配置【mosdns+smartdns+adguard+passwall】实现dns分流+去广告

passwall+Adguard+(smartdns)实现DNS分流&去广告

image-20230416194542766

image-20230416194607273

image-20230416194623000

四、passwall的配置

不详细展开,基本原理详见

配置【mosdns+smartdns+adguard+passwall】实现dns分流+去广告

passwall+Adguard+(smartdns)实现DNS分流&去广告

image-20230416194722833

五、Linux上运行Mosdns

在没有luci界面的非openwrt上,由于mosdns不能直接使用geoip.dat和geosite.dat的数据因此需要借助v2dat: A cli tool that can unpack v2ray data packages.转换成txt使用。

如果懒得编译v2dat可以直接用一位大佬每日更新的规则Releases · MartialBE/v2dat_rule

0

评论区