场景
公司局域网下,让NAS在内网的时候走内网,在外网的时候走外网,省一些带宽。
所以公司路由器我设置了下发自己为默认的解析服务器。
问题
但是开启Clash,tun使用fake-ip的时候,就没法很好地自动切换“内网使用路由器地址来做DNS解析,外网用上级DNS解析”。
解决办法
dns:
enable: true
ipv6: false
default-nameserver: [223.5.5.5, 119.29.29.29, 114.114.114.114]
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "nas.pingze.com" # 关键
use-hosts: true
respect-rules: true
proxy-server-nameserver: [223.5.5.5, 119.29.29.29, 114.114.114.114]
nameserver-policy:
"*.pingze.com":
- "172.16.1.1" # 关键:首选内网DNS
- "223.5.5.5" # 关键:回退到公共DNS
nameserver: [223.5.5.5, 119.29.29.29, 114.114.114.114]
fallback: [1.1.1.1, 8.8.8.8]
fallback-filter: { geoip: true, geoip-code: CN, geosite: [gfw], ipcidr: [240.0.0.0/4], domain: [+.google.com, +.facebook.com, +.youtube.com] }
- 先用
fake-ip-filter过滤掉这个域名 - 再用
nameserver-policy指定解析的服务地址,有些客户端是不支持多级的,这个很关键,因为在外网的时候,就靠这个自动切换可用的DNS服务。
额外的
面对订阅的自动更新以及多个profile,可以使用客户端(大部分现在都有这个能力)的扩展JS脚本来解决。
function modifyDNS(config, profileName) {
config["dns"] = {
"enable": true,
"ipv6": false,
"default-nameserver": ["223.5.5.5", "119.29.29.29", "114.114.114.114"],
"enhanced-mode": "fake-ip",
"fake-ip-range": "198.18.0.1/16",
"fake-ip-filter": ["nas.pingze.com"],
"use-hosts": true,
"respect-rules": true,
"proxy-server-nameserver": ["223.5.5.5", "119.29.29.29", "114.114.114.114"],
"nameserver-policy": {
"*.pingze.com": ["172.16.1.1", "223.5.5.5"]
},
"nameserver": ["223.5.5.5", "119.29.29.29", "114.114.114.114"],
"fallback": ["1.1.1.1", "8.8.8.8"],
"fallback-filter": {
"geoip": true,
"geoip-code": "CN",
"geosite": ["gfw"],
"ipcidr": ["240.0.0.0/4"],
"domain": ["+.google.com", "+.facebook.com", "+.youtube.com"]
}
}
}
我这里直接覆盖了,如果要保留原始的参数,可以再自己判断下。