关于国内外分流的问题请教一下大佬们

1 月 25 日
 Jaco3426

目前使用的是 RouterOS 物理机+OSS 物理机旁路透明代理

目前是使用 OSS 部署 PaoPaoDNS 配合 Xray 的 fakedns 进行分流,PPDNS 设置参数强制使非 CN 域名的上游 DNS 服务器为 Xray 的 DNS 入口,所有设备 DNS 设置为 PPDNS ,网关为 ROS ,ROS 将指定设备 Address-List 到 fakeip 段连接通过 PBR 到 OSS 的 Xray 的 Tproxy 入口。

之前有试过 ROS 维护 CNIP 表通过 Socksify 或 PBR 进行分流,效果不太理想,一来不知道是当时思路不够成熟有配置错误还是其他原因,访问网页会卡顿,二来 cnip 列表很难维护,依靠网上现成不够全面的列表会导致有些应用不能使用,如某买菜 app 等,为了修复这个问题,我写了个脚本读取 OSS 脚本生成的 geosite_cn.txt (需要修改文件内容为正则表达式并将每行计数到行首,因为文件过大,ros 只支持将 60kb 以内的 txt 写入数组,需要通过 read+offset+chunk-size 读取 txt 中每一行的正则表达式),通过将/ip/dns/cache 中的 name 与正则表达式匹配,将匹配得到的 name 对应的 ip 更新进 CNIP 表以达到类似使用域名分流的效果,但是这样一来并非实时更新,二来 ros 的循环读取比对非常的久(千万级甚至更多),维护一次列表大概需要 1 分钟(我是 x86 物理机,i513500te+32g3200 频率内存),ros 好像并不能使用多核来运行脚本?(这方面并不太懂)且脚本需要不间断循环,并不能触发式运行。

折腾了半天发现效果并不好,所以换到现在使用的这套配置,流畅不卡顿。不知是使用 fakeip 的原因还是我之前的配置有问题。但思来想去,还是比较想使用纯 realip ,但是个人认为这高度依赖域名分流,但 ros 本身并不能很好的完成这项工作。因为所有都是 xhttp 部署的节点,所以 xray 是不能换的。想请教一下各位大佬有什么新思路或者好的方案吗?

