Chiphell - 分享与交流用户体验

标题: 来问下ROS的OSPF分流如何标记旁路由的流量 [打印本页]

作者: guitengyue    时间: 2022-6-16 20:09
标题: 来问下ROS的OSPF分流如何标记旁路由的流量
本帖最后由 guitengyue 于 2022-6-16 20:15 编辑

最近折腾了下ROS下通过OSPF分流至openwrt的方案,感觉对于部分国外ip陷入死循环了,ros——op——ros——op,应该是需要在mangle中标记路由表,不要进入ospf的main表中,但是标记了半天感觉都不行,其实主要就是appstore无法访问,特来询问,搞明白后,整个方案还是想走gfwlist,不然这个整个系统的流量有点受不了
目前我是这样标记的,来自op的流量标记为bypass
op ip:192.168.2.2,op中防火墙加入mas伪装那句话(这个在通过ip分流的方案中测试过,也是这样放行这块流量的)
chain=prerouting action=mark-routing new-routing-mark=bypass passthrough=yes src-address=192.168.2.2  log=no log-prefix=""

作者: gnattu    时间: 2022-6-16 20:13
啊? 你都OSPF了为什么要用mangle,你直接把你代理的远端IP写个静态路由直接出去不就行了
作者: guitengyue    时间: 2022-6-16 20:16
gnattu 发表于 2022-6-16 20:13
啊? 你都OSPF了为什么要用mangle,你直接把你代理的远端IP写个静态路由直接出去不就行了 ...

不懂。。。。
这个要怎么写,给个范例可以么
作者: guitengyue    时间: 2022-6-16 20:18
gnattu 发表于 2022-6-16 20:13
啊? 你都OSPF了为什么要用mangle,你直接把你代理的远端IP写个静态路由直接出去不就行了 ...

我的理解是,ospf不就是一个的路由表么,在main表内的走这些路由,然后指向op的ip,然后通过op处理返回ros的ip,但是现在有的数据有问题,op处理完还是进入上述的main表,然后又进入到上述的路由,然后死循环了
作者: gnattu    时间: 2022-6-16 20:32
guitengyue 发表于 2022-6-16 20:18
我的理解是,ospf不就是一个的路由表么,在main表内的走这些路由,然后指向op的ip,然后通过op处理返回ro ...


那肯定是进路由表的啊,不然你这个路由器怎么能叫路由器呢

会回到op是因为你的这个包的dst ip命中了某一个非国内ip段 于是触发了路由到op的那个路由

那么最简单的方法是为这个dst ip新增一个静态路由规则,让他直接走默认网关就可以切断循环

怎么添加静态路由:

/ip route add dst-address=x.x.x.x/32 gateway=y.y.y.y
作者: guitengyue    时间: 2022-6-16 20:36
gnattu 发表于 2022-6-16 20:32
那肯定是进路由表的啊,不然你这个路由器怎么能叫路由器呢

会回到op是因为你的这个包的dst ip命中了某一 ...

这个我知道
但是这样要切断的静态路由也太多了
所以我的想法是 经过op处理后的数据进行标记,这些标记了的数据不要第二次进入op的路由表
作者: gnattu    时间: 2022-6-16 20:44
但是这样要切断的静态路由也太多了


会很多吗,只有你的代理的IP地址需要被切断啊

如果你是想要正常访问App Store,那你应该在DNS上做分流而不是在路由表上分流

因为App Store你使用国内IP解析会返回一个国内CDN地址,然后这个国内CDN地址是无法访问非国区的

你如果使用国外IP解析,那就回返回一个国外的CDN地址,该地址是可以正常访问外区的,并且我亲测只分流apps.apple.com下载的时候CDN是正常走国内CDN并且同时能打开外区商店页面的

在这种配置下只需要添加你代理节点的静态路由表
作者: guitengyue    时间: 2022-6-16 20:57
gnattu 发表于 2022-6-16 20:44
会很多吗,只有你的代理的IP地址需要被切断啊

如果你是想要正常访问App Store,那你应该在DNS上做分流而 ...

我本身代理节点的ip就没在表内的,你说的这个应该是我appstore无法访问的原因了,回头研究下dns分流。appstore是问题1,问题2 我还是想整明白这个流量从op回到ros要怎么标记,这个会了,问题1其实也解决了
作者: blanksign    时间: 2022-6-17 00:50
疯狂回环那是必然。
作者: tedaz    时间: 2022-6-17 09:01
楼主说最终根本目的吧,到底要实现什么效果?

只要不是为了考试出题,现实世界中的需求应该有简单的解决办法。
作者: guitengyue    时间: 2022-6-17 09:28
tedaz 发表于 2022-6-17 09:01
楼主说最终根本目的吧,到底要实现什么效果?

只要不是为了考试出题,现实世界中的需求应该有简单的解决办 ...

