请教, ROS 在使用 OSPF 进行分流的前提下,如何使用路由标记实现白名单功能。

2024-05-30 13:24:17 +08:00
 supemaomao

背景

ESXI 中安装了 ROS 与 OpenWrt,并且实现了 Op 通过 OSPF 下发路由表,使国外流量通过 OP 出口,内网流量直接通过 ROS 的 PPPoe 出口。

需求

部分国外地址,直接通过国内访问效果更好,比如巨硬相关的域名。所以需要实现一个白名单的功能,即虽然 OSPF 下发了这个地址需要通过 OP 出口,但是仍然通过 pppoe 直接出口。

尝试的措施

  1. 目前尝试通过路由标记,将需要白名单的地址放在了 ip/firewall/address-list 名为 DstallowGo 的 list 中

  2. 尝试标记 list 中的流量包

    chain=prerouting action=mark-routing new-routing-mark=white_list passthrough=no dst-address-list=DstallowGo in-interface-list=Lan log=no log-prefix=""

  3. 创建了如下的路由表

    As dst-address=0.0.0.0/0 routing-table=white_list pref-src="" gateway=pppoe-out1 immediate-gw=pppoe-out1 distance=5 scope=30 target-scope=10 suppress-hw-offload=no

    As dst-address=10.0.2.0/24 routing-table=white_list pref-src="" gateway=wireguard1 immediate-gw=wireguard1 distance=1 scope=30 target-scope=10 suppress-hw-offload=no

    As dst-address=192.168.2.0/24 routing-table=white_list pref-src="" gateway=bridge1 immediate-gw=bridge1 distance=1 scope=30 target-scope=10 suppress-hw-offload=no

  4. 检查 OSPF 默认的路由表,确保路由优先级,贴出一条 OSPF 的默认路由

    DAo dst-address=1.0.4.0/22 routing-table=main gateway=192.168.2.2%bridge1 immediate-gw=192.168.2.2%bridge1 distance=110 scope=20 target-scope=10 suppress-hw-offload=no

故障

上述设置完成后,在本地局域网访问特定的地址(即标记路由中的地址)总会提示连接重置。类似这样

