Clash: 建议DNS模块增加一个host映射的功能

Created on 19 Jun 2019  ·  24Comments  ·  Source: Dreamacro/clash

clash 的dns模块已经挺好用了,但是唯独缺少一个类似自定义域名返回特定IP的映射功能

如果能直接在dns那里返回的话,有一些就不用到rule那里专门去设置匹配的规则的,而且最好host功能可以支持通配*域名。

Most helpful comment

hosts:
'*.oo': 127.0.0.1

这样设置无效,是不是必须类似这样: '*.aa.bb': 127.0.0.1


update: 发现在系统的 wifi 设置 - Proxies - Bypass 中填入 *.oo 可以。
这样的话,clash的dns配置可以继续enable

All 24 comments

dns:
  hosts:
    '*.clash.dev': 127.0.0.1
    'alpha.clash.dev': '::1'

implementation in dev branch, have a try

这个考虑支持一下对Domain设置指定DNS server吗?e.g.

dns:
  hosts:
    '*.clash.dev': 127.0.0.1
    'alpha.clash.dev': '::1'
    'beta.clash.dev': 'server:1.1.1.1'

那不行,这样就把 nameserver 所填的配置无效化了

这是不冲突的啊,查询的时候先看hosts里能否匹配,不匹配再到nameserver里去做下一阶段的dns查询。
(Surge应该就是这样查询DNS的)

跟我现在设计很冲突

启用自定义DNS后,系统本地的hosts文件解析被绕过了,请问这是bug还是就是这么设计的?

代码里没有关于本地hosts文件的解析,应该是作者没有考虑到这个吧。

@xindo451 以前开启自定义 dns 的时候就不用系统 host,原因是 windows 的 host 读不到,所以其他平台也没做。

暂时不打算做单域名对应 dns 解析,要做的东西有挺多的,按照目前的设计这种单独的配置会增加程序的复杂度

@Dreamacro 也就是说现在最新版本是不能通过clash配置:

dns:
  hosts:
    '*.clash.dev': 127.0.0.1
    'alpha.clash.dev': '::1'

来解析自定义的域名来吗?
如果不可以,目前有没有其他方法?

我的运行环境是MacOS
客户端:ClashX 1.10.1
clash内核版本:更新到dev分支

@Muchenyao 不要修改 DNS
在配置文件中规则(Rule:)部分添加直连规则,比如

# 如果是自定义的域名
- DOMAIN-SUFFIX,*.clash.dev,DIRCET   
# 如果是本机 IP
- IP-CIDR,127.0.0.1,DIRECT  

@wulongqiu 感谢你的回答。
但是仅仅添加直连规则是不行的,如果clash 开启DNS功能

dns:
  enable: true

那么dns查询会被clash接管, 它会忽略掉hosts文件的内容。而*.clash.dev本就是一个不存在的域名,DNS服务器上查不到对应的IP,那么即使指定了DIRCET直连规则我们也访问不了*clash.dev

虽然直接通过ip地址可以直接访问该网站,但是直接通过IP访问不但不方便,在我的案例中有些服务并不支持IP直接访问,所以只能放弃

目前比较无奈的解决方案是 dns 设置为false , 这样它就会先在hosts文件中对应的IP,然后可以正常访问了。

@Muchenyao 刚把 dns enable 设置为 true 后,规则的确不行,等待更完美的解决方案。

@Muchenyao dns设置enable=false,本地hosts的配置内容就生效了

你好,我想是否可以增加一个连接类型,类似于 DIRECT, 例如 HOST,如果是这个类型,那么就不去查询 DNS 服务器,相当于 dns enable 设置为 false。@Muchenyao

@bangbangda 现在的 hosts 就是全局的

@bangbangda 现在的 hosts 就是全局的

请问下这个host在fakeip下是不是无效

@xuedaolao 不是

增加一个配置把DNS关了,需要的时候切换一下配置算了~

hosts:
'*.oo': 127.0.0.1

这样设置无效,是不是必须类似这样: '*.aa.bb': 127.0.0.1


update: 发现在系统的 wifi 设置 - Proxies - Bypass 中填入 *.oo 可以。
这样的话,clash的dns配置可以继续enable

hosts:
'*.oo': 127.0.0.1

这样设置无效

hosts:
'.oo': 127.0.0.1
就可以了

'gov.cn' - 只匹配 gov.cn
'*.gov.cn' - 只匹配 {a,b,c,d}.gov.cn 不包括 gov.cn 和 www.abc.gov.cn
'.gov.cn' - 匹配后缀为gov.cn的所有域名 不包括 gov.cn

有个需求是把 *.test.com 映射到 172.0.0.1:8080 用于日常开发
现在是用 Charles proxy 做的,但是这样的话就没法挂代理访问外网了
想看看 clash 配置有没有解?

有个需求是把 *.test.com 映射到 172.0.0.1:8080 用于日常开发
现在是用 Charles proxy 做的,但是这样的话就没法挂代理访问外网了
想看看 clash 配置有没有解?

Charles可以设置外部代理的,直接Browser <--> Charles <--> Clash就可以了。

@xjasonlyu 我还是用的太少了,不知道 charles 可以这样
把系统代理切到 charles 上,charles 再把外部代理端口设置成梯子就行了
感谢!

Was this page helpful?
0 / 5 - 0 ratings