V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
supemaomao
V2EX  ›  宽带症候群

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

  •  
  •   supemaomao · 2024-05-30 13:24:17 +08:00 · 2137 次点击
    这是一个创建于 386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    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:~$  
    

    期望

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

    第 1 条附言  ·  2024-05-30 22:12:46 +08:00

    网络拓扑

    网络拓扑.png

    补充新情况

    在做了主题正文的操作后,当我通过wg的设备访问list中的地址时,是可以正常做到白名单的情况。

    比如当我把 whatismyipaddress.com 这个地址放进list中时,通过wg的设备访问这个网页,会显示国内的ip地址, 但是当交换机下的电脑访问时,会提示连接重置。

    当我在list中禁用这个地址时,wg与交换机下的电脑访问该域名都会显示梯子的ip信息。

    第 2 条附言  ·  2024-06-03 15:22:03 +08:00

    已经解决,补充一下方案以及原因

    原因

    防火墙使用了fast-track 导致了mark-routing的数据包无法被防火墙捕获,而触发连接重置。

    解决方案

    1. 如果不在乎性能关闭fast-track即可(关闭后需要重启)。
    2. 先根据地址列表,先使用mark-connection,再根据new-mark-connection 去进行mark-routing。在fatk-track的防火墙规则中Connection Mark 选择no-mark (这个解决方案OP还没测试,但是思路是这样的)。
    27 条回复    2024-06-06 11:44:19 +08:00
    Naples
        1
    Naples  
       2024-05-30 13:57:14 +08:00 via Android   ❤️ 1
    需要直连的境外 ip 或段,直接优先静态到 pppoe 就行,不需要标记的
    povsister
        2
    povsister  
       2024-05-30 14:07:47 +08:00   ❤️ 1
    你只加路由表没用啊。。不加 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
        3
    supemaomao  
    OP
       2024-05-30 14:27:29 +08:00
    @Naples 主要是在 list 里面可以直接写域名,如果静态路由只能写 ip 或者段,有点不太方便,所以才想着用 list 实现。
    supemaomao
        4
    supemaomao  
    OP
       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
        5
    povsister  
       2024-05-30 15:26:52 +08:00
    @supemaomao
    > 对于策略路由的描述中,不建议混合使用路由标记与路由规则。

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

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

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

    其实一个 OP 就足够解决全部问题。如果没其它网络需求,没必要强加个 ROS + OSPF 。
    supemaomao
        10
    supemaomao  
    OP
       2024-05-30 21:56:36 +08:00
    @Dzsss 单 OP 的话,无法解决网络故障转移。如果梯子挂了,容易影响家里其他人上网。
    supemaomao
        11
    supemaomao  
    OP
       2024-05-30 22:13:51 +08:00
    @povsister 感谢回复,已经补充了简易的拓补图(不太会做拓扑图),和关于第二个问题的详细情况。
    lcy630409
        12
    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
        13
    0987363  
       2024-05-30 23:03:59 +08:00 via iPhone
    @supemaomao 挺麻烦的,我是 ros 加 op 双播,默认 op 网关,ros 的 dhcp 当 op 打开的时候就自动关闭
    supemaomao
        14
    supemaomao  
    OP
       2024-05-31 00:00:11 +08:00
    @lcy630409 感谢回复,其实单就梯子用途的话,现在已经是正常使用的。只是强迫症会想着让自己更懒一点。哈哈 🤣🤣
    supemaomao
        15
    supemaomao  
    OP
       2024-05-31 00:01:18 +08:00
    @0987363 感谢回复,哈哈 ,折腾嘛,总想找一个自己舒服的借口。
    bao3
        16
    bao3  
       2024-05-31 02:29:38 +08:00
    静态路由的优先级比较高,所以你可以直接用指静态路由的方式来躲避动态路由的匹配
    creepersssss
        17
    creepersssss  
       2024-05-31 03:17:57 +08:00 via iPhone
    你可以相信我的做法,设立两个隔离网段(同时分配新增路由表),做好两个网段互通,一个网段实行 ospf ,一个直通 pppoe ,ospf 宣告主机 op 放在直通网段,啪 好了。
    terrancesiu
        18
    terrancesiu  
       2024-05-31 09:08:42 +08:00 via iPhone
    如果你想部分 ip 的优先级高于 ospf ,在 rules 预埋策略路由即可。如果是 bgp 就直接找到 cidr 对应的 asn 写过滤策略和 set gw
    flynaj
        19
    flynaj  
       2024-05-31 12:24:52 +08:00 via Android
    一个 openwrt 就可以,用 mwan3 分流。
    onion83
        20
    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
    povsister
        21
    povsister  
       2024-06-01 21:40:43 +08:00
    今天算是把这坑美美的踩了一遍,之前朋友警告我说慎用 mark routing ,会和 fasttrack 撞起来。。今天给我现场撞死,查了一下午麻了。
    OP 你这个问题,你看看把 filter 里的 fasttrack 规则关掉是不是就好了。

    策略路由可以正常被 fasttrack ,mark routing 在 fasttrack 开启的情况下几乎不能正常工作,需要配合 mark connection 才行,建议 fasttrack 最好只工作在 no-mark 的连接上。
    https://forum.mikrotik.com/viewtopic.php?f=2&t=134048&p=659612#p659676

    总结,你这个问题简单,不要用 firewall 的 mark-routing 了,直接 ip rule 写策略路由即可
    supemaomao
        22
    supemaomao  
    OP
       2024-06-03 14:34:40 +08:00
    @povsister 确实如此,我禁用了 filter 中的 fasttrack 以后,重启。其它任何变动都不做。
    我的 mark-routing 就可以正常工作了,可以通过这个做白名单了。
    不用 ip rule 写策略的原因是,有很多地址是域名。在 ip rule 里面要自己解析以后 写 ip ,多了一个操作。
    我在研究一下搭配 mark-connection 并开启 fast-track 的情况下如何实现这个需求。感谢踩坑哈哈。
    povsister
        23
    povsister  
       2024-06-03 14:50:54 +08:00
    @supemaomao
    ip rule 是可以针对于来源 IP 写规则的,一般可以用来豁免某个内网设备走特殊逻辑。
    但你要求是在目的 IP 里开白这个确实不太方便,得在防火墙上操作。

    搭配 mark connection 的操作我上面贴的 mikrotik 的论坛帖子里有讲到,主要是 fasttrack 要明确应用于 no-mark 的连接,然后先 mark connection ,再 mark routing 就 ok 了。

    我昨天试了下是可以的,但我现在用的方案 mark routing 和 ip rule 都可以,就干脆把 mark routing 删了只用 ip rule 了
    supemaomao
        24
    supemaomao  
    OP
       2024-06-03 15:10:46 +08:00
    @povsister 是的,在目的 IP 里开白,就是有些麻烦,这个问题解决以后,就不折腾了。稳定用着就行了,后续就考虑 esxi 里面的虚拟机备份问题了。
    supemaomao
        25
    supemaomao  
    OP
       2024-06-03 15:22:52 +08:00
    @onion83
    @flynaj
    @terrancesiu
    @creepersssss
    @bao3 已经解决了,感谢各位的回复。
    flynaj
        26
    flynaj  
       2024-06-03 19:57:32 +08:00 via Android
    sp670
        27
    sp670  
       2024-06-06 11:44:19 +08:00
    我以前是用 MARK ROUTING ,现在直接弃用 OSPF 了,还是有需要再用隧道好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:38 · PVG 06:38 · LAX 15:38 · JFK 18:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.