Debug1998

RouterOS + OSPF 分离 求助帖, ROS 可以学习到路由,但是没有网络。

  •  
  •   Debug1998 · Jun 30 · 4375 views

    以下是我的配置:

    bird2

    [root@Kwrt:07:21 PM ~] # cat /etc/bird.conf log syslog all; router id 192.168.9.254;

    protocol device { scan time 10; }

    protocol kernel { ipv4 { import all; export all; }; }

    protocol direct { interface "br-lan"; }

    protocol static foreign { ipv4; include "/root/foreign.conf"; }

    protocol ospf v2 ospf1 { ipv4 { import all; export where source = RTS_STATIC && net != 0.0.0.0/0; }; area 0.0.0.0 { interface "br-lan" { type ptp; hello 10; dead 40; }; }; }

    ROS 学习到的 address:

    AI 说因为学习到了 0.0.0.0 导致的。 [root@Kwrt:08:05 PM ~] # birdc show route | grep 0.0.0.0 150.0.0.0/16 unreachable [foreign 19:11:31.576] * (200) 60.0.0.0/13 unreachable [foreign 19:11:31.576] * (200) 120.0.0.0/12 unreachable [foreign 19:11:31.576] * (200)

    路由表生成配置

    cat > /root/generate_foreign.sh << 'EOF' #!/bin/bash

    生成国外路由表( BIRD static 格式) - 纯 Shell 版

    CHINA_URL="https://raw.githubusercontent.com/mayaxcn/china-ip-list/master/chnroute.txt" FOREIGN_FILE="/root/foreign.conf" TMP_CHINA="/tmp/china.tmp"

    echo "=== 下载最新国内 IP 列表 ===" curl -s -L -o "$TMP_CHINA" "$CHINA_URL" if [ $? -ne 0 ] || [ ! -s "$TMP_CHINA" ]; then echo "下载失败!" exit 1 fi

    echo "=== 生成国外路由表(取反)===" cat > "$FOREIGN_FILE" << HEADER

    Foreign (non-China) routes generated at $(date -R)

    protocol static foreign { HEADER

    awk '!/^#/ && NF>0 { print " route " $1 " reject;" }' "$TMP_CHINA" >> "$FOREIGN_FILE"

    echo "}" >> "$FOREIGN_FILE"

    echo "生成完成!国外路由文件: $FOREIGN_FILE" echo "路由条目数量: $(wc -l < "$FOREIGN_FILE")" rm -f "$TMP_CHINA" EOF

    [root@Kwrt:04:37 PM ~] # head -20 /root/foreign.conf

    Foreign (non-China) routes generated at Tue, 30 Jun 2026 16:37:29 +0800

    protocol static foreign { route 1.0.1.0/24 reject; route 1.0.2.0/23 reject; route 1.0.8.0/21 reject; route 1.0.32.0/19 reject; route 1.1.0.0/24 reject; route 1.1.2.0/23 reject; route 1.1.4.0/22 reject; route 1.1.8.0/24 reject; route 1.1.9.0/24 reject; route 1.1.10.0/23 reject; route 1.1.12.0/22 reject; route 1.1.16.0/20 reject; route 1.1.32.0/19 reject; route 1.2.0.0/23 reject; route 1.2.2.0/24 reject; route 1.2.4.0/24 reject; route 1.2.5.0/24 reject; route 1.2.6.0/23 reject;

    Supplement 1  ·  9 days ago
    给各位精神股东汇报下最新进展:
    1. OSPF 方案太麻烦,对非网工出身的我是个挑战,遂转容器 mosdns 分流方案
    2. 我的设备是 E50UG ,用 armv7 的 mosdns tar 包,CPU 不支持指令集
    3. 在尝试我的 X86 Nas 在 docker 里运行 mosdns
    4. openwrt 安装 mosdns 方案未遂,passwall 不知如何配置
    以上;
    未完待续
    2026.07.06 21:37
    45 replies    2026-07-13 15:15:20 +08:00
    jciba5n4y6u
        1
    jciba5n4y6u  
       15 days ago
    我懒的折腾分流了,现在是直接在电脑上 tun 全局更省心。

    蹲 op 主的进展,看看后续能不能抄作业。
    LaoLeyuan
        2
    LaoLeyuan  
       14 days ago
    我也折腾过分流,但是一旦网络出问题,很难确定是自己的分流策略出了问题还是🪜节点出了问题,弄来弄去发现只是折腾自己,现在已经退烧了。
    Debug1998
        3
    Debug1998  
    OP
       14 days ago
    @LaoLeyuan 感觉精力没榨干,这几天。
    chiikawa
        4
    chiikawa  
       14 days ago
    开了 IP 转发没。。
    sysctl -w net.ipv4.ip_forward=1
    sysctl -p
    daxy223
        5
    daxy223  
       14 days ago via iPhone
    楼上正解
    Debug1998
        6
    Debug1998  
    OP
       14 days ago
    @chiikawa @daxy223 IP 转发是开了的。现在 ROS 学到了路由,openwrt 开启了 passwall ,但是百度可以访问,google 无法访问。
    PerFectTime
        7
    PerFectTime  
       14 days ago
    我直接起一个透明网关,设置 VLAN ,把指定的 VLAN 流量走透明网关,主路由就不搞这些分流的事情
    chiikawa
        8
    chiikawa  
       14 days ago
    @Debug1998 #6 旁路自己本身 google 能不能访问,bird 指向的网卡得是 tun 的网卡
    Debug1998
        9
    Debug1998  
    OP
       13 days ago
    @chiikawa #8 没看懂,bird 指向的 openwrt 网卡需要是 tun 虚拟网卡?我现在 bird conf 配置里是 br-lan
    chiikawa
        10
    chiikawa  
       13 days ago
    @Debug1998 #9 我的配置你自己参考吧
    Debug1998
        11
    Debug1998  
    OP
       13 days ago
    @chiikawa #10 谢谢大佬。
    Debug1998
        12
    Debug1998  
    OP
       13 days ago
    @chiikawa #10 AI 给的方案我基本上推翻重来了,现在是根据这篇博客来的,还差最后一步 避免路由环路配置就完成了,下班配置完试试效果。
    地址: https://deeprouter.org/article/routeros-ospf-intelligent-traffic-split
    feisualio
        13
    feisualio  
       13 days ago
    学习一下,之前折腾 router 和 opnsense 差不多两年多,规则的维护需要过多精力...
    现在完全回归 ikuai ,最多 acl 简单处理下,剩下的都在设备端完成分流。
    Debug1998
        14
    Debug1998  
    OP
       13 days ago
    @feisualio @LaoLeyuan 感觉精力被榨干,太累了,好不容易整成功了,还得排查国外网络慢的问题,太难了。
    sm1314
        15
    sm1314  
       13 days ago
    在用 opnsense ,本来打算折腾 ospf/bgp 分流的,但是经过调研后还是觉得路由这块不可控的因素太多,最后用了更轻量的方案: mosdns+openvpn+多 vlan+ssid 绑定实现。好处是简单稳定可靠,并且自动分流只对 某个 vlan 及其绑定的 ssid 生效,即使海外节点网络波动不影响主网络,目前稳定运行一年。
    Debug1998
        16
    Debug1998  
    OP
       13 days ago
    @sm1314 用 opnsense 是高手啊。OSPF 太折腾人了,我不是专业网工,基础知识比较差。不行后续索性 openwrt 好了。
    thereone
        17
    thereone  
       12 days ago
    用 BGP 和 OSPF 有些意义不明,特别是这种取反的灌入一堆国外路由条目。一定要搞的话为何不用 BGP ,旁路发国内路由给 routeros 然后设置下一跳为 pppoe 直连,BGP 发过来的默认路由高于本地 routeos 的出口。实现国内走明细出口,非国内默认走旁路。旁路要把 NAT 打开同时主路由要把旁路的 IP 地址设置强制走 routeros 本地出口防止又发回旁路了。
    当然我是不推荐这个的,最简单的就是你的 routeos 和旁路做个 vrrp 就行了,旁路由不要使用 nat 然后开启代理插件,代理插件里面绕过国内 IP 表这样就 OK 了。当拔掉旁路网线后 vrrp 的 vip 自动切换回 routeos 上面走直连,还有可以联动旁路由的 vrrp 的 track 脚本实现代理挂了自动降低优先级网关切回 routeos 上面。实现完全无感。
    还可以多个旁路跑 vrrp ,挂一个就切一个直到代理全挂了最后回到 routeos 上面走直连。
    Debug1998
        18
    Debug1998  
    OP
       12 days ago
    @thereone 出问题对非专业网工来说,有点难排查。在考虑其他方案,如 RouterOS 的容器上跑个 MosDNS ,国内直接走 RouterOS,国外走 Openwrt 。
    ddczl
        19
    ddczl  
       12 days ago   ❤️ 1
    我之前有用 BGP 和 OSPF ,但是维护排查成本太大了。现在用这个方案:

    1. RouterOS 配置 FakeIP 路由表下一跳网关旁路网关 IP
    2. Adguard Home 做域名判断,国内走公共 DNS 查询,国外走 mihomo 查询;
    3. 设备只需要 DNS 指向 Adguard Home 即可。

    用到的资源:
    https://github.com/AdguardTeam/Adguardhome
    https://github.com/juewuy/ShellCrash

    这样可以做到很薄的一层,也方便排查,Adguard Home 与 mihomo 在一个机器上,资源占用也比较少。
    ddczl
        20
    ddczl  
       12 days ago
    接上面,嫌麻烦 Adguard Home 都不需要安装,ShellCrash 基本满足 DNS 的分域名查询
    xy323527470
        21
    xy323527470  
       11 days ago
    这是家用的还是啥,路由条目小全部手动静态就完了搞啥动态路由协议去。bgp 这都已经是专门给 as 自治域用的玩意儿了,普通人咋用得到这种东西。。
    xy323527470
        22
    xy323527470  
       11 days ago
    小点的动态路由量,用 rip 协议不就够了,设置还简单。上什么 ospf ,这不是公司用的么
    daxy223
        23
    daxy223  
       10 days ago
    @chiikawa 正解,同样的配置方法 :P
    Debug1998
        24
    Debug1998  
    OP
       9 days ago
    @ddczl #19 以前我觉得 ADH 比较鸡肋,因为通过 DNS 的形式去广告效果有限,原来它还能这样玩。
    @xy323527470 #21 OSPF 、bgp 还是太重了。
    ddczl
        25
    ddczl  
       9 days ago
    @Debug1998 我这个方案跑 4 年了,后来 AI 出来了也问了 AI 。对于我们家庭用户,AI 也比较推荐我这个方案。因为确实稳定,FakeIP 段就一个,RouterOS 查询几乎没性能开销。

    用 AGH 纯粹是家里服务较多,需要重写 IP ,没有这个需求直接把 AGH 去掉,直接用 ShellCrash ,它已经做了域名分情况查询
    Debug1998
        26
    Debug1998  
    OP
       9 days ago
    @ddczl #20 ShellCrash 装到 openwrt 上,ROS 的 DNS 指向旁路由 IP 就可以了?
    ddczl
        27
    ddczl  
       9 days ago
    @Debug1998 ShellCrash 别装 OpenWrt ,装 Alpine linux 最合适,其他 Linux 系统都可以。这样是最纯净的,不然出问题你都不知道该如何排查
    Debug1998
        28
    Debug1998  
    OP
       9 days ago
    @ddczl #27 这个方案简化的话,就是需要 RouterOS 配置一个路由表,解析出 192.18.0.0 的 FakeIP 就下一跳到旁路网关,其次需要一个能返回 FakeIP 的服务就可以了吧?
    ddczl
        29
    ddczl  
       9 days ago
    @Debug1998 是的 ShellCrash 返回的 ipv4 和 ipv6 两个 FakeIP ,可以关掉 ipv6
    Debug1998
        30
    Debug1998  
    OP
       9 days ago
    @ddczl #29 好的,这个方案不能用 passwall 这种软件做 fakeIP 吧,这样相当于所有流量都走了旁路网关。
    ddczl
        31
    ddczl  
       9 days ago
    @Debug1998 讲道理你如果用 OpenWrt 的体系,OpenWrt 开启旁路网关模式,不装 ShellCrash 也是一样的,你可以先用 OpenWrt 试试,你也更熟悉一点。

    我最开始就是用的 OpenWrt 体系,但是用一段时间不稳定。我就换成了 ShellCrash 。
    Debug1998
        32
    Debug1998  
    OP
       9 days ago
    @ddczl #31 好,谢谢大佬提供的思路。
    Debug1998
        33
    Debug1998  
    OP
       8 days ago
    @ddczl #31 现在 shellcrash 已经跑起来了,订阅也配置好了,我在路由器 ping google.com 是不通的,是我配置有问题吗?
    ddczl
        34
    ddczl  
       8 days ago
    @Debug1998 用 tracert www.google.com 看看,重启了 ShellCrash 后,记得使用 chrome://net-internals/#events 清除 DNS 缓存
    Debug1998
        35
    Debug1998  
    OP
       8 days ago
    @ddczl #34 好嘞,谢谢。目前规则还有点问题,国内的网站会走漏网之鱼,不过我把这个改成直连了,目前能用。
    ddczl
        36
    ddczl  
       8 days ago   ❤️ 1
    @Debug1998 你这个规则太简单了,你用 ShellCrash 的生成,生成规则选第一个,同时进入面板后台设置中,把面板升级到最新(点一下即可)
    Debug1998
        37
    Debug1998  
    OP
       8 days ago
    @ddczl #36 好嘞,谢谢。我早上把规则改成机场自带的了。我现在还没做 ROS 的分流,只是需要出墙的设备默认先指向旁路由,手机没有指向旁路由,但是公众号、苹果自带的天气、米家 app 刷不到数据,下班我再排查下问题吧,感觉是 DNS 的问题。
    ddczl
        38
    ddczl  
       8 days ago
    @Debug1998 反正注意不要把国内域名也响应 FakeIP ,ShellCrash 当前版本是做了区分的,如果弄不好直接用 AGH 做域名判断。
    国外 127.0.0.1:1053
    国内 223.5.5.5

    Github 有专门的这个文件,但需要 shell 脚本调整一些东西,但有 AI 都不是事
    Debug1998
        39
    Debug1998  
    OP
       8 days ago
    @ddczl #38 国内是正常 IP ,国外是 FakeIP,AGH 我还没加,目前是 ros+agh 。我先研究研究 ros+agh+shellcrash 这套流程。
    Debug1998
        40
    Debug1998  
    OP
       8 days ago
    @ddczl #38 手机公众号 天气等无法访问我怀疑是这个配置的原因,虽然手机没显式指向旁路由,但是旁路由主动获取局域网下的请求,手机还是走了旁路由,访问了错误的规则。
    ddczl
        41
    ddczl  
       8 days ago
    我家的情况是,Tproxy ,Tun 模式有问题我找不到原因。
    核心我用的 mihomo
    Debug1998
        42
    Debug1998  
    OP
       8 days ago
    @ddczl #41 我切换成了 TProxy ,没启动成功,报错:当前设备内核可能缺少 kmod_ipt_tproxy 模块支持,已放弃启动相关规则!
    我看 github 正好有这个 issues 。
    https://github.com/juewuy/ShellCrash/issues/1279
    Debug1998
        43
    Debug1998  
    OP
       8 days ago
    @ddczl #41 从 iptables 切换到 nptables ,opkg install kmod-ipt-tproxy ip-full ,就好了。哈哈
    yangjin3251
        44
    yangjin3251  
       2 days ago
    我看你图片设置 你 backbone 自己设置黑洞了啊,怎么可能有网
    Debug1998
        45
    Debug1998  
    OP
       2 days ago
    @yangjin3251 通过 FakeIP 实现分流了,谢谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: d3e9c8b8 · 64ms · UTC 05:07 · PVG 13:07 · LAX 22:07 · JFK 01:07
    ♥ Do have faith in what you're doing.