我的DNS配置技巧

25 年 7 月 26 日 星期六 (已编辑)
2955 字
15 分钟

FakeIP(enhanced-mode: fake-ip)

假设已经通过domain进行过分流

直连

使用配置的DNS服务器进行解析

代理

  • 返回FakeIP Pool中的保留地址
    • 记录FakeIP与Domain映射关系
  • 客户端向保留地址发起连接
  • 通过FakeIP与Domain映射关系反向查询Domain
  • 向代理服务器发起连接,目标地址为Domain
  • 代理服务器进行二次DNS解析,连接到目标IP

RealIP

假设已经通过domain进行过分流

直连

客户端向真实IP发起连接

代理

使用域名(enhanced-mode: redir-host)

  • 进行DNS查询并记录返回的IP和域名关系
    • 此时如果遇到CDN域名的情况,需要额外处理来保证映射的准确性,比如DNS解析结果为1.1.1.1的Cloudflare AnycastIP,此IP对应多个域名,IP与域名为一对多的关系
  • 客户端向IP发起连接,通过IP反查域名
  • 向代理服务器发起连接,目标地址为Domain
  • 代理服务器进行二次DNS解析,连接到目标IP

使用IP(enhanced-mode: normal)

  • 进行DNS查询
  • 客户端向真实IP发起连接
  • 向代理服务器发起连接,目标地址为IP

规则匹配

  • 阶段一:DNS解析时期的规则匹配,对不同的域名使用不同的DNS服务器进行解析
  • 阶段二:客户端发起连接,代理软件收到连接后,选择出站的规则匹配

在FakeIP和RealIP(域名)模式下,两个阶段互相有关联,阶段二需要使用阶段一的域名来覆盖连接的目标地址(override-destination),以此实现准确的DNS解析。

在RealIP(IP)的模式下,两个阶段完全分离,DNS解析的结果是最终连接的目标地址

嗅探

嗅探可以通过观测一个已经打开的连接,获取这个连接中的域名。此时获取的域名可以选择只用过规则匹配,或覆盖连接的目标地址(override-destination)

理想情况下,配置正确时

  • FakeIP: 不需要启用嗅探,因为DNS解析是保留了完整的域名,不需要在连接发起时进行嗅探,带来了额外的性能开销,而且容易引发错误。
    • 有些时候,嗅探出来的域名并不是连接的最终yum,比如Mijia Cloud,有些米家设备的SNI是 Mijia Cloud 很明显这不是一个域名,如果启用了override-destination,米家设备有可能连不上网络
  • redir-host: 需要开启嗅探,为了处理IP和域名一对多的情况,如果外开启,你可能会遇到网站SSL错误,域名和证书不一致的错误
  • normal: 建议开启,否则不能使用基于IP的域名匹配规则,对于特定网站的分流将失效

ECH

ECH(Encrypted Client Hello)可以加密连接中的SNI信息,对于网络防火墙来说,无法获取连接的域名,无法进行SNI阻断。对于代理来说,无法通过嗅探获取域名,无法进行指定域名的分流(仅normal)模式下。

总结

我建议的配置

FakeIP模式

dns:
  enable: true
  cache-algorithm: arc
  respect-rules: true
  prefer-h3: false
  use-system-hosts: true
  ipv6: false
  listen: "[::]:1053"
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - geosite:connectivity-check
    - geosite:private
    - geosite:cn
  use-hosts: true
  rebind: false
  default-nameserver:
    - system
  proxy-server-nameserver:
    - system
  nameserver:
    - system
    
sniffer:
  enable: false
  force-dns-mapping: false
  parse-pure-ip: false
  override-destination: false
  • fake-ip-filterconnectivity-check 中包含了连接性检查的域名。系统会向这些域名发送ICMP Ping,代理软件不能代理ICMP协议,所以此处返回realip,防止设备觉得自己断网了
# ArchLinux
ping.archlinux.org

# Apple
captive.apple.com

# Android
connectivitycheck.gstatic.com

# Cloudflare
cp.cloudflare.com

# Debian
network-test.debian.org

# Firefox
detectportal.firefox.com

# Honor
full:connectivitycheck.platform.hihonorcloud.com

# Huawei
full:connectivitycheck.platform.hicloud.com

# KDE
networkcheck.kde.org

# MIUI
full:connect.rom.miui.com

