Clash的Nameserver-provider

场景

公司局域网下,让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] }
  1. 先用fake-ip-filter过滤掉这个域名
  2. 再用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"]
    }
  }
}

我这里直接覆盖了,如果要保留原始的参数,可以再自己判断下。

Leave a Reply

Your email address will not be published. Required fields are marked *