目前op只能设置全局才能上网,然后appstore还有问题
已经找到原因了,就是进入死循环了(appstore的问题是因为dns原因,7#写了吧),解决这个死循环就ok了
最终目的,op想设置成大陆白名单形式或者gfwlist形式,不然全局下流量吃紧,也没必要
作者: liwangli    时间: 2022-6-17 09:45
guitengyue 发表于 2022-6-16 20:36
这个我知道
但是这样要切断的静态路由也太多了
所以我的想法是 经过op处理后的数据进行标记,这些标记了 ...

ip route rule添加一个源地址(就是op)的规则,然后only look up in 一个新的table,这个table里只有默认路由,没有ospf添加的那些,试试?
作者: tedaz    时间: 2022-6-17 10:13
guitengyue 发表于 2022-6-17 09:28
目前op只能设置全局才能上网,然后appstore还有问题
已经找到原因了,就是进入死循环了(appstore的问题 ...

一直用passwall和passwall2,可以设置lan的整体上网模式(gfwlist,geoip,全局),也可以配置单个客户端的上网模式,照说openclash也应该可以实现类似效果。
作者: guitengyue    时间: 2022-6-17 11:01
liwangli 发表于 2022-6-17 09:45
ip route rule添加一个源地址(就是op)的规则,然后only look up in 一个新的table,这个table里只有默 ...

图1是ospf自动加进来的路由
图2是rule添加了一个新的规则,加完以后,所有进入op地址都出不去了
作者: liwangli    时间: 2022-6-17 11:13
guitengyue 发表于 2022-6-17 11:01
图1是ospf自动加进来的路由
图2是rule添加了一个新的规则,加完以后,所有进入op地址都出不去了 ...

可能还需要把lan的地址也加到新table里吧,要不从op回来的数据也从def route走出去了
作者: guitengyue    时间: 2022-6-17 11:17
liwangli 发表于 2022-6-17 11:13
可能还需要把lan的地址也加到新table里吧,要不从op回来的数据也从def route走出去了 ...

没理解这句话,这个lan是ros的lan地址?再加一条规则还是什么意思
作者: guitengyue    时间: 2022-6-17 11:23
liwangli 发表于 2022-6-17 11:13
可能还需要把lan的地址也加到新table里吧,要不从op回来的数据也从def route走出去了 ...

我说错了,刚刚那样设置,是所有的网页都打不开,包括国内的地址,但是我远程连的倒是没断,我起初以为国内的线路没问题
作者: liwangli    时间: 2022-6-17 14:09
guitengyue 发表于 2022-6-17 11:17
没理解这句话,这个lan是ros的lan地址?再加一条规则还是什么意思

就是说要给192.168.1.x?这个路由项加到新table里,要不2.x的数据无法转发给1.x
作者: sunrace    时间: 2022-6-17 15:17
为啥不考虑用address-list呢?每月用脚本升级一下CNIP,非CNIP由ROS分流到OP不就行了吗?我用这个方案非常稳定好用啊
作者: guitengyue    时间: 2022-6-17 15:20
liwangli 发表于 2022-6-17 14:09
就是说要给192.168.1.x?这个路由项加到新table里,要不2.x的数据无法转发给1.x ...

那这条要怎么加?是再弄个rule的规则吗?
上次那个ip分流也是你帮我解决问题的,ros的ip有两个,192.168.1.1和192.168.2.1,之间有一个路由
(, 下载次数: 59)
作者: guitengyue    时间: 2022-6-17 15:21
sunrace 发表于 2022-6-17 15:17
为啥不考虑用address-list呢?每月用脚本升级一下CNIP,非CNIP由ROS分流到OP不就行了吗?我用这个方案非常 ...

因为有时候感觉有点卡卡的,用了2天了onsf,真的是这个快

作者: liwangli    时间: 2022-6-17 15:23
guitengyue 发表于 2022-6-17 15:20
那这条要怎么加?是再弄个rule的规则吗?
上次那个ip分流也是你帮我解决问题的,ros的ip有两个,192.168. ...

192.168.1.0的路由加到新的table里吧,试,另外注意另开fasttrack
作者: smallfount    时间: 2022-6-17 15:26
......你这不是ospf流量导入openwrt后还要分流一次嘛。。。那还搞那么复杂干嘛。。。
直接全导入过去不就好了。。
作者: guitengyue    时间: 2022-6-17 15:40
liwangli 发表于 2022-6-17 15:23
192.168.1.0的路由加到新的table里吧,试,另外注意另开fasttrack

是这样吗?远程回去的,这条不敢加,晚上回家操作
那个fasttrack回头再开

作者: guitengyue    时间: 2022-6-17 15:41
smallfount 发表于 2022-6-17 15:26
......你这不是ospf流量导入openwrt后还要分流一次嘛。。。那还搞那么复杂干嘛。。。
直接全导入过去不就好 ...

因为appstore上不去,因为全局怕流量用光光了,以前ip分流的时候,发现icloud上传走的全是这个线路
作者: liwangli    时间: 2022-6-17 15:42
guitengyue 发表于 2022-6-17 15:40
是这样吗?远程回去的,这条不敢加,晚上回家操作
那个fasttrack回头再开
...

打错了,是别开fasttrack

对,不要远程搞玩意,本地搞不行还可又用winbox救回来
作者: guitengyue    时间: 2022-6-17 15:43
liwangli 发表于 2022-6-17 15:42
打错了,是别开fasttrack

对,不要远程搞玩意,本地搞不行还可又用winbox救回来 ...

ok,万分感谢,晚上回家测试

作者: smallfount    时间: 2022-6-17 15:44
guitengyue 发表于 2022-6-17 15:41
因为appstore上不去,因为全局怕流量用光光了,以前ip分流的时候,发现icloud上传走的全是这个线路 ...

但是你的最终目的不还是openWRT做gfw或者out of China 模式嘛。。。
所以你的分流的结果本质上在openwrt上处理不就很简单。。
iCloud的问题不就是几个域名的情况。。直接丢进不代理列表就是了。。
作者: guitengyue    时间: 2022-6-17 15:44
gnattu 发表于 2022-6-16 20:44
会很多吗,只有你的代理的IP地址需要被切断啊

如果你是想要正常访问App Store,那你应该在DNS上做分流而 ...

我感觉ios上面的appstore不是apps.apple.com,因为我网页打开这个链接很快,手机还是打不开
作者: colorjuice    时间: 2022-6-17 15:45
你这App Store不能访问应该是DNS没有做分流的原因,而不是所谓的循环,MASQUERADE之后应该不存在循环,除非你的国外IP列表包含了你的节点IP,这样就的确出不去了。
OSPF一般不用于这个场景,作为分流的话,一般是ROS与国外节点之间的隧道用OSPF,这样才能中断或恢复自动移除或添加路由。本地局域网内的话还要自己写脚本检测节点是否中断,失去了OSPF的意义。
作者: guitengyue    时间: 2022-6-17 15:49
smallfount 发表于 2022-6-17 15:44
但是你的最终目的不还是openWRT做gfw或者out of China 模式嘛。。。
所以你的分流的结果本质上在openwrt ...

不代理列表在哪里处理,如果在op中处理,就绕不出去了啊,现在就在解决这个问题
为什么不先全部在op处理,是因为op有时候不稳定,会挂,所以之前一直用的ros ip分流,现在用了ros onsf分流,本质还是op处理分流后的数据
作者: guitengyue    时间: 2022-6-17 15:50
colorjuice 发表于 2022-6-17 15:45
你这App Store不能访问应该是DNS没有做分流的原因,而不是所谓的循环,MASQUERADE之后应该不存在循环,除非 ...

节点IP已经排除
OP开启全局没有问题,除了appstore,dns分流暂时不知道怎么处理
OP中如果排除一个国外IP不走代理,那这个ip就进入死循环了,目前就是这么个情况
作者: guitengyue    时间: 2022-6-17 15:55
https://blog.xn--7ovq92diups1e.com/post/homelab-ros-ospf/
这篇文章说,也说到了这些问题
其中icmp的问题,在mangle中标记后已经解决
(, 下载次数: 53)
(, 下载次数: 42) (, 下载次数: 43)
作者: smallfount    时间: 2022-6-17 15:58
guitengyue 发表于 2022-6-17 15:49
不代理列表在哪里处理,如果在op中处理,就绕不出去了啊,现在就在解决这个问题
为什么不先全部在op处理 ...

.....我不是很懂哈。。
我先问个事情。。。如果openwrt能处理全部分流动作,是不是就不需要ospf了?
那是不是就没有loop问题了,对吧。

那么问题的本质就回到了openwrt不稳定上。

然后,你觉得这么搞不爽。
所以要弄ospf,虽然我不理解为啥ospf要这样弄。
但是我先理解下。。你ospf路由表的来源是哪里。peer节点是什么?
或者说,你ospf分流的逻辑是怎么处理呢?
作者: guitengyue    时间: 2022-6-17 16:05
本帖最后由 guitengyue 于 2022-6-17 16:07 编辑
smallfount 发表于 2022-6-17 15:58
.....我不是很懂哈。。
我先问个事情。。。如果openwrt能处理全部分流动作,是不是就不需要ospf了?
那是 ...


对,假设所有设备都先过op,那就没loop问题了;然后要这么搞的原因是,ros用了好几年以后,爱上他了,稳的1b,期间也搞过dhcp那直接设置,直接锁定op网关和dns给要fq的设备,最后发现了IP分流,也折腾了一段时间,最后弄到ospf了
ospf的来源,参考了这个链接https://www.truenasscale.com/2021/12/13/195.html
其实是这个项目https://github.com/dndx/nchnroutes

作者: colorjuice    时间: 2022-6-17 16:15
guitengyue 发表于 2022-6-17 15:50
节点IP已经排除
OP开启全局没有问题,除了appstore,dns分流暂时不知道怎么处理
OP中如果排除一个国外IP ...

那肯定啊,你用OSPF通告给ROS说这个IP要走OpenWrt,然后你在OpenWrt里面的工具/插件再排除掉,那肯定要被OpenWrt drop掉destination unreachable,或者是DIRECT规则肯定循环了。OpenWrt里面的工具应该把所有接收到的流量都做MASQUERADE发往节点。
ROS(国外IP段)-->OpenWrt(接收到全部MASQUERADE)-->节点,这样是不存在任何问题的。DIRECT的IP不应该被包含在OSPF通告的IP里。
其实还不如用Clash的fake-ip,docker跑个clash tun,指定domain-list交给clash解析,非list的用运营商DNS,ros只需要一条静态路由fakeip给clash 198.18.0.0/16 via clash,同时clash使用fallback可以达到同样效果,路由表还简洁。
作者: smallfount    时间: 2022-6-17 16:21
guitengyue 发表于 2022-6-17 16:05
对,假设所有设备都先过op,那就没loop问题了;然后要这么搞的原因是,ros用了好几年以后,爱上他了,稳 ...

.....
这ospf的本质不就是从openwrt传了一套nchn的IP list过来是吧。
然后你的ROS根据动态协议过来的结果自动把非中国的给拉到openwrt上去呗。

但是现在的问题就是你op的流量出来也是先进到ROS然后也遇到了一样的规则loop了呗。
所以逻辑上,只要从OP上出来的流量打标区分出来或者直接强制NAT出去就行了吧。

作者: smallfount    时间: 2022-6-17 16:23
guitengyue 发表于 2022-6-17 16:05
对,假设所有设备都先过op,那就没loop问题了;然后要这么搞的原因是,ros用了好几年以后,爱上他了,稳 ...

另外还有个问题、、
你就写了针对OP IP的打标。。
那么打标以后你针对这个标记的动作是什么呢?
作者: guitengyue    时间: 2022-6-17 17:05
smallfount 发表于 2022-6-17 16:23
另外还有个问题、、
你就写了针对OP IP的打标。。
那么打标以后你针对这个标记的动作是什么呢? ...

这条是因为ros中ospf添加进来的路由是main的才会转发,icmp那边也是那么操作 就能ping通外网节点了 不然ping都ping不通
作者: smallfount    时间: 2022-6-17 17:07
guitengyue 发表于 2022-6-17 17:05
这条是因为ros中ospf添加进来的路由是main的才会转发,icmp那边也是那么操作 就能ping通外网节点了 不然p ...

???
main是vrf表吧...
你打标完不操作的话他不还是按照原来的策略运行。打标不就毫无意义
作者: guitengyue    时间: 2022-6-17 17:07
smallfount 发表于 2022-6-17 16:21
.....
这ospf的本质不就是从openwrt传了一套nchn的IP list过来是吧。
然后你的ROS根据动态协议过来的结果 ...

对 ,就是想这样搞 所以我要标记来自op处理过的数据,不要再次进入ospf的路由,op防火墙加入了那个masq指令,按理说这样设置应该ok了 可是就是不行

作者: guitengyue    时间: 2022-6-17 17:08
colorjuice 发表于 2022-6-17 16:15
那肯定啊,你用OSPF通告给ROS说这个IP要走OpenWrt,然后你在OpenWrt里面的工具/插件再排除掉,那肯定要被 ...

尝试过clash,教程太少就没继续弄下去,op里面passwall感觉挺好使的
作者: guitengyue    时间: 2022-6-17 17:09
smallfount 发表于 2022-6-17 17:07
???
main是vrf表吧...
你打标完不操作的话他不还是按照原来的策略运行。打标不就毫无意义 ...

你看下14#第一张图,以及33#楼
作者: smallfount    时间: 2022-6-17 17:23
guitengyue 发表于 2022-6-17 17:09
你看下14#第一张图,以及33#楼

说实话没看懂。。
本质上还是只有打标而已吧。

简单的说吧。。
你从OP的wan口出来以后的流量你现在除了打标外做了什么特殊的处理吗?

本质上你现在问题不就是从wan口出来的流量再次被路由了呗。
所以你不应该做个策略路由,把WAN口这个src过来的直接action accept?
打标也只是为了后面的PBR处理提供条件啊。。并不会对包做什么动作的。
所以如果你打完标记的包没有对应的路由动作那不是白打了。

作者: gnattu    时间: 2022-6-17 17:41
本帖最后由 gnattu 于 2022-6-17 17:47 编辑
guitengyue 发表于 2022-6-17 15:44
我感觉ios上面的appstore不是apps.apple.com,因为我网页打开这个链接很快,手机还是打不开 ...


还有*.itunes.apple.com(包含次级域名的)

作者: guitengyue    时间: 2022-6-17 17:45
smallfount 发表于 2022-6-17 17:23
说实话没看懂。。
本质上还是只有打标而已吧。


accept 没用 试过了
原理都通了 就是不知道要怎么搞
作者: colorjuice    时间: 2022-6-17 18:00
guitengyue 发表于 2022-6-17 17:07
对 ,就是想这样搞 所以我要标记来自op处理过的数据,不要再次进入ospf的路由,op防火墙加入了那个masq指 ...

任何没有在OpenWrt走节点的包,你再怎么打标显然也没法匹配上,因为这个包原样回到ROS再次进入路由表。要么你在ROS做ip分流,要么在OpenWrt分流,再要么ROS分流的IP是OpenWrt的子集,三选一,但凡OSPF通告的IP比OpenWrt分流的IP多,那多出来的部分,路由就没法走了。
建议还是调整好你的PassWall规则,问题不在ROS上。

作者: gnattu    时间: 2022-6-17 18:01
colorjuice 发表于 2022-6-17 18:00
任何没有在OpenWrt走节点的包,你再怎么打标显然也没法匹配上,因为这个包原样回到ROS再次进入路由表。要 ...

我觉得楼主的场景OpenWRT直接就是全局的没有二次分流
作者: gnattu    时间: 2022-6-17 18:11
我个人使用的方案是开启了FastTrack的,所以Mangle要求比不开的要高很多,但是目前是不会有漏包或者奇怪的现象,但是我不敢保证楼主这里的场景也能适用

我的方案是打两次标,首先给connection打标,然后再根据connection给routing打标,最后在静态路由里添加一条routing-mark=bypass的路由,甚至没有用复数路由表

我主要是用来给ICMP打标,但是我试过别的连接给connection打标一样是可以正常路由的

可以尝试改一改我这个方案试试看能不能成,按理说fasttrack都能用的话楼主这种也不会有太大问题

  1. /ip firewall mangle
  2. add action=accept chain=prerouting comment="if a mid-connection packet has no co\
  3.     nnection mark, it needs the default handling" connection-mark=no-mark \
  4.     connection-state=established,related
  5. add action=accept chain=prerouting comment=\
  6.     "download packets MUST NOT be routing-marked" connection-state=\
  7.     established,related in-interface-list=WAN
  8. add action=mark-routing chain=prerouting comment=\
  9.     "Route bypass connection to bypass gateway IF it already has a connection mark" \
  10.     connection-mark=bypass new-routing-mark=bypass passthrough=no
  11. add action=mark-connection chain=prerouting comment="Treat ICMP as bypass" \
  12.     dst-address=!192.168.0.0/16 new-connection-mark=bypass passthrough=yes \
  13.     protocol=icmp src-address=192.168.8.0/24
  14. add action=mark-routing chain=prerouting comment=\
  15.     "Route bypass connection to bypass gateway" connection-mark=bypass new-routing-mark=bypass \
  16.     passthrough=yes
复制代码



作者: colorjuice    时间: 2022-6-17 18:14
gnattu 发表于 2022-6-17 18:01
我觉得楼主的场景OpenWRT直接就是全局的没有二次分流

全局的才应该是没有问题,所有到OpenWrt的流量都进入代理发往节点,ROS就会default route发往WAN,DST是海外节点,SRC是OpneWrt能有什么问题呢。现在他的情况就是二次分流造成的。
作者: guitengyue    时间: 2022-6-17 18:58
colorjuice 发表于 2022-6-17 18:14
全局的才应该是没有问题,所有到OpenWrt的流量都进入代理发往节点,ROS就会default route发往WAN,DST是 ...

对 我op二次分流了 全局就是appstore不行
作者: guitengyue    时间: 2022-6-17 18:59
gnattu 发表于 2022-6-17 18:11
我个人使用的方案是开启了FastTrack的,所以Mangle要求比不开的要高很多,但是目前是不会有漏包或者奇怪的 ...

我消化下,感谢哈
作者: guitengyue    时间: 2022-6-17 19:02
colorjuice 发表于 2022-6-17 18:00
任何没有在OpenWrt走节点的包,你再怎么打标显然也没法匹配上,因为这个包原样回到ROS再次进入路由表。要 ...

不会啊,进入op,因passwall规则或者不代理列表 会因为op防火墙masq规则变成op的lan ip返回到ros
作者: smallfount    时间: 2022-6-17 19:07
guitengyue 发表于 2022-6-17 19:02
不会啊,进入op,因passwall规则或者不代理列表 会因为op防火墙masq规则变成op的lan ip返回到ros  ...

OP是单臂的?
作者: guitengyue    时间: 2022-6-17 19:18
smallfount 发表于 2022-6-17 19:07
OP是单臂的?

对 都是虚拟机里的 wan口本身也没用
作者: Darcychiu    时间: 2022-6-17 21:22
走bgp、ospf等通用路由协议目的就是要秒杀mangle的低效以及更加方便的定制分流,现在你要绕回去,这样是不合适的。

如果你坚持用OpenWRT,推荐开全局模式,分流完全通过RouterOS,网上的非cnip表并不适用所有人,你可以自行修改,这也是我不用各种开源gfwlist的原因,误杀严重,且不支持ipv6。
作者: Darcychiu    时间: 2022-6-17 21:25
另外,如果条件允许,建议上bgp,收公网全表,通过ASN进行分流。
作者: guitengyue    时间: 2022-6-17 21:30
Darcychiu 发表于 2022-6-17 21:22
走bgp、ospf等通用路由协议目的就是要秒杀mangle的低效以及更加方便的定制分流,现在你要绕回去,这样是不 ...

先这么用吧,对了,能否推荐个dns,我先把appstore上不去这个问题解决掉
作者: guitengyue    时间: 2022-6-17 21:31
Darcychiu 发表于 2022-6-17 21:25
另外,如果条件允许,建议上bgp,收公网全表,通过ASN进行分流。

bgp要建立隧道,这货回头研究下,隧道意思就是类似xray之类的?

作者: guitengyue    时间: 2022-6-17 23:19
liwangli 发表于 2022-6-17 15:42
打错了,是别开fasttrack

对,不要远程搞玩意,本地搞不行还可又用winbox救回来 ...

这个也不行,放弃了。。。。
全局算了,弄个smartdns之类的
作者: Darcychiu    时间: 2022-6-17 23:34
guitengyue 发表于 2022-6-17 21:30
先这么用吧,对了,能否推荐个dns,我先把appstore上不去这个问题解决掉

把你常用的需要和谐的域名通过RouterOS L7过滤劫持到vps的dns上,其他的走ISP的dns,这样最快,CDN也是最优的
作者: guitengyue    时间: 2022-6-17 23:55
Darcychiu 发表于 2022-6-17 23:34
把你常用的需要和谐的域名通过RouterOS L7过滤劫持到vps的dns上,其他的走ISP的dns,这样最快,CDN也是最 ...

L7没玩过。。。
我刚刚在ubuntu上架设了一个smartdns,然后ros dns指向smartdns,op设置全局,这样appstore问题就解决了,同时速度比之前快了不少
作者: colorjuice    时间: 2022-6-18 15:18
guitengyue 发表于 2022-6-17 19:02
不会啊,进入op,因passwall规则或者不代理列表 会因为op防火墙masq规则变成op的lan ip返回到ros  ...

可能是我没表述清楚,应该是“因为这个包的DST没变原样回到ROS再次进入路由表。”

看到你用smartdns了,那推荐看看这个项目https://github.com/felixonmars/dnsmasq-china-list做域名分流,chinalist用国内DNS解析,或者gfwlist用国外DNS解析,一个白名单一个黑名单,不建议同时使用。国外DNS要过节点以解析最近服务器。

写个脚本检测passwall节点通达性,中断时移除ospf路由以免断网。据我所知passwall自动切换并不包含DIRECT。


作者: guitengyue    时间: 2022-6-18 22:52
colorjuice 发表于 2022-6-18 15:18
可能是我没表述清楚,应该是“因为这个包的DST没变原样回到ROS再次进入路由表。”

看到你用smartdns了, ...

即便这个包的dst没变 也带上了scr的信息,应该可以被标记,我在另外一个博客那边问了,大神答复也是要在route中rule添加2条规则 等下次有空了再试试,只是现在用了smartdns速度太完美暂时都不想折腾,另外我的节点很稳,几年了都毫无问题,passwall本身也可以做冗余,然后主要也不知道这个脚本咋写…
作者: guitengyue    时间: 2022-6-18 22:54
colorjuice 发表于 2022-6-18 15:18
可能是我没表述清楚,应该是“因为这个包的DST没变原样回到ROS再次进入路由表。”

看到你用smartdns了, ...

那个smartdns我好像啥都没弄,就搞了个ubuntu,安装了官方的smartdns,conf中加入了8.8.8.8和223.5.5.5,看了b站教程说要改那个rosolve啥的 然后ros和passwall的dns都改为ubuntu后上网速度真的起飞了,从来没那么丝滑过…..
作者: llwin    时间: 2022-6-19 00:31
不要用mangle,开了fasttrack会失效。
用策略路由就够了,不用标记包。
把不需要走旁路由的ip段建一张routing table,直接走wan口。其他的都走旁路由。
ros处理几万条的路由表还是很轻松的。

address list需要用mangle,开不了fasttrack,效率不行。
作者: llwin    时间: 2022-6-19 00:53
在旁路由要做nat,否则src-address还是原来的,就死循环了
作者: lanhun    时间: 2022-6-28 02:31
我现在是ros通过ospf分流至openwrt
ros上做了几个设置
1.定时每周更新的cn ip列表
2. mangle 标记需要分流的ip段至非cn的mark routing=proxy
3.ospf设置routingtable=proxy

openwrt
1.用的oc规则模式fakeip无特殊设置
2.bird宣告0.0.0.0都走br-lan
3.防火墙设置 iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE
作者: guitengyue    时间: 2022-6-28 08:09
lanhun 发表于 2022-6-28 02:31
我现在是ros通过ospf分流至openwrt
ros上做了几个设置
1.定时每周更新的cn ip列表

ospf设置routingtable=proxy
这个怎么设置,我这边op中bird弄完,全部自动映射到ros中的路由表了
作者: lancolor    时间: 2022-6-28 09:18
老哥你这个ROS ospf分流的教程有吗?我也想去试试看
作者: guitengyue    时间: 2022-6-28 10:09
lancolor 发表于 2022-6-28 09:18
老哥你这个ROS ospf分流的教程有吗?我也想去试试看

回头写一份
网上那个要填坑
作者: eval    时间: 2022-6-28 10:13
单OP得了,瞎折腾啊
作者: lanhun    时间: 2022-6-28 16:39
guitengyue 发表于 2022-6-28 08:09
ospf设置routingtable=proxy
这个怎么设置,我这边op中bird弄完,全部自动映射到ros中的路由表了 ...

routeros上设置

/routing ospf instance
add disabled=no name=def router-id=10.255.255.1 routing-table=proxy
/routing ospf area
add disabled=no instance=def name=backbone
/routing table
add disabled=no fib name=proxy

/ip firewall mangle
add action=accept chain=prerouting src-address-list=OpenWrt
add action=mark-routing chain=prerouting dst-address-list=!CN \
    new-routing-mark=proxy passthrough=no src-address-list=\
    "proxylist"

我dns用的223.5.5.5这些公用的
这样设置完我观察了下,所有国内的ip都走ros,其他的分流到openwrt上了.
我也是找的网上教程改改.目前这样是满足我的要求了. 供你参考 多多交流
作者: guitengyue    时间: 2022-7-1 08:47
lanhun 发表于 2022-6-28 16:39
routeros上设置

/routing ospf instance

目前挺稳定、快速,都是秒开
回头试试看你的方案

作者: Ryo_    时间: 2022-8-18 00:21
本帖最后由 Ryo_ 于 2022-8-18 00:26 编辑

博客最近没更新,其实已经换成BGP来做了,不过区别不大,而且ospf收敛速度还更快
我用BGP主要是不用和组播那些麻烦的东西打交道,防火墙规则可以简单一些(ospf的点对点模式应该也差不多)
现在这个配法没有mangle,也就是可以享受完整的硬件加速

bridge lan删掉ether5,这个口单独连跑BGP(或者ospf)的第二个路由,然后给划上网段配上ip,做通/隔离靠路由
(, 下载次数: 44)
(, 下载次数: 43)
(, 下载次数: 41)
(, 下载次数: 44)
bird的配置和博客里的区别只有换成BGP,原来的ospf去掉,如果嫌BGP收敛慢可以自己调整超时之类的小参

  1. protocol bgp {
  2.         local as 65531;
  3.         neighbor 192.168.255.1 as 65530;
  4.         source address 192.168.255.254;
  5.         ipv4 {
  6.                 import none;
  7.                 export all;
  8.         };
  9. }
复制代码

去掉了smartdns,直接用clash来跑,然后在线检查的脚本稍微调整了一下,带有重试次数和停止icmp响应(用于触发ros在线检查切换dns的那个脚本)

  1. #!/usr/bin/bash
  2. COUNT=0
  3. MAX_COUNT=3
  4. while [ $COUNT -lt $MAX_COUNT ]
  5. do
  6.         SER=0
  7.         NET=0
  8.         if [ $(curl --connect-timeout 5 --interface utun -w "%{http_code}" -s https://www.google.com/generate_204) -eq 204 ];then
  9.                 NET=1
  10.         fi
  11.         if /etc/init.d/bird status|grep Active|grep -q running;then
  12.                 SER=1
  13.         fi
  14.         if [ $NET -eq 1 ] && [ $SER -eq 0 ];then
  15.                 /etc/init.d/bird start
  16.                 echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
  17.                 exit 0
  18.         fi
  19.         if [ $NET -eq 0 ] && [ $SER -eq 1 ];then
  20.                 let COUNT+=1
  21.                 if [ $COUNT -eq $MAX_COUNT ];then
  22.                         /etc/init.d/bird stop
  23.                         echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
  24.                 fi
  25.                 continue
  26.         fi
  27.         exit 0
  28. done
复制代码

clash用这个配置,订阅里的url改成你自己的,利用PROCESS-NAME走直连,需要clash的premium版本
启动之后用yacd之类的接进去确认下global是不是direct,然后在proxy组里选你要的节点

  1. dns:
  2.   enable: true
  3.   ipv6: false
  4.   listen: 0.0.0.0:53
  5.   enhanced-mode: redir-host
  6.   use-hosts: true
  7.   default-nameserver:
  8.     - 119.29.29.29
  9.     - 223.5.5.5
  10.   nameserver:
  11.     - 119.29.29.29
  12.     - 223.5.5.5
  13.   fallback:
  14.     - https://dns.google/dns-query
  15.     - https://cloudflare-dns.com/dns-query
  16.     - https://1.1.1.1/dns-query
  17.     - https://8.8.8.8/dns-query
  18.     - https://8.8.4.4/dns-query
  19.   fallback-filter:
  20.     geoip: true
  21.     ipcidr:
  22.       - 240.0.0.0/4
  23. tun:
  24.     enable: true
  25.     stack: system
  26.     auto-detect-interface: true
  27. port: 7890
  28. socks-port: 7891
  29. redir-port: 7893
  30. allow-lan: true
  31. mode: Rule
  32. log-level: silent
  33. external-controller: '0.0.0.0:8080'

  34. proxy-groups:
  35.   - name: PROXY
  36.     type: select
  37.     proxies:
  38.       - subscribe

  39. proxy-providers:
  40.   subscribe:
  41.     type: http
  42.     url: [clash订阅链接]
  43.     interval: 86400
  44.     path: ./proxy/subscribe.yaml
  45.     health-check:
  46.       enable: false
  47.       interval: 600
  48.       # lazy: true
  49.       url: http://www.gstatic.com/generate_204

  50. rule-providers:
  51.   icloud:
  52.     type: http
  53.     behavior: domain
  54.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt"
  55.     path: ./ruleset/icloud.yaml
  56.     interval: 86400

  57.   apple:
  58.     type: http
  59.     behavior: domain
  60.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt"
  61.     path: ./ruleset/apple.yaml
  62.     interval: 86400

  63.   google:
  64.     type: http
  65.     behavior: domain
  66.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt"
  67.     path: ./ruleset/google.yaml
  68.     interval: 86400

  69.   proxy:
  70.     type: http
  71.     behavior: domain
  72.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
  73.     path: ./ruleset/proxy.yaml
  74.     interval: 86400

  75.   direct:
  76.     type: http
  77.     behavior: domain
  78.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
  79.     path: ./ruleset/direct.yaml
  80.     interval: 86400

  81.   private:
  82.     type: http
  83.     behavior: domain
  84.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt"
  85.     path: ./ruleset/private.yaml
  86.     interval: 86400

  87.   telegramcidr:
  88.     type: http
  89.     behavior: ipcidr
  90.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt"
  91.     path: ./ruleset/telegramcidr.yaml
  92.     interval: 86400

  93.   cncidr:
  94.     type: http
  95.     behavior: ipcidr
  96.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
  97.     path: ./ruleset/cncidr.yaml
  98.     interval: 86400

  99.   lancidr:
  100.     type: http
  101.     behavior: ipcidr
  102.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt"
  103.     path: ./ruleset/lancidr.yaml
  104.     interval: 86400

  105.   applications:
  106.     type: http
  107.     behavior: classical
  108.     url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt"
  109.     path: ./ruleset/applications.yaml
  110.     interval: 86400

  111. rules:
  112.   - PROCESS-NAME,clash,DIRECT
  113.   - RULE-SET,applications,DIRECT
  114.   - RULE-SET,private,DIRECT
  115.   - RULE-SET,icloud,DIRECT
  116.   - RULE-SET,apple,DIRECT
  117.   - RULE-SET,google,DIRECT
  118.   - RULE-SET,proxy,PROXY
  119.   - RULE-SET,direct,DIRECT
  120.   - RULE-SET,lancidr,DIRECT
  121.   - RULE-SET,cncidr,DIRECT
  122.   - RULE-SET,telegramcidr,PROXY
  123.   - GEOIP,LAN,DIRECT
  124.   - GEOIP,CN,DIRECT
  125.   - MATCH,PROXY
复制代码

作者: angelfish    时间: 2022-9-18 19:22
guitengyue 发表于 2022-6-28 10:09
回头写一份
网上那个要填坑

期待下保姆级别的教程!!
作者: guitengyue    时间: 2022-9-18 20:16
angelfish 发表于 2022-9-18 19:22
期待下保姆级别的教程!!

保姆级教程其实就是楼上的博客有
但是我最终还是回归到了ip标记方式。。。
说实话,ospf的响应真心比ip快那么一点(ip分流,0.1-0.3s级别,ospf可能是0.01-0.05s级别),但是有几个致命问题,我至今还是解决不了
作者: spiral    时间: 2022-9-28 01:40
Ryo_ 发表于 2022-8-18 00:21
博客最近没更新,其实已经换成BGP来做了,不过区别不大,而且ospf收敛速度还更快
我用BGP主要是不用和组播那些 ...

刚开始了解ospf方式,以前经常旁路由挂了后影响家人使用,希望后面我自己能配置出来。

感谢前辈大佬们的探索和分享。

@lanhun @Darcychiu @colorjuice @gnattu
作者: irdeto    时间: 2024-1-21 09:23
guitengyue 发表于 2022-9-18 20:16
保姆级教程其实就是楼上的博客有
但是我最终还是回归到了ip标记方式。。。
说实话,ospf的响应真心比ip快 ...

现在到什么进度了
作者: kelvin2517    时间: 2024-1-21 09:56
colorjuice 发表于 2022-6-17 16:15
那肯定啊,你用OSPF通告给ROS说这个IP要走OpenWrt,然后你在OpenWrt里面的工具/插件再排除掉,那肯定要被 ...

我也推荐这种方式,简单稳定,主路由压力小,而且旁路由挂了也不影响所有设备上网。
1. op旁路由安装shellclash和AdGuardhome
2. clash配置为全局fq,打开fakeip,关掉DNS劫持,比如设置DNS端口为253
3. AdGuardhome端口为53,导入gfwlist,gfwlist中DNS列表的上游设置为clash DNS端口,如127.0.0.1:253。参考https://github.com/kpivy8/gfwlist2AdGuardHome其他DNS还是走主路由或者114之类。
4. ros主路由设置一条静态路由,fakeip地址段198.18.0.0/16,走clash的ip。如果需要用电报之类走ip的,再增加几条静态路由,讲指定ip地址也走clash。
5. ros主路由的DHCP server中将需要科学的设备根据mac地址设置为静态,DNS指定两个,op旁路由ip和ros主路由ip。
作者: Evalyn    时间: 2024-5-12 13:38
没想到在CHH碰到一样玩法的了。

手搓了个全自动的OSPF旁路方案,全真IP,不需要预加载路由表也不用fakeIP,走DNS route自动通告。
https://github.com/povsister/v2ray-core




欢迎光临 Chiphell - 分享与交流用户体验 (https://www.chiphell.com/) Powered by Discuz! X3.5