# Windows
msftconnecttest.com
msftncsi.com
  • rebind: false:如果你需要访问局域网内的内网网站,设置为false,否则设置为ttue,启用这一项设置,代理软件会认为,如果DNS解析过程中收到了内网IP,则此次DNS解析被污染,会抛弃DNS解析结果。
  • nameserver:所有 fake-ip-filter 中的网站会使用nameserver进行解析,此次没有需要被代理的网站,所以不需要配置任何一个代理的DNS服务器

Normal模式

dns-anchor:
  direct: &direct
    - system
  proxy: &proxy
    - https://1.1.1.1/dns-query#DNS
    - https://8.8.8.8/dns-query#DNS
  proxy-ai: &proxy-ai
    - https://1.1.1.1/dns-query#AI&disable-ipv6=true&disable-https=true
    - https://8.8.8.8/dns-query#AI&disable-ipv6=true&disable-https=true

dns:
  enable: true
  cache-algorithm: arc
  cache-max-size: 20480
  respect-rules: true
  prefer-h3: false
  use-system-hosts: true
  ipv6: true
  listen: "[::]:1053"
  enhanced-mode: normal
  use-hosts: true
  rebind: false
  default-nameserver: *direct
  proxy-server-nameserver: *direct
  nameserver-policy:
    "geosite:category-games,category-game-platforms-download,category-game-accelerator-cn,geolocation-!cn@cn": *direct
    "geosite:category-ai-chat-!cn": *proxy-ai
  nameserver: *direct
  fallback: *proxy
  fallback-filter:
    geoip: true
    geoip-code: CN # 除了 geoip-code 配置的国家 IP, 其他的 IP 结果会被视为污染,geoip-code 配置的国家的结果会直接采用,否则将采用 fallback结果
    geosite: # geosite 列表的内容被视为已污染,匹配到 geosite 的域名,将只使用 fallback解析,不去使用 nameserver
      - geolocation-!cn
      - geolocation-cn@!cn
    ipcidr:
      - "0.0.0.0/8"
      - "10.0.0.0/8"
      - "100.64.0.0/10"
      - "127.0.0.0/8"
      - "169.254.0.0/16"
      - "172.16.0.0/12"
      - "192.0.0.0/24"
      - "192.0.2.0/24"
      - "192.88.99.0/24"
      - "192.168.0.0/16"
      - "198.18.0.0/15"
      - "198.51.100.0/24"
      - "203.0.113.0/24"
      - "224.0.0.0/3"
      - "::/127"
      - "fc00::/7"
      - "fe80::/10"
      - "ff00::/8"
  
sniffer:
  enable: true
  force-dns-mapping: false
  parse-pure-ip: true
  override-destination: false
  sniff:
    HTTP:
      ports: [80, 8080-8880]
    TLS:
      ports: [443, 8443]
    QUIC:
      ports: [443, 8443]
  • enhanced-mode: normal:不进行IP和域名的映射
  • nameserver-policy
    • 此时需要手动配完整的DNS分流规则
    • 对于特定网站的分流为了保证DNS出口和代理的出口一致,建议使用单独的DNS服务器,并配置 #AI 用于指定DNS的出站服务器,这样,当AI策略组切换到SG的时候,DNS解析也将会在SG进行
    • 不需要ECS
  • force-dns-mapping: false:取消IP和域名映射
  • parse-pure-ip: true :嗅探纯IP连接,只对没有获取域名的连接进行嗅探
  • override-destination: false:嗅探的结果只用于规则匹配,不用于实际连接,发送到代理服务器的是IP不是yum

redir-host不建议使用

分流规则

group-anchor: &group-anchor
  proxies:
    [
      DMIT_SHINAGAWA,
      DMIT_ECHO,
      BWH_US,
      BWH_NL,
      MISAKA_DE,
      DIRECT,
    ]

proxy-groups:
  - { name: DNS, type: select, <<: *group-anchor }
  - { name: PROXY, type: select, proxies: [SELECT, FALLBACK] }
  - { name: FALLBACK, type: fallback, interval: 15, <<: *group-anchor }
  - { name: SELECT, type: select, <<: *group-anchor }
  - { name: GAME, type: select, <<: *group-anchor }
  - { name: AI, type: select, <<: *group-anchor }
  - { name: JP, type: select, <<: *group-anchor }
  - { name: SG, type: select, <<: *group-anchor }
  - { name: Asia, type: select, proxies: [SELECT, FALLBACK] }
  - { name: American, type: select, <<: *group-anchor }
  - { name: Europe, type: select, <<: *group-anchor }
  - { name: GENERAL, type: select, proxies: [SELECT, FALLBACK] }
  - { name: SPECIAL, type: select, proxies: [SELECT, FALLBACK] }
  - { name: MATCH, type: select, proxies: [GENERAL, SPECIAL, PROXY, DIRECT] }

