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,米家设备有可能连不上网络
- 有些时候,嗅探出来的域名并不是连接的最终yum,比如Mijia Cloud,有些米家设备的SNI是
- 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: falsefake-ip-filter:connectivity-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.comrebind: 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,MATCHproxy-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: 6geodata-mode: false:能显著提升软件启动时间,使用mmdb格式的规则集文件,不使用dat格式,dat启动时加载很慢
这么多规则匹配并不会耗费太多时间,平均时间在200微秒左右,0.2毫秒
