[教程] 使用 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 方法网上一搜一大把,就不值得再写一遍了。

18867 次点击
所在节点    宽带症候群
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
211 天前
@dndx 希望可以更新一下,将 bird4.conf 的 export all 注释掉,OSPF 宣布机器就不会添加路由表,就可以进行二次分流了
creepersssss
211 天前
@xuesumin 将 bird4 的 export all 注释掉后广播机里就不会有路由,OSPF 广播机器放在 ROS 的另一个 passthrough 网段中,就不用 exclude ,也不会回环
garryforreg420
192 天前
更合适的方法是 openwrt 旁路由用 fakeip 模式,域名解析全部交给 openwrt,需要分流的域名会返回 fakeip,在 routeros 上做个路由规则,把 fakeip 段路由回 openwrt,这样 routeros 完全不用搞什么动态路由了,要分流的自动交给 openwrt 上的 openclash 了。
garryforreg420
192 天前
@aoxiangtianji 用 fakeip

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

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

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

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

© 2021 V2EX