V2ray-core: v2ray内置的dns服务器可以实现类似chinadns的策略吗

Created on 1 Nov 2019  ·  17Comments  ·  Source: v2ray/v2ray-core

即当 local dns 返回国外地址时转而查询 foreign dns

Most helpful comment

已经实现了一个版本,在家里跑了几天,使用感觉非常爽

  • 不用搭建overture
  • 直接使用,王者荣耀这些游戏能正常速度下载(走国内DNS解析)

All 17 comments

可以

@kingwilliam 怎么实现可以简单介绍下么

因不知你的配置,所以只能给你基本答案. 如还是解答不到你的提问, 最好是放你客户端的代码上来看看.

短答案:
新 V2Ray 白话文指南
基本篇 - 路由功能 - 国内直连 - 配置 - 客户端 (留意 routing 部份)

https://guide.v2fly.org/basics/routing/cndirect.html#%E5%AE%A2%E6%88%B7%E7%AB%AF

长答案:
漫谈各种黑科技式 DNS 技术在代理环境中的应用
https://medium.com/@TachyonDevel/%E6%BC%AB%E8%B0%88%E5%90%84%E7%A7%8D%E9%BB%91%E7%A7%91%E6%8A%80%E5%BC%8F-dns-%E6%8A%80%E6%9C%AF%E5%9C%A8%E4%BB%A3%E7%90%86%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8-62c50e58cbd0

@kingwilliam 谢谢
我是通过修改系统路由表来将所有境外流量全走tun2socks的. 所以域名都需要先解析成ip.
你提供的链接我都看了, 好像没类似chinadns的策略. 基本都是用geosite中的名单来进行匹配. 这种方式感觉还是不够完善. 不知是否我没看明白

geoip:cn 可合用?

@kingwilliam dns只有domains. 没有ips这个配置, 如果能加上应该就解决了.
但是ip只能在查询到结果后再匹配, 跟domains不一样

抱歉 你已在用v2ray吗?还是准备用?因我真的不太明白你的设定 或 你可否再详细解说。

@kingwilliam 正在用.
我用tun2socks接到v2ray的socks入口. 然后修改系统路由让所有境外流量走tun接口. 但没有使用v2ray内置的dns服务, 而是使用的chinadns.
如果v2ray可以实现和chinadns一样的解析策略, 就可以省一个进程了.

让tun2socks接管除v2所需的以外的流量,用v2内的路由区分?

@Cwek 问题不在路由上, 而是域名解析.
chinadns的解析策略是先由国内dns解析, 如果返回国外地址再重新由国外dns解析.
v2ray内置的dns目前只能根据预先定义的域名列表来将要解析的域名发送到对应dns. 无法判断解析出的地址是否符合条件, 并重新由其它dns来解析.

我提供一个思路。大致流程:

inbound1 -> router1 ->outbound1 -> inbound2 -> router2 -> outbound2

其中 router1 对进入的流量按照 ip 分类 (geoip:cn) ,inbound1 为 freedom,对流量重定向,inbound2 为 doko-door ,对流量 sniffing 。在 router 处再次按 ip 分类。但这种方式有一个问题,dns 需要根据不同入站标签使用不同服务器,目前并不支持。可以用两个 v2ray 实例实现,不知道是否有单实例实现的方法。

@jslll135 域名重新解析是在哪一步做的呀?

我前面说的方法域名重新解析是在第二次出站。不过仔细思考后我认为单实例可以满足你的要求。大体思路和前面的方法相同。首先说一下,V2Ray 不支持根据标签做 DNS 解析,所以如果使用内置 DNS 则同一个域名只会得到同一个结果。但是我们可以不使用内置 DNS。所以我提供一个改进的方法。

路由中域名解析策略使用 IPOnDemand,或许 IPIfNonMatch 也可以,我都没有测试。对应 inbound1 的路由规则使用 ip 规则 (geoip:cn)。第一次路由使用了内置 DNS ,按结果区分出国外流量。第二次入站后,流量目标重置为域名 (sniffing)。对应的路由规则中直接通过代理出站即可。第二次解析发生在代理服务器端。

可参考上面贴过的这篇文章理解相关过程。具体配置可部分参考 https://github.com/v2ray/v2ray-core/issues/1998 中的配置文件。

@jslll135 谢谢你的讲解, 我大致明白了.
这种方法应该能满足一般需求. 但流量目标重置支持的协议有限, 所以仍不够通用. 而且nslookup只能获得localdns的解析结果. 应用程序有可能将其作为通讯目标而不使用域名. 我希望将v2ray用于整个操作系统范围, 而不限于浏览器. 所以对通用性要求要高一些.

我理解@xxoo的需求,其实v2ray可以作为一个独立DNS服务,我现在的配置就是有3个独立进程,分别承担对应功能

image

现在的问题是:

v2ray DNS解析后的结果IP(画重点,是解析后的IP),不能再次路由

现在的解法

现在也是通过再添加一个overture做DNS分发(原理同chinadns)

如果v2ray有相应的解决方案就完美:)

已经实现了一个版本,在家里跑了几天,使用感觉非常爽

  • 不用搭建overture
  • 直接使用,王者荣耀这些游戏能正常速度下载(走国内DNS解析)

@weaving118 厉害, 看到你的pr了. 这就是我想要的哈哈

Was this page helpful?
0 / 5 - 0 ratings