Clash为了避免DNS污染,会代理电脑的DNS服务,企业内网域名解析往往是内部的DNS服务器,不在Clash配置的DNS服务中,所以无法解析,或者解析到错误的地址,导致无法访问。

例如

我的在线Clash Profile配置中,nameserver指向的是这几个DNS服务器,不包含我的内网域名服务器。

1
2
3
4
5
6
7
8
9
10
11
dns:
enable: true
ipv6: false
nameserver:
- https://dns.rubyfish.cn/dns-query
- https://223.5.5.5/dns-query
- https://dns.pub/dns-query
fallback:
- https://1.0.0.1/dns-query
- https://public.dns.iij.jp/dns-query
- https://dns.twnic.tw/dns-query

解决办法

利用Clash的Mixin可以覆盖配置的方法,可以重写从代理服务器获取的配置。见下图:

image-20230329202055923

注意

Mixin默认脚本可能是YAML格式的,这种格式不方便操作,可以先去 Setting->Mixin 将Type修改为Javascript

image-20230329221051244

1、对特定域名使用指定的DNS服务器

指定内网域名的DNS服务器,参考文档说明:

Clash Dns Server说明

点击Mixin旁边的设置按钮

假设我们内网的域名是:+.wastrel.top

+.wastrel.top 可以匹配:wastrel.top, aaa.wastrel.top, aa.bb.wastrel.top

内网DNS服务器:192.168.75.10

编辑脚本:

1
2
3
4
5
6
7
8
module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {
// 添加特殊的DNS解析逻辑
temp={"nameserver-policy":{'+.wastrel.top': '192.168.75.10'}};
content.dns = {...content.dns,...temp};
// 增加规则 unshift表示添加在最前面 其他规则也可以按照这种方式添加
content.rules.unshift("DOMAIN-SUFFIX,wastrel.top,DIRECT");
return content
}

然后打开Mixin功能。

然后点这个图标,查看当前Clash的配置,检查修改的配置是否生效:

image-20230329220541527

检查内网和Google访问是否正常。

后记

其他想要重写VPN给的默认配置的操作也可以通过Mixin完成。