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

27 天前
 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:~$  

期望

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

1169 次点击
所在节点    宽带症候群
27 条回复
Naples
27 天前
需要直连的境外 ip 或段,直接优先静态到 pppoe 就行,不需要标记的
povsister
27 天前
你只加路由表没用啊。。不加 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://v2ex.com/t/1039732
supemaomao
27 天前
@Naples 主要是在 list 里面可以直接写域名,如果静态路由只能写 ip 或者段,有点不太方便,所以才想着用 list 实现。
supemaomao
27 天前
@povsister 看了一下你帖子,感觉好复杂的样子,感觉是大佬的样子。
之所以没有 ip rule 是因为在 ROS 的文档中 https://help.mikrotik.com/docs/display/ROS/Policy+Routing#:~:text=It%20is%20not%20recommended%20to%20use%20both%20methods
对于策略路由的描述中,不建议混合使用路由标记与路由规则。所以我就没有这样用过。晚上试试加上 rule ,谢谢回复。
povsister
27 天前
@supemaomao
> 对于策略路由的描述中,不建议混合使用路由标记与路由规则。

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

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

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

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

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

ikuai 只写了简单的 两条规则 ,默认全部走 win7 香港出口 ,国内 ip 走 pppoe..
adg 用文件模式,gfw 域名 8888 解析,其他 223.5.5.5
0987363
27 天前
@supemaomao 挺麻烦的,我是 ros 加 op 双播,默认 op 网关,ros 的 dhcp 当 op 打开的时候就自动关闭
supemaomao
27 天前
@lcy630409 感谢回复,其实单就梯子用途的话,现在已经是正常使用的。只是强迫症会想着让自己更懒一点。哈哈 🤣🤣
supemaomao
27 天前
@0987363 感谢回复,哈哈 ,折腾嘛,总想找一个自己舒服的借口。
bao3
26 天前
静态路由的优先级比较高,所以你可以直接用指静态路由的方式来躲避动态路由的匹配
creepersssss
26 天前
你可以相信我的做法,设立两个隔离网段(同时分配新增路由表),做好两个网段互通,一个网段实行 ospf ,一个直通 pppoe ,ospf 宣告主机 op 放在直通网段,啪 好了。
terrancesiu
26 天前
如果你想部分 ip 的优先级高于 ospf ,在 rules 预埋策略路由即可。如果是 bgp 就直接找到 cidr 对应的 asn 写过滤策略和 set gw
flynaj
26 天前
一个 openwrt 就可以,用 mwan3 分流。
onion83
26 天前
@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://www.v2ex.com/t/1045357

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

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

© 2021 V2EX