ca@caserver:~$ curl -v 104.19.223.79
*   Trying 104.19.223.79:80...
* Connected to 104.19.223.79 (104.19.223.79) port 80 (#0)
> GET / HTTP/1.1
> Host: 104.19.223.79
> User-Agent: curl/7.81.0
> Accept: */*
> 
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer
ca@caserver:~$  

期望

想请求一下有哪些地方设置有问题吗?或者怎么实现最开始的需求。谢谢各位指点 第一次码字,有格式错误还请多包涵。

2170 次点击
所在节点    宽带症候群
27 条回复
Naples
2024-05-30 13:57:14 +08:00
需要直连的境外 ip 或段,直接优先静态到 pppoe 就行,不需要标记的
povsister
2024-05-30 14:07:47 +08:00
你只加路由表没用啊。。不加 IP rule 它又不会查询那个路由表
所以你还需要有一个 ip rule
/ip route rule add routing-mark=white_list interface=Lan action=lookup-only-in-table table=white_list

标记路由和主路由不在一个表里,你得加 rule 才行

另外你这个玩法其实我之前搞过,就是因为基于 IP 的规则很不方便,所以自己搓了基于域名的 OSPF 规则。
感兴趣可以来看看,基本原理和你这个一样的。
https://ex.noerr.eu.org/t/1039732
supemaomao
2024-05-30 14:27:29 +08:00
@Naples 主要是在 list 里面可以直接写域名,如果静态路由只能写 ip 或者段,有点不太方便,所以才想着用 list 实现。
supemaomao
2024-05-30 14:47:32 +08:00
@povsister 看了一下你帖子,感觉好复杂的样子,感觉是大佬的样子。
之所以没有 ip rule 是因为在 ROS 的文档中 https://help.mikrotik.com/docs/display/ROS/Policy+Routing#:~:text=It%20is%20not%20recommended%20to%20use%20both%20methods
对于策略路由的描述中,不建议混合使用路由标记与路由规则。所以我就没有这样用过。晚上试试加上 rule ,谢谢回复。
povsister
2024-05-30 15:26:52 +08:00
@supemaomao
> 对于策略路由的描述中,不建议混合使用路由标记与路由规则。

这样说是没错,但是你只用 firewall 的 mangle 去做了标记,然后又没添加另一个规则去处理这个标记,所以。。。
另外,记得在你自己建的 white_list 路由表中添加自己内网网段的静态路由,否则加 ip rule 后会出现回程无路由的情况
supemaomao
2024-05-30 15:44:03 +08:00
@povsister 原来是这样,那如果标记的表依然是 main 表是不是就不用添加路由规则去处理了,我 white_list 的路由表中已经添加了对于内网的出口了。
另外还有一个疑问想请教一下,我目前没添加路由规则的前提下,在局域网中使用 src 192.168.2.0/24 的网段会触发连接重置,但是当我使用 wg 连接至 ROS ,再访问特定的地址列表里面的域名服务时,就不触发连接重置。这是为什么呢?
yyysuo
2024-05-30 16:18:01 +08:00
用 fakeip 网关实现这种需求更简单些吧。
povsister
2024-05-30 18:34:14 +08:00
@supemaomao
> 标记的表依然是 main 表

按我理解是没有这种说法的,你都用标记路由了,那必然是为了某些情况不查询 main 路由表。

第二个问题没理解,双方对于术语的理解不同,你也没给拓扑。而且 RST 是 TCP 行为,路由表处理的是 IP 报文,这个得具体分析或者抓包看是最快的。
Dzsss
2024-05-30 21:37:47 +08:00
你那个做法是不彻底的,还要解决 DNS 污染问题。

其实一个 OP 就足够解决全部问题。如果没其它网络需求,没必要强加个 ROS + OSPF 。
supemaomao
2024-05-30 21:56:36 +08:00
@Dzsss 单 OP 的话,无法解决网络故障转移。如果梯子挂了,容易影响家里其他人上网。
supemaomao
2024-05-30 22:13:51 +08:00
@povsister 感谢回复,已经补充了简易的拓补图(不太会做拓扑图),和关于第二个问题的详细情况。
lcy630409
2024-05-30 22:16:17 +08:00
@supemaomao
gfw 模式不行么,翻墙这个东西 如果用的人不多 建议本机翻墙 不要在路由上搞

我目前是 ikuai+adg+win7 模式,win7 用来特殊协议连接外网 作为 ikuai 的出口

ikuai 只写了简单的 两条规则 ,默认全部走 win7 香港出口 ,国内 ip 走 pppoe..
adg 用文件模式,gfw 域名 8888 解析,其他 223.5.5.5
0987363
2024-05-30 23:03:59 +08:00
@supemaomao 挺麻烦的,我是 ros 加 op 双播,默认 op 网关,ros 的 dhcp 当 op 打开的时候就自动关闭
supemaomao
2024-05-31 00:00:11 +08:00
@lcy630409 感谢回复,其实单就梯子用途的话,现在已经是正常使用的。只是强迫症会想着让自己更懒一点。哈哈 🤣🤣
supemaomao
2024-05-31 00:01:18 +08:00
@0987363 感谢回复,哈哈 ,折腾嘛,总想找一个自己舒服的借口。
bao3
2024-05-31 02:29:38 +08:00
静态路由的优先级比较高,所以你可以直接用指静态路由的方式来躲避动态路由的匹配
creepersssss
2024-05-31 03:17:57 +08:00
你可以相信我的做法,设立两个隔离网段(同时分配新增路由表),做好两个网段互通,一个网段实行 ospf ,一个直通 pppoe ,ospf 宣告主机 op 放在直通网段,啪 好了。
terrancesiu
2024-05-31 09:08:42 +08:00
如果你想部分 ip 的优先级高于 ospf ,在 rules 预埋策略路由即可。如果是 bgp 就直接找到 cidr 对应的 asn 写过滤策略和 set gw
flynaj
2024-05-31 12:24:52 +08:00
一个 openwrt 就可以,用 mwan3 分流。
onion83
2024-05-31 22:30:10 +08:00
@supemaomao ROS 7.x 某个版本开始策略 Policy Routing 的优先级已经高于静态路由

1 、如 #2 所言,Routing / rule 的规则必须加,而且最好是 lookup only in table
2 、这 ip firewall 的 mangle 中 打完路由标后 Passthrough 的勾去掉,然后不再向下走。

参考: https://forum.mikrotik.com/viewtopic.php?t=186638

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

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

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

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

© 2021 V2EX