聊聊 mosdns 在用的一些小技巧及 fakeip 分流大法的一些小应用。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yyysuo
V2EX    DNS

聊聊 mosdns 在用的一些小技巧及 fakeip 分流大法的一些小应用。

  •  
  •   yyysuo 268 天前 3631 次点击
    这是一个创建于 268 天前的主题,其中的信息可能已经有所发展或是发生改变。
    所谓 fakeip 分流大法,包含以下几个要点
    1:在 dns 解析阶段用 mosdns 分流,只对需要代理的域名发 fakeip 。
    2:主路由防火墙只劫持 fakeip 流量/静态路由 fakeip 流量到 sing-box 入站。
    3:对不在域名列表的域名,先用国内 dns/国外 dns+ecs 解析,如果获取了国外 IP ,抛弃后发 fakeip 。

    这种分流方法有以下好处
    1:对于不需要代理的流量,从 dns 到路由,完全直连,和没有代理一模一样,科学挂掉也不影响。
    2:对于不走域名 IP 直连的流量,比如 bt/pt 的用户连接、vps ip ,默认是直连的。
    3:依赖 geoip-cn ,但是对域名列表精确度要求低,对未知域名能精确分流。


    衍生出来另外一个手机端的 fakeip 分流大法,和主路由方案很类似。
    1:家中主路由 sing-box 开 ss/hy2 等任何可以回家的入站。
    2:手机 sing-box dns 全通过 ss/hy2 入站导入到家中主路由 mosdns 。
    3:手机 sing-box dns 获取到 fakeip ,路由 fakeip 至家中 sing-box 的 ss/hy2 入站。
    4:手机 sing-box dns 获取到 real ip ,结果抛弃,重新使用 local dns 解析成对手机网络 cdn 友好的本地 ip 。

    这种分流方法对手机网络来说
    1:借用了这中 mosdns 的分流结果,分流精确,体验完美。
    2:不使用 srs/mrs 规则文件,省内存。
    3:配置文件写起来比较简单明了。

    有一些小技巧
    1:使用 mosdns ,可以使节点域名都走代理解析而不产生鸡蛋问题,第 1 次解析使用国内 dns ,代理联通后,后续都使用代理解析。
    sleep 1000 很重要,因为 sb 一接收到代理请求,就会解析节点域名,节点域名发到 mosdns 解析,mosdns 的上游国外 dns 如果使用了 sb 的代理,sb 接到 mosdns 的代理请求后会立即再发节点解析请求,5ms 内足以建立上万个连接。mosdns 延迟 1000ms 再走 8888 ,避免产生循环,使用 lazy cache 加速节点域名解析。

    #专门用于解析域名节点,默认使用 8888 解析,5 毫秒不通用换 223 解析
    - tag: sbnodefallback
    type: fallback
    args:
    primary: sequence_google
    secondary: sequence_local
    threshold: 5
    always_standby: false

    - tag: sequence_sbnode
    type: sequence
    args:
    - exec: $cache_node
    - matches: has_resp
    exec: accept
    - exec: sleep 1000
    - exec: $sbnodefallback

    2:改动了 mosdns 的代码,增加了一个规则文件输出插件,固化 mosdns 的分流结果,生成 2 种规则文件。

    #访问过的 fakeip 的域名清单和生成规则,以 mosdns 和 Adguard Home 为例
    - tag: my_fakeiplist
    type: domain_output
    args:
    file_stat: /cus/mosdns/gen/fakeiplist.txt #域名统计信息
    file_rule: /cus/mosdns/gen/fakeiprule.txt #可供 mosdns 使用的规则文件
    gen_rule: /cus/AdGuardHome/data/userfilters/fakeip.txt #可供 Adguard Home 使用的上游配置
    pattern: "[/DOMAIN/]127.0.0.1:7874" #Adguard Home 上游配置生成规则
    appended_string: "udp://127.0.0.1:6666"#Adguard Home 上游配置文件的第 1 行
    max_entries: 1000 #流经插件的域名达到 1000 写入本地
    dump_interval: 36010 #mosdns 运行 36010 秒后写入本地

    生成的可供 mosdns 使用的规则文件格式如下
    full:firetvcaptiveportal.com
    full:msh.amazon.com
    full:api.amazon.com

    生成的可供 Adguard Home 使用的上游 dns 配置文件格式如下:
    udp://127.0.0.1:6666
    [/001.kjdf-e56efs6.cc/]127.0.0.1:7874
    [/00453.net/]127.0.0.1:7874

    3:使用 fallback 插件并发匹配 2 个域名列表,并使用 black_hole 传递匹配结果(因为 mark 不能跨序列传递)

    #国内域名列表匹配
    - tag: gen_is_local_dns
    type: sequence
    args:
    - matches: qname $my_realiprule
    exec: black_hole 127.0.0.1 ::1

    #国外域名列表匹配
    - tag: gen_is_fakeip
    type: sequence
    args:
    - matches: qname $my_fakeiprule
    exec: black_hole 127.0.0.2 ::2
    - matches: "!resp_ip 127.0.0.2 ::2"
    exec: black_hole 127.0.0.3 ::3

    #fallback 并发匹配
    - tag: gen_conc
    type: fallback
    args:
    primary: gen_is_local_dns
    secondary: gen_is_fakeip
    threshold: 20000
    always_standby: true

    4:使用前面提及的 domain_output 插件生成没有 V6 ip 的域名列表,并在 mosdns 规则中屏蔽减少无效查询
    - matches:
    - "qtype 28"
    - "mark 11"
    - "rcode 0 2 3 5"
    - "!resp_ip 2000::/3"
    - "!cname keyword:."
    exec: $my_nov6list #生成域名规则

    - matches: #屏蔽没有 v6 地址的域名
    - qtype 28
    - qname $my_nov6rule
    exec: reject 3

    5:利用 sing-box 的 dns ip 规则,实现 sing-box dns 的 2 次查询判断

    {
    "tag": "mosdns",
    "address": "tcp://10.10.10.1:53",
    "detour": "home"
    },

    {
    "ip_cidr": [
    "28.0.0.0/8",
    "fc00::/18"
    ],
    "server": "mosdns"
    }

    "final": "localdns"
    解析:手机端 sing-box 配置中,dns 全回到家中的 mosdns 解析,如果 mosdns 返回了家中的 fakeip 段,那 dns 查询结果被接受,否则结果被抛弃,重新使用 localdns 查询。

    6:利用 sing-box network_strategy ,实现在没有 v6 的 wifi 环境下,v6 走手机流量。

    出站:
    {
    "type": "direct",
    "network_strategy": "hybrid",
    "network_type": "cellular",
    "tag": "directm"
    }


    路由:

    {
    "type": "logical",
    "mode": "and",
    "rules": [
    {
    "wifi_ssid": "我的 WIFI",
    "invert": true
    },
    {
    "ip_cidr": ["::/0"]
    }
    ],
    "outbound": "directm"
    }
    2 条回复    2025-03-29 20:23:23 +08:00
    buchiluobo
        1
    buchiluobo  
       263 天前
    为什么不聊聊 Adguard Home 呢?
    yyysuo
        2
    yyysuo  
    OP
       263 天前
    @buchiluobo 可以聊,不过感觉没啥好聊的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5142 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 07:35 PVG 15:35 LAX 23:35 JFK 02:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86