ros redir-host/realip 分流,魔改 mosdns 将解析后 ip 写入 ros address-list - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fuzhuo233
V2EX    DNS

ros redir-host/realip 分流,魔改 mosdns 将解析后 ip 写入 ros address-list

  •  
  •   fuzhuo233 294 天前 3447 次点击
    这是一个创建于 294 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主路由是 routerOS ,硬件用 RB5009 或者 x86 虚拟机。目前是在 container 中运行 mosdns 和 mihomo/sing-box 来达到科学上网,之前一直用的是 fakeip 来分流需要走代理的流量,其它流量直通。

    一直想尝试 realip 模式,有其它帖子利用旁路由 ospf 来将代理 ip 同步到路由表,但感觉侵入性较大,比较复杂而且同步有延迟,mosdns 内置支持了 ipset ,但 ros 不支持 ipset ,ros 只支持 address-list ,但它支持 RESTFul API 来做到/ip/firewall/address-list/add 的方式来将 ip 写入到 address-list 。相比于静态下载路由表,这样由 mosdns 仅将你确实需要访问的 ip 写入 address-list ,这样系统负担应该会更小一些。

    于是给 mosdns 提了个 PR 增加一个新的 plugin ros_addrlist来写出 ip https://github.com/IrineSistiana/mosdns/pull/864

    # 格式 exec: ros_addrlist <host>,<user>,<password>,<address-list-name>,<nettype>,<mask> exec: ros_addrlist http://192.168.23.1:8080,admin,password,mosdns_gfwlist,inet,32 

    也可以直接用封装好的 docker image

    # x86 的 docker image pull qiudaomao/mosdns:latest --platform=linux/amd64 # arm64 的 docker image pull qiudaomao/mosdns:latest --platform=linux/arm64 # 导出 image docker image save qiudaomao/mosdns:latest -o mosdns.tar 

    然后将这个 tar 导入到 ros 就可以创建 container 了

    将之前 mosdns 配置 ipset 的地方用ros_addrlist插件代替,示例,需要 ros 上打开 ip/services 的 www 或者 www-ssl

    #example - tag: gfw-list type: sequence args: - matches: "!resp_ip $local_ip" exec: ros_addrlist https://192.168.23.1:443,admin,password,mosdns_gfwlist,inet,32 - exec: accept 

    这样产生代理 ip 时会写入到 ip/firewall/address-list 里

    /ip/firewall/address-list/pr ;;; [mosdns] domain: www.google.com.hk. 1 mosdns_gfwlist 142.250.157.199 2024-12-26 15:50:26 

    路由:

    在 routing/Tables 创建 fib 的 table 比如 sing-box

    ip/route 中将 0.0.0.0/0 route 到代理容器 sing-box 的 ip ,比如 192.168.23.4

    ip/firewall/mangle 中将 address list 为mosdns_gfwlist的 action mark routing 到 sing-box 表就完成路由设定了

    14 条回复    2025-03-16 18:04:56 +08:00
    v1
        1
    v1  
       294 天前
    感觉你这个需求直接 IP 分流?
    china-ip-list: https://github.com/mayaxcn/china-ip-list
    vibbow
        2
    vibbow  
       294 天前
    v1
        3
    v1  
       294 天前
    @vibbow 你这个多久没更新了? ipip 现在不免费不知道吗?
    onion83
        4
    onion83  
       294 天前
    1 、其实 ROS address-list 就是等价于 linux 中的 ipset ,不过 v4/v6 双栈需要分开来写而已。
    2 、利用 1 、2 楼提到的公共列表或者其它 BGP dump 、geoip dump ,加上一些自定义 IP 的白名单,可以合成自己最终的 cn address-list ,再配合 github 的 workflows 每周一 build 生成最终的 rsc 文件,release 到 github 制品仓库后,配合 ros 的计划任务直接 fetch 后 import 导入即可,这也算是人为制造一个场景熟悉 github 的 CI/CD 流程吧。

    核心代码参考:
    ```
    echo '/ip firewall address-list remove [/ip firewall address-list find list="cn"]' > $outfile

    for line n `cat myip.txt`;do
    ip=`echo $line |awk -F , '{print $1}'`
    comment=`echo $line |awk -F , '{print $2}'`
    commentstr=""
    if [ ! -z $comment ];then
    commentstr=`echo comment\=\"$comment\"`
    fi
    echo "do { /ip firewall address-list add list=cn address=$ip $commentstr } on-error={}" >> $outfile
    done
    ```
    vibbow
        5
    vibbow  
       294 天前
    @kk2syc ipip 这个这个基本就是一年更新一两次的
    nkcfc
        6
    nkcfc  
       294 天前
    有没有详细的完整方案呢?
    paperseller
        7
    paperseller  
       294 天前 via iPhone
    楼主的方案是类似旁路由 ospf 那种 cn 取反。楼上和我自己用的 ros 导入 cnip address lists 。我的方案:手动或定时任务导入 https://github.com/PaPerseller/chn-iplist/blob/master/cn.rsc ,旁路由 mosdns 解析后进入 ros 匹配,匹配上的直通,不匹配的进入旁路由走代理软件,在代理中也可再走一次分流
    fuzhuo233
        8
    fuzhuo233  
    OP
       294 天前
    用 mosdns 就是希望用一个自定义较小化的 gfwlist 域名白名单,而不是!cn cidr 这种黑名单,看个人选择吧
    SenLief
        9
    SenLief  
       293 天前
    现在不用这种 cn 库,更新的太慢,也不准,直接用 asn ,bgp 的要准很多。
    yyysuo
        10
    yyysuo  
       293 天前
    楼上诸位好像没太 get 到楼主的点,主要是做了一个动态的、个性化的分流; fakeip 分流不好么,只需要匹配一个 ip 段就行了,之前 passwall ssrp 之类的用 ipset ,也有 ipset 大了之后的效率问题。
    yyysuo
        11
    yyysuo  
       293 天前
    我倒是很想要一个输出域名列表为 txt 的功能,即 mosdns 判断过发 fakeip 的(或者是发过 real ip 不在列表中的),保存一个结果,下次就不用判断了,也可以同步域名列表到 github 分享给其它人用;不过目前的 lazy cache 也挺好用的,只是不能分享给别人。
    icy37785
        12
    icy37785  
       293 天前 via iPhone
    @yyysuo #10 不是楼上没 get 到楼主的点,是你没 get 到楼上的点,楼上跟楼主就是同一个目的的不同实现方式,只是各自觉得方便的标准不同,所以都觉得自己的方式更方便而已。
    yyysuo
        13
    yyysuo  
       289 天前
    受楼主启发,让 chatgpt 写了一个输出分流结果为规则文件的 mosdns 插件,用于实现 mosdns 的规则自维护。

    功能:
    1:启动时加载上次保存的查询统计结果,关闭时保存最新的查询统计结果。
    2:根据查询统计结果生成 mosdns 可用的域名规则列表。

    https://github.com/IrineSistiana/mosdns/discussions/866
    wugongde
        14
    wugongde  
       216 天前 via Android
    感谢楼主插件。
    这种人方式在透明网关下,对比 fakeip 更加灵活控制,域名解析结果可以控制哪些要走哪些不走。对比 cnip 表数量大幅度少,日常其实也就 500 来条
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     880 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:21 PVG 04:21 LAX 13:21 JFK 16:21
    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