ESXI 中安装了 ROS 与 OpenWrt,并且实现了 Op 通过 OSPF 下发路由表,使国外流量通过 OP 出口,内网流量直接通过 ROS 的 PPPoe 出口。
部分国外地址,直接通过国内访问效果更好,比如巨硬相关的域名。所以需要实现一个白名单的功能,即虽然 OSPF 下发了这个地址需要通过 OP 出口,但是仍然通过 pppoe 直接出口。
目前尝试通过路由标记,将需要白名单的地址放在了 ip/firewall/address-list 名为 DstallowGo 的 list 中
尝试标记 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=""
创建了如下的路由表
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
检查 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:~$
想请求一下有哪些地方设置有问题吗?或者怎么实现最开始的需求。谢谢各位指点 第一次码字,有格式错误还请多包涵。
在做了主题正文的操作后,当我通过wg的设备访问list中的地址时,是可以正常做到白名单的情况。
比如当我把 whatismyipaddress.com 这个地址放进list中时,通过wg的设备访问这个网页,会显示国内的ip地址, 但是当交换机下的电脑访问时,会提示连接重置。
当我在list中禁用这个地址时,wg与交换机下的电脑访问该域名都会显示梯子的ip信息。
已经解决,补充一下方案以及原因
防火墙使用了fast-track 导致了mark-routing的数据包无法被防火墙捕获,而触发连接重置。
1
Naples 206 天前 via Android 1
需要直连的境外 ip 或段,直接优先静态到 pppoe 就行,不需要标记的
|
2
povsister 206 天前 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 |
3
supemaomao OP @Naples 主要是在 list 里面可以直接写域名,如果静态路由只能写 ip 或者段,有点不太方便,所以才想着用 list 实现。
|
4
supemaomao OP @povsister 看了一下你帖子,感觉好复杂的样子,感觉是大佬的样子。
之所以没有 ip rule 是因为在 ROS 的文档中 https://help.mikrotik.com/docs/display/ROS/Policy+Routing#:~:text=It%20is%20not%20recommended%20to%20use%20both%20methods 对于策略路由的描述中,不建议混合使用路由标记与路由规则。所以我就没有这样用过。晚上试试加上 rule ,谢谢回复。 |
5
povsister 206 天前
@supemaomao
> 对于策略路由的描述中,不建议混合使用路由标记与路由规则。 这样说是没错,但是你只用 firewall 的 mangle 去做了标记,然后又没添加另一个规则去处理这个标记,所以。。。 另外,记得在你自己建的 white_list 路由表中添加自己内网网段的静态路由,否则加 ip rule 后会出现回程无路由的情况 |
6
supemaomao OP @povsister 原来是这样,那如果标记的表依然是 main 表是不是就不用添加路由规则去处理了,我 white_list 的路由表中已经添加了对于内网的出口了。
另外还有一个疑问想请教一下,我目前没添加路由规则的前提下,在局域网中使用 src 192.168.2.0/24 的网段会触发连接重置,但是当我使用 wg 连接至 ROS ,再访问特定的地址列表里面的域名服务时,就不触发连接重置。这是为什么呢? |
7
yyysuo 206 天前
用 fakeip 网关实现这种需求更简单些吧。
|
8
povsister 206 天前
@supemaomao
> 标记的表依然是 main 表 按我理解是没有这种说法的,你都用标记路由了,那必然是为了某些情况不查询 main 路由表。 第二个问题没理解,双方对于术语的理解不同,你也没给拓扑。而且 RST 是 TCP 行为,路由表处理的是 IP 报文,这个得具体分析或者抓包看是最快的。 |
9
Dzsss 206 天前
你那个做法是不彻底的,还要解决 DNS 污染问题。
其实一个 OP 就足够解决全部问题。如果没其它网络需求,没必要强加个 ROS + OSPF 。 |
10
supemaomao OP @Dzsss 单 OP 的话,无法解决网络故障转移。如果梯子挂了,容易影响家里其他人上网。
|
11
supemaomao OP @povsister 感谢回复,已经补充了简易的拓补图(不太会做拓扑图),和关于第二个问题的详细情况。
|
12
lcy630409 206 天前
@supemaomao
gfw 模式不行么,翻墙这个东西 如果用的人不多 建议本机翻墙 不要在路由上搞 我目前是 ikuai+adg+win7 模式,win7 用来特殊协议连接外网 作为 ikuai 的出口 ikuai 只写了简单的 两条规则 ,默认全部走 win7 香港出口 ,国内 ip 走 pppoe.. adg 用文件模式,gfw 域名 8888 解析,其他 223.5.5.5 |
13
0987363 205 天前 via iPhone
@supemaomao 挺麻烦的,我是 ros 加 op 双播,默认 op 网关,ros 的 dhcp 当 op 打开的时候就自动关闭
|
14
supemaomao OP @lcy630409 感谢回复,其实单就梯子用途的话,现在已经是正常使用的。只是强迫症会想着让自己更懒一点。哈哈 🤣🤣
|
15
supemaomao OP @0987363 感谢回复,哈哈 ,折腾嘛,总想找一个自己舒服的借口。
|
16
bao3 205 天前
静态路由的优先级比较高,所以你可以直接用指静态路由的方式来躲避动态路由的匹配
|
17
creepersssss 205 天前 via iPhone
你可以相信我的做法,设立两个隔离网段(同时分配新增路由表),做好两个网段互通,一个网段实行 ospf ,一个直通 pppoe ,ospf 宣告主机 op 放在直通网段,啪 好了。
|
18
terrancesiu 205 天前 via iPhone
如果你想部分 ip 的优先级高于 ospf ,在 rules 预埋策略路由即可。如果是 bgp 就直接找到 cidr 对应的 asn 写过滤策略和 set gw
|
19
flynaj 205 天前 via Android
一个 openwrt 就可以,用 mwan3 分流。
|
20
onion83 205 天前
@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 |
21
povsister 204 天前
今天算是把这坑美美的踩了一遍,之前朋友警告我说慎用 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 写策略路由即可 |
22
supemaomao OP @povsister 确实如此,我禁用了 filter 中的 fasttrack 以后,重启。其它任何变动都不做。
我的 mark-routing 就可以正常工作了,可以通过这个做白名单了。 不用 ip rule 写策略的原因是,有很多地址是域名。在 ip rule 里面要自己解析以后 写 ip ,多了一个操作。 我在研究一下搭配 mark-connection 并开启 fast-track 的情况下如何实现这个需求。感谢踩坑哈哈。 |
23
povsister 202 天前
@supemaomao
ip rule 是可以针对于来源 IP 写规则的,一般可以用来豁免某个内网设备走特殊逻辑。 但你要求是在目的 IP 里开白这个确实不太方便,得在防火墙上操作。 搭配 mark connection 的操作我上面贴的 mikrotik 的论坛帖子里有讲到,主要是 fasttrack 要明确应用于 no-mark 的连接,然后先 mark connection ,再 mark routing 就 ok 了。 我昨天试了下是可以的,但我现在用的方案 mark routing 和 ip rule 都可以,就干脆把 mark routing 删了只用 ip rule 了 |
24
supemaomao OP @povsister 是的,在目的 IP 里开白,就是有些麻烦,这个问题解决以后,就不折腾了。稳定用着就行了,后续就考虑 esxi 里面的虚拟机备份问题了。
|
25
supemaomao OP |
27
sp670 199 天前
我以前是用 MARK ROUTING ,现在直接弃用 OSPF 了,还是有需要再用隧道好了
|