rules:
  - IP-CIDR,127.0.0.1/32,DIRECT
  - RULE-SET,DIRECT,DIRECT
  - RULE-SET,PROXY,PROXY
  - GEOIP,PRIVATE,DIRECT
  - GEOSITE,category-ai-chat-!cn,AI
  - GEOSITE,category-games,GAME
  - GEOSITE,category-game-platforms-download,GAME

  - RULE-SET,TELEGRAM,SPECIAL

  - RULE-SET,ANYCAST,GENERAL
  - RULE-SET,CLOUDFLARE,GENERAL
  - RULE-SET,GOOGLE,GENERAL
  - RULE-SET,FASTLY,GENERAL
  - RULE-SET,CLOUDFRONT,GENERAL
  - RULE-SET,FACEBOOK,GENERAL

  - GEOIP,CN,DIRECT

  - GEOIP,JP,JP
  - GEOIP,SG,SG

  - GEOIP,HK,Asia # 香港 / 14961
  - GEOIP,IN,Asia # 印度 / 20305
  - GEOIP,ID,Asia # 印度尼西亚 / 16232
  - GEOIP,TR,Asia # 土耳其 / 6012
  - GEOIP,KR,Asia # 韩国 / 5630
  - GEOIP,AE,Asia # 阿联酋 / 5042
  - GEOIP,TW,Asia # 台湾 / 4624
  - GEOIP,BD,Asia # 孟加拉国 / 4451
  - GEOIP,MY,Asia # 马来西亚 / 3954
  - GEOIP,VN,Asia # 越南 / 3855
  - GEOIP,TH,Asia # 泰国 / 3694
  - GEOIP,SA,Asia # 沙特阿拉伯 / 3479
  - GEOIP,PH,Asia # 菲律宾 / 3283
  - GEOIP,IL,Asia # 以色列 / 3267
  - GEOIP,IR,Asia # 伊朗 / 2712
  - GEOIP,KZ,Asia # 哈萨克斯坦 / 1970
  - GEOIP,PK,Asia # 巴基斯坦 / 1963
  - GEOIP,IQ,Asia # 伊拉克 / 1810
  - GEOIP,MV,Asia # 马尔代夫 / 1746
  - GEOIP,QA,Asia # 卡塔尔 / 1388
  - GEOIP,KW,Asia # 科威特 / 1202
  - GEOIP,AM,Asia # 亚美尼亚 / 880
  - GEOIP,UZ,Asia # 乌兹别克斯坦 / 832
  - GEOIP,AF,Asia # 阿富汗 / 830
  - GEOIP,GE,Asia # 格鲁吉亚 / 808
  - GEOIP,NP,Asia # 尼泊尔 / 787
  - GEOIP,KH,Asia # 柬埔寨 / 772
  - GEOIP,MM,Asia # 缅甸 / 750
  - GEOIP,AZ,Asia # 阿塞拜疆 / 727
  - GEOIP,JO,Asia # 约旦 / 622
  - GEOIP,LB,Asia # 黎巴嫩 / 621
  - GEOIP,MN,Asia # 蒙古 / 543
  - GEOIP,MO,Asia # 澳门 / 523
  - GEOIP,OM,Asia # 阿曼 / 519
  - GEOIP,PS,Asia # 巴勒斯坦 / 502
  - GEOIP,KP,Asia # 朝鲜 / 501
  - GEOIP,BH,Asia # 巴林 / 500
  - GEOIP,LK,Asia # 斯里兰卡 / 474
  - GEOIP,KG,Asia # 吉尔吉斯斯坦 / 396
  - GEOIP,SY,Asia # 叙利亚 / 379
  - GEOIP,LA,Asia # 老挝 / 294
  - GEOIP,TJ,Asia # 塔吉克斯坦 / 277
  - GEOIP,BT,Asia # 不丹 / 268
  - GEOIP,BN,Asia # 文莱 / 251
  - GEOIP,YE,Asia # 也门 / 250
  - GEOIP,TM,Asia # 土库曼斯坦 / 177
  - GEOIP,IO,Asia # 英属印度洋领地 / 121
  - GEOIP,CC,Asia # 科科斯(基林)群岛 / 82
  - GEOIP,AU,Asia # 澳大利亚 / 2
  - GEOIP,NZ,Asia # 新西兰 / 1

  - GEOIP,US,American # 美国 / 523619
  - GEOIP,CA,American # 加拿大 / 28661
  - GEOIP,BR,American # 巴西 / 23226
  - GEOIP,MX,American # 墨西哥 / 7379
  - GEOIP,AR,American # 阿根廷 / 5481
  - GEOIP,CO,American # 哥伦比亚 / 3702
  - GEOIP,CL,American # 智利 / 2937
  - GEOIP,PE,American # 秘鲁 / 1767
  - GEOIP,PR,American # 波多黎各 / 1516
  - GEOIP,VE,American # 委内瑞拉 / 1462
  - GEOIP,EC,American # 厄瓜多尔 / 1386
  - GEOIP,DO,American # 多米尼加 / 1085
  - GEOIP,CR,American # 哥斯达黎加 / 915
  - GEOIP,PA,American # 巴拿马 / 904
  - GEOIP,GT,American # 危地马拉 / 787
  - GEOIP,PY,American # 巴拉圭 / 707
  - GEOIP,BO,American # 玻利维亚 / 655
  - GEOIP,HN,American # 洪都拉斯 / 610
  - GEOIP,SV,American # 萨尔瓦多 / 498
  - GEOIP,JM,American # 牙买加 / 482
  - GEOIP,UY,American # 乌拉圭 / 453
  - GEOIP,BZ,American # 伯利兹 / 418
  - GEOIP,VG,American # 英属维尔京群岛 / 398
  - GEOIP,GP,American # 瓜德罗普 / 363
  - GEOIP,TT,American # 特立尼达和多巴哥 / 362
  - GEOIP,NI,American # 尼加拉瓜 / 349
  - GEOIP,VI,American # 美属维尔京群岛 / 348
  - GEOIP,BB,American # 巴巴多斯 / 330
  - GEOIP,BS,American # 巴哈马 / 324
  - GEOIP,AG,American # 安提瓜和巴布达 / 316
  - GEOIP,KY,American # 开曼群岛 / 299
  - GEOIP,GL,American # 格陵兰 / 291
  - GEOIP,MQ,American # 马提尼克 / 287
  - GEOIP,BM,American # 百慕大 / 264
  - GEOIP,LC,American # 圣卢西亚 / 257
  - GEOIP,HT,American # 海地 / 254
  - GEOIP,AW,American # 阿鲁巴 / 245
  - GEOIP,CW,American # 库拉索 / 236
  - GEOIP,GY,American # 圭亚那 / 234
  - GEOIP,GD,American # 格林纳达 / 229
  - GEOIP,KN,American # 圣基茨和尼维斯 / 229
  - GEOIP,AI,American # 安圭拉 / 220
  - GEOIP,DM,American # 多米尼克 / 219
  - GEOIP,GF,American # 法属圭亚那 / 205
  - GEOIP,VC,American # 圣文森特和格林纳丁斯 / 203
  - GEOIP,CU,American # 古巴 / 202
  - GEOIP,SR,American # 苏里南 / 177
  - GEOIP,TC,American # 特克斯和凯科斯群岛 / 174
  - GEOIP,MF,American # 法属圣马丁 / 174
  - GEOIP,PM,American # 圣皮埃尔和密克隆群岛 / 168
  - GEOIP,BQ,American # 博奈尔岛、圣尤斯达蒂斯和萨巴 / 156
  - GEOIP,SX,American # 圣马丁岛 / 151
  - GEOIP,BL,American # 圣巴泰勒米 / 147
  - GEOIP,MS,American # 蒙特塞拉特 / 135
  - GEOIP,FK,American # 福克兰群岛(马尔维纳斯) / 112

  - GEOIP,DE,Europe # 德国 / 81001
  - GEOIP,NL,Europe # 荷兰 / 75259
  - GEOIP,GB,Europe # 英国 / 48829
  - GEOIP,FI,Europe # 芬兰 / 48569
  - GEOIP,FR,Europe # 法国 / 39410
  - GEOIP,RU,Europe # 俄罗斯联邦 / 23872
  - GEOIP,IT,Europe # 意大利 / 15966
  - GEOIP,ES,Europe # 西班牙 / 15138
  - GEOIP,SE,Europe # 瑞典 / 14050
  - GEOIP,CH,Europe # 瑞士 / 11555
  - GEOIP,PL,Europe # 波兰 / 11014
  - GEOIP,IE,Europe # 爱尔兰 / 8893
  - GEOIP,UA,Europe # 乌克兰 / 7882
  - GEOIP,BE,Europe # 比利时 / 7346
  - GEOIP,AT,Europe # 奥地利 / 7146
  - GEOIP,CZ,Europe # 捷克 / 5150
  - GEOIP,DK,Europe # 丹麦 / 5037
  - GEOIP,RO,Europe # 罗马尼亚 / 4982
  - GEOIP,NO,Europe # 挪威 / 4424
  - GEOIP,BG,Europe # 保加利亚 / 3312
  - GEOIP,LT,Europe # 立陶宛 / 3219
  - GEOIP,HU,Europe # 匈牙利 / 2981
  - GEOIP,GR,Europe # 希腊 / 2742
  - GEOIP,PT,Europe # 葡萄牙 / 2742
  - GEOIP,MD,Europe # 摩尔多瓦 / 2092
  - GEOIP,AL,Europe # 阿尔巴尼亚 / 2009
  - GEOIP,LU,Europe # 卢森堡 / 1871
  - GEOIP,SK,Europe # 斯洛伐克 / 1819
  - GEOIP,EE,Europe # 爱沙尼亚 / 1648
  - GEOIP,SI,Europe # 斯洛文尼亚 / 1573
  - GEOIP,LV,Europe # 拉脱维亚 / 1563
  - GEOIP,RS,Europe # 塞尔维亚 / 1493
  - GEOIP,CY,Europe # 塞浦路斯 / 1485
  - GEOIP,HR,Europe # 克罗地亚 / 1196
  - GEOIP,IS,Europe # 冰岛 / 765
  - GEOIP,LI,Europe # 列支敦士登 / 733
  - GEOIP,BY,Europe # 白俄罗斯 / 679
  - GEOIP,BA,Europe # 波黑 / 497
  - GEOIP,MT,Europe # 马耳他 / 481
  - GEOIP,MK,Europe # 前南马其顿 / 435
  - GEOIP,AD,Europe # 安道尔 / 411
  - GEOIP,IM,Europe # 英国属地曼岛 / 358
  - GEOIP,MC,Europe # 摩纳哥 / 355
  - GEOIP,ME,Europe # 黑山 / 297
  - GEOIP,GI,Europe # 直布罗陀 / 257
  - GEOIP,GG,Europe # 根西岛 / 245
  - GEOIP,JE,Europe # 泽西岛 / 236
  - GEOIP,SM,Europe # 圣马力诺 / 194
  - GEOIP,AX,Europe # 奥兰群岛 / 183
  - GEOIP,VA,Europe # 梵蒂冈 / 173
  - GEOIP,FO,Europe # 法罗群岛 / 161
  - GEOIP,SJ,Europe # 斯瓦尔巴岛和扬马延岛 / 95
  - GEOIP,XK,Europe # 科索沃 / 94

  - MATCH,MATCH
  • proxy-groups: name: DNS:指定DNS解析的出口
  • proxy-groups: name: FALLBACK:故障转移,多个阶段按照优先级自动选择

其他

geodata-mode: false
geodata-loader: standard
geox-url:
  geosite: https://ghfast.top/https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat
  mmdb: https://ghfast.top/https://raw.githubusercontent.com/Loyalsoldier/geoip/release/GeoLite2-Country.mmdb
  geoip: https://ghfast.top/https://github.com/v2ray/geoip/raw/release/geoip.dat
  asn: https://ghfast.top/https://raw.githubusercontent.com/Loyalsoldier/geoip/release/GeoLite2-ASN.mmdb
geo-auto-update: true
geo-update-interval: 6

geodata-mode: false:能显著提升软件启动时间,使用mmdb格式的规则集文件,不使用dat格式,dat启动时加载很慢

这么多规则匹配并不会耗费太多时间,平均时间在200微秒左右,0.2毫秒

Pasted image 20251123180955.png

文章标题:我的DNS配置技巧

文章作者:violet

文章链接:https://www.vio.vin/posts/wo-de-dns-pei-zhi-ji-qiao[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。