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

6 月 30 日
 Debug1998

以下是我的配置:

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;

6253 次点击
所在节点    宽带症候群
45 条回复
jciba5n4y6u
7 月 1 日
我懒的折腾分流了,现在是直接在电脑上 tun 全局更省心。

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1224023

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX