Skip to content

功能请求:更专业的DNS分流 #4505

@Meo597

Description

@Meo597

完整性要求

  • 我保证阅读了文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
  • 我提供了完整的配置文件和日志,而不是出于自己的判断只给出截取的部分。
  • 我搜索了 issues, 没有发现已提出的类似问题。
  • 问题在 Release 最新的版本上可以成功复现

描述

一些权威DNS不支持EDNS导致特定情况下DNS分流失效,造成绕路问题

场景:
如果你的Xray用透明代理充当局域网关,并且你有多个节点分布在不同的国家
你希望看奈飞、亚马逊走HK;其它走默认的美国

最好的做法肯定是在DNS和路由都做策略

DNS做域名的rule是为了保证解析出HK的IP
路由做域名的rule确保流量一定从那出去
路由做IP的rule防止漏网之鱼

但许多大厂CDN的权威DNS压根不支持EDNS

所以可能需要改造DNS模块,让DNS支持指定的outbound

希望支持如下配置:

{
  "dns": {
    "servers": [
      {
        "address": "8.8.8.8",
        "port": 53,
        "domains": ["geosite:netflix"],
        "outboundTag": "node-hk" // 新功能:从hk出去,无视routing的IP rule
      }
      "8.8.8.8" // 这里没指定,因此将遵守routing模块的IP rule
    ]
  }
}

现在目前临时解决办法是:
1.多准备几个不同的递归DNS,在路由规则中指定出口,放弃EDNS
但如果节点特别多,递归DNS明显不够用,而且这个方法不够优雅

2.让Xray节点sniff+routeOnly=false覆盖IP
但显然会造成二次DNS解析,也不够优雅

重现方式

假如你有两个节点,HK和US,8.8.8.8走US
比如下面这个DNS策略,youtube没问题,facebook会解析出美国IP

...省略
      {
        // 利用EDNS尝试获取节点位置的A/AAAA记录
        "address": "8.8.8.8",
        "port": 53,
        "skipFallback": true,
        "domains": ["geosite:youtube", "geosite:meta"],
        "clientIp": "110.235.0.0" // 香港的家宽IP
      },
...省略

客户端配置

N/A

服务端配置

N/A

客户端日志

N/A

服务端日志

N/A

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions