[教程] 使用 RouterOS, OSPF 和树莓派为国内外 IP 智能分流

2020-12-29 02:26:45 +08:00
 dndx

对于 RouterOS 的用户们,谈到国内外智能分流都是泪。这种 OpenWRT 可以很简单的完成的任务在 RouterOS 上基本上都需要用策略路由这种杀鸡用牛刀的方式来进行。另外,PBR 还有很多缺点,比如更新起来麻烦(一不小心 CLI 也可能搞坏路由器配置),而且没有健康检查,如果旁路由断网或者掉电 RouterOS 还是会傻傻的把流量转发过去,结果就是旁路由一挂国外 IP 全部不通。

这篇问题记录了我在 RouterOS 上通过 OSPF 协议把国外的流量动态拉取到旁路由上的配置过程。这样也算是让 RouterOS 干最擅长的工作。而路由的动态更新也可以直接在旁路由上完成。文章里面包含了 IPv4 和 IPv6 的配置。

根据一个月来的实验,效果非常好,中间有两次隧道断线,BIRD 都成功的检测到了故障,及时的从主路由 withdraw announcement,这样最起码国外 IP 还是通的。

全文在此:https://idndx.com/use-routeros-ospf-and-raspberry-pi-to-create-split-routing-for-different-ip-ranges/

这个文章只侧重了 3 层的分流,对于比如 DNS 污染就没有讨论,所以不是一个完整的解决方案。反正架设无污染的 DNS 方法网上一搜一大把,就不值得再写一遍了。

20612 次点击
所在节点    宽带症候群
57 条回复
chinni
2021-04-08 11:42:17 +08:00
我 linux 下 bird 配置好了,route 检查也没问题了 但是我 ros 上 设置了 OSPF 后 没有得到 neighbor 。
网络是 ROS 主路由 MikrotikAC2 做 ap,所有端口都桥一起了。 我 linux 接在 AC2 后 网段是同一个网段。
请问会是啥问题。。。
dndx
2021-04-08 12:00:44 +08:00
@chinni 按照文章里的配置建议检查一下 `/routing ospf instance` `/routing ospf interface` `/routing ospf network` 。确保 IP 和 ID 符合实际配置。

另外可以 `sudo bird show protocols` 看一下 BIRD 的具体状态显示的是什么。
chinni
2021-04-08 13:54:33 +08:00
@dndx
大佬 我这里的返回贴一下。麻烦帮忙看下 方便的话 可以加我 profile 里的 tg 谢谢
```
birdc show protocols
BIRD 2.0.8 ready.
Name Proto Table State Since Info
kernel1 Kernel master4 up 10:54:51.242
device1 Device --- up 10:54:51.242
static1 Static master4 up 10:54:51.242
ospf1 OSPF master4 up 10:54:51.242 Alone
```

```
/routing ospf> instance print
Flags: X - disabled, * - default
0 * name="default" router-id=192.168.11.1 distribute-default=never
redistribute-connected=no redistribute-static=no redistribute-rip=no
redistribute-bgp=no redistribute-other-ospf=no metric-default=1 metric-connected=20
metric-static=20 metric-rip=20 metric-bgp=auto metric-other-ospf=auto
in-filter=ospf-in out-filter=ospf-out

```


```
/routing ospf> interface print
Flags: X - disabled, I - inactive, D - dynamic, P - passive
# INTERFACE COST PRIORITY NETWORK-TYPE AUTHENTICATION AUTHENTICATION-KEY
0 br-lan 10 1 broadcast none
```

我这里 bird 里配置也是没有认证的所以这里是 none

```
/routing ospf> network print
Flags: X - disabled, I - invalid
# NETWORK AREA
0 192.168.11.0/24 backbone
```
dndx
2021-04-09 15:55:38 +08:00
BIRD 显示 Alone 说明没有找到邻居。再检查一下接口配置确认是对的。
adoal
2021-06-10 00:18:01 +08:00
ipset 的好处是可以到 dnsmasq 后面,根据 gfw2dnsmasq 转出的遇难域名列表来动态加到要走隧道的清单。当然 dnsmasq+ipset 在 ROS 上就没办法了,要 EdgeRouter 或者 OpenWRT 或者正常的 Linux 发行版。

当然,从楼主贴的链接里看,楼主更看重的是,哪怕没遇难的外国网段,走隧道也大多比直连快一些。

但对我等穷人来说,国外流量都走隧道的话,那首先要找又便宜又快又稳定又不会在 3 月 6 月 10 月等特殊时期卡顿的隧道……这是个大难题。国外的机子,不管是什么线路,总是会不可控的卡顿。而 UOVZ 之类的,又死贵。
dudulangjiao
2021-08-31 21:41:16 +08:00
@dndx 楼主,麻烦问一下,如果旁路由是 openwrt 的,不是树莓派的,可以用这个方案吗?
dndx
2021-08-31 22:15:35 +08:00
@dudulangjiao 可以,OpenWrt 本质上就是 Linux,BIND 这些肯定都是有包的。
dudulangjiao
2021-09-03 01:09:42 +08:00
@dndx 谢谢
xuesumin
2021-09-09 13:54:30 +08:00
下载了以后 make 即可生成国外 IP 地址的路由表。注意如果树莓派上的隧道连接的是国外的 IP,那么需要从生成的 IP 段里剔除,否则隧道的流量也会被 RouterOS 发给树莓派,形成路由环路。可以参考 README.md 的说明通过 --exclude 选项把这些不应该走隧道的 IP 排除。
注意如果树莓派上的隧道连接的是国外的 IP ?这句话是啥意思?我旁路由是 openwrt,科学上网是机场,好多节点
谢谢!
dndx
2021-09-10 23:49:16 +08:00
@xuesumin 如果你需要连接国外的 IP 来建立隧道,那么必须把这些 IP exclude 掉,这样这些流量不会被发往隧道,不然你的隧道连接会无法建立。
xuesumin
2021-09-12 11:03:06 +08:00
@dndx 明白了,谢谢!
xxb
2022-04-28 16:14:55 +08:00
不错,有空试试
aoxiangtianji
2022-06-07 22:58:09 +08:00
@dndx 我是 ROS+openwrt 的配置,openwrt 用 openclash tun 模式建立隧道。有没有可能在 ROS 上设置,使 openwrt 走一个仅有默认路由的空路由表,来让 openclash 再分一遍流? IP 分流表总不是特别准确,而且也能达到节省隧道流量的效果。
creepersssss
2024-04-21 17:10:32 +08:00
@dndx 希望可以更新一下,将 bird4.conf 的 export all 注释掉,OSPF 宣布机器就不会添加路由表,就可以进行二次分流了
creepersssss
2024-04-21 17:12:09 +08:00
@xuesumin 将 bird4 的 export all 注释掉后广播机里就不会有路由,OSPF 广播机器放在 ROS 的另一个 passthrough 网段中,就不用 exclude ,也不会回环
garryforreg420
2024-05-10 13:50:32 +08:00
更合适的方法是 openwrt 旁路由用 fakeip 模式,域名解析全部交给 openwrt,需要分流的域名会返回 fakeip,在 routeros 上做个路由规则,把 fakeip 段路由回 openwrt,这样 routeros 完全不用搞什么动态路由了,要分流的自动交给 openwrt 上的 openclash 了。
garryforreg420
2024-05-10 13:52:37 +08:00
@aoxiangtianji 用 fakeip

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

https://ex.noerr.eu.org/t/739809

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

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

© 2021 V2EX