Debug1998

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

  •  
  •   Debug1998 · Jun 30 · 4118 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  ·  5 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
    43 replies    2026-07-08 10:59:56 +08:00
    jciba5n4y6u
        1
    jciba5n4y6u  
       10 days ago
    我懒的折腾分流了,现在是直接在电脑上 tun 全局更省心。

    蹲 op 主的进展,看看后续能不能抄作业。
    LaoLeyuan
        2
    LaoLeyuan  
       10 days ago
    我也折腾过分流,但是一旦网络出问题,很难确定是自己的分流策略出了问题还是🪜节点出了问题,弄来弄去发现只是折腾自己,现在已经退烧了。
    Debug1998
        3
    Debug1998  
    OP
       10 days ago
    @LaoLeyuan 感觉精力没榨干,这几天。
    chiikawa
        4
    chiikawa  
       9 days ago
    开了 IP 转发没。。
    sysctl -w net.ipv4.ip_forward=1
    sysctl -p
    daxy223
        5
    daxy223  
       9 days ago via iPhone
    楼上正解
    Debug1998
        6
    Debug1998  
    OP
       9 days ago
    @chiikawa @daxy223 IP 转发是开了的。现在 ROS 学到了路由,openwrt 开启了 passwall ,但是百度可以访问,google 无法访问。
    PerFectTime
        7
    PerFectTime  
       9 days ago
    我直接起一个透明网关,设置 VLAN ,把指定的 VLAN 流量走透明网关,主路由就不搞这些分流的事情
    chiikawa
        8
    chiikawa  
       9 days ago
    @Debug1998 #6 旁路自己本身 google 能不能访问,bird 指向的网卡得是 tun 的网卡
    Debug1998
        9
    Debug1998  
    OP
       9 days ago
    @chiikawa #8 没看懂,bird 指向的 openwrt 网卡需要是 tun 虚拟网卡?我现在 bird conf 配置里是 br-lan
    chiikawa
        10
    chiikawa  
       9 days ago
    @Debug1998 #9 我的配置你自己参考吧
    Debug1998
        11
    Debug1998  
    OP
       9 days ago
    @chiikawa #10 谢谢大佬。
    Debug1998
        12
    Debug1998  
    OP
       9 days ago
    @chiikawa #10 AI 给的方案我基本上推翻重来了,现在是根据这篇博客来的,还差最后一步 避免路由环路配置就完成了,下班配置完试试效果。
    地址: https://deeprouter.org/article/routeros-ospf-intelligent-traffic-split
    feisualio
        13
    feisualio  
       9 days ago
    学习一下,之前折腾 router 和 opnsense 差不多两年多,规则的维护需要过多精力...
    现在完全回归 ikuai ,最多 acl 简单处理下,剩下的都在设备端完成分流。
    Debug1998
        14
    Debug1998  
    OP
       9 days ago
    @feisualio @LaoLeyuan 感觉精力被榨干,太累了,好不容易整成功了,还得排查国外网络慢的问题,太难了。
    sm1314
        15
    sm1314  
       8 days ago
    在用 opnsense ,本来打算折腾 ospf/bgp 分流的,但是经过调研后还是觉得路由这块不可控的因素太多,最后用了更轻量的方案: mosdns+openvpn+多 vlan+ssid 绑定实现。好处是简单稳定可靠,并且自动分流只对 某个 vlan 及其绑定的 ssid 生效,即使海外节点网络波动不影响主网络,目前稳定运行一年。
    Debug1998
        16
    Debug1998  
    OP
       8 days ago
    @sm1314 用 opnsense 是高手啊。OSPF 太折腾人了,我不是专业网工,基础知识比较差。不行后续索性 openwrt 好了。
    thereone
        17
    thereone  
       8 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
       8 days ago
    @thereone 出问题对非专业网工来说,有点难排查。在考虑其他方案,如 RouterOS 的容器上跑个 MosDNS ,国内直接走 RouterOS,国外走 Openwrt 。
    ddczl
        19
    ddczl  
       8 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  
       8 days ago
    接上面,嫌麻烦 Adguard Home 都不需要安装,ShellCrash 基本满足 DNS 的分域名查询
    xy323527470
        21
    xy323527470  
       7 days ago
    这是家用的还是啥,路由条目小全部手动静态就完了搞啥动态路由协议去。bgp 这都已经是专门给 as 自治域用的玩意儿了,普通人咋用得到这种东西。。
    xy323527470
        22
    xy323527470  
       7 days ago
    小点的动态路由量,用 rip 协议不就够了,设置还简单。上什么 ospf ,这不是公司用的么
    daxy223
        23
    daxy223  
       6 days ago
    @chiikawa 正解,同样的配置方法 :P
    Debug1998
        24
    Debug1998  
    OP
       5 days ago
    @ddczl #19 以前我觉得 ADH 比较鸡肋,因为通过 DNS 的形式去广告效果有限,原来它还能这样玩。
    @xy323527470 #21 OSPF 、bgp 还是太重了。
    ddczl
        25
    ddczl  
       5 days ago
    @Debug1998 我这个方案跑 4 年了,后来 AI 出来了也问了 AI 。对于我们家庭用户,AI 也比较推荐我这个方案。因为确实稳定,FakeIP 段就一个,RouterOS 查询几乎没性能开销。

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

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

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