4633 次点击
所在节点    宽带症候群
43 条回复
Jaco3426
1 月 25 日
@an0nym0u5u5er 谢谢。不过我的问题在于如何让 ros 或旁路的其他服务通过域名分流,不太喜欢把流量全给代理。
wuruxu
1 月 25 日
@Jaco3426 出国的
wymam
1 月 25 日
我是直接把国外 V6 全部拦截,只放行国内 UI !国外全部走 V4 !然后根据 IP 列表,国内直连,国外到 op
pagxir
1 月 25 日
@Jaco3426 可以用 nat64 ,DNS 那边采用 DNS64 ,需要代理的返回 nat64 的 v6 IP ,不需要的全直连。
piaorenyong
1 月 25 日
同 PaoPaoDNS+ROS ,不过我用的 singbox
Jaco3426
1 月 25 日
@pagxir 是好办法,buuuuut ,ros 并不支持 nat64 ,估计今年能支持吧。
Jaco3426
1 月 25 日
@piaorenyong 是好用的,刚在 ros 里装了 ppdns ,用着也不错。作者说近期可能会更新。
keyfunc
1 月 26 日
试试 mosdns ,十分的好用,域名规则可以直接用 https://github.com/Loyalsoldier/v2ray-rules-dat/tree/release ,一般加载 direct-list.txt 和 proxy-list.txt 就足够用了,其余的可以同时查询国内 dns 和国外 dns ,返回国内 ip 就直接返回,返回国外 ip 就再扔给后面的代理查一次。
Jaco3426
1 月 26 日
@keyfunc ppdns 用的就是 mosdns ,解析的逻辑大家都是大差不差的,我的问题不在于此。
keyfunc
1 月 26 日
不要把域名分流的事情扔给 RouterOS ,你说的 ppdns 和 mosdns 一样的话,ros 防火墙上劫持下 dns 流量,把所有 dns 请求全部仍给 ppdns 处理。mosdns 可以根据域名来选择使用国内 DNS 查询还是 xray 的 dns server 来查询。你发现的国内域名解析出来国外 ip ,大可能是你使用了国外 dns 解析出的问题。
chiikawa
1 月 26 日
旁路 AdGuard+mihomo 负责 DNS 查询和代理,同时 OSPF 宣告非 CNIP 走代理,ROS 检测代理是否正常自动启停 OSPF 恢复直连
Jaco3426
1 月 26 日
@chiikawa 这个貌似可行,今天试试
Jaco3426
1 月 26 日
@keyfunc 并不是国内解析出国外,而是解析出的国内 ipv6 地址并不在 cnipv6 ( geoip:cn )列表里,如果根据 ip 分流而不根据域名分流,那它自然被分流去了国外导致无法访问。正常解析流程是如果域名在 geosite:cn ,那 mosdns (带或不带 ecs 可能需要设置多条规则,有些服务商不支持 ecs )去查设置的国内上游,检查返回的 ip 是否在 geoip:cn (这里出现问题)然后再进行后面的步骤...除了国外不使用 ipv6 ,目前没想到什么解决方案
CS50
1 月 26 日
所有 ipv6 走直连,境外域名走 fake ip
keyfunc
1 月 26 日
@Jaco3426 IPv6 池分配的还是十分规范的,京东买菜哪个域名解析出来的 IP 不在 IPv6CN 列表里,域名和解析出来的 IP 都贴出来看一看
Ipsum
1 月 26 日
@Jaco3426 #8 考虑 cnip 就是自己找事折腾。直接在 gfw 中的网站 dns 返回 fakeip ,正常网站 dns 直接返回 realip ,哪需要考虑 ipv6 的问题。而且 realip 可能出现错误分流。比如 a.com 是 gfw 域名,b.com 是正常网站,a 和 b 都在同一个 cdn 中。这个 realip 是没法区分的。我感觉你觉得 fakeip 不爽的问题是没有开 fakeip 持久化,导致重启服务后分流混乱。如果 xray 之类的服务端能使用 hash 直接在地址池里半持久化 fakeip 或者默认直接开始持久化应该会好很多,因为很多人不知道 fakeip 可以持久化,也不知道为什么需要这个功能。
Jaco3426
1 月 26 日
@keyfunc 现在没时间去复现了。我现在查出的地址都在列表内了。但是感觉不管用什么服务器解析,他都应该解析出国内的地址,之前我是用纯 ip 来分流的,要么是我分流设置有问题(和负载均衡这些规则有冲突),要么当时 ip 没更新在列表内。
Jaco3426
1 月 26 日
@Ipsum 我再研究研究
lnbiuc
1 月 26 日
感觉预制域名列表的分流方案都有坑,列表肯定不完整而且更新不及时
你不 care 所谓 DNS 泄漏的话有个完美方案,不维护不信任 geosite (定向分流的除外,比如 geosite:category-ai-chat-!cn ),所有域名默认先查国内 dns ,然后判断返回 ip 是否是 geoip:cn ,不是则 fallback 到国外 DNS 。
如果你 care DNS 泄漏的话,可以带 ECS 查询 8.8.8.8 ,然后看返回 ip 是否是 geoip:cn 来判断使用国内 dns 重新解析还是使用国外 dns 重新解析
这样国内网站能直连的一定是最快的。再配合 geoip 分流下,geoip:cn 直连其他的全部代理,设置可以细分 geoip:us ,geoip:eu
fakeip 单机用挺好的,局域网用坑太多了 真不建议
xray 就有个非常好的方案 https://xtls.github.io/document/level-1/routing-with-dns.html
Jaco3426
1 月 27 日
@lnbiuc 这个几个月前看过,月初更新了之后我又看了一遍,这样做的前提的,所有流量都要过 xray ,不是 allinone 环境这种方案我一开始就 pass 了。如果分流主路由来做,那么如果不使用 fakeip 就需要二次甚至三次查表(一次查是否为 geosite:cn ,两次查 geoip:cn:一次在 DNS 服务器,一次在主路由),虽然 mosdns 这类能读取二进制文件的,查表速度很快,但是体感来说 ros 好像并不快。如果使用 fakeip ,以我现在的方案为例,先查询 ppdns ,ppdns 递归查询结果属于 geoip:cn ,直接返回 realip ,否则 ppdns 会扔到 xray 的 fakedns 返回 fakeip 。这样主路由不需要查表,只需要将 fakeip 段以及 tg 这种的 realip 列表 PBR 到旁路就可以了。这种方案体感其实很好,但 fakeip 总归有些问题,我这几天一直在实验有没有新的全 realip 方案,是通过一些路由协议,还是其他 mangle/nat 之类的,估计得研究一阵子了。

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

https://www.v2ex.com/t/1188156

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

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

© 2021 V2EX