
目前使用的是 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 是不能换的。想请教一下各位大佬有什么新思路或者好的方案吗?
1 hackroad 1 天前 |
2 Naples 1 天前 via Android Ip 分流用 bgp ,dns 分流我用的 ROS 的 l7 过滤、劫持,你也可以用第三方的 |
3 docx 1 天前 via iPhone 有代理还折腾什么 dns |
4 Jaco3426 OP @hackroad 确实是能走国内的走了国外,所以之前我也是在解决这个问题,并不是 dns 解析出来的 ip 不正确,而是这些地址他就是不在 cnip 列表里。比如叮咚买菜解析出来的 ipv6 地址他就是不在 cnipv6 表里(我把几个知名的列表都合并了),但它却在 cndomain 表里,必须通过将域名解析到 ip 添加到列表内来维护,不然连 app 都打不开。总不可能是国内的买菜软件能解析出不在国内的 ip 地址吧?事实就是这个地址并不在现成的列表当中。而维护域名比 ip 简单太多了。但之前单纯访问国外的网站也会卡(我到现在不知道哪里有问题直接放弃这个方案了)。而且我这环境比较复杂,ros 多 isp ,要做源进源出,负载均衡等等,很容易就有规则冲突还不好排查,oss 也是多网卡,写透明代理,包括回包路径之类的问题,有哪里没想到就得停下很久。 |
7 Ipsum 1 天前 via Android 你可以试试 mosdns ,使用 fakeip 只分流 gfw 域名到 xray 。 |
9 crysislinux 1 天前 via Android v6 不准就把 v6 的结果丢了好了 |
10 hackroad 1 天前 @Jaco3426 #4 之前折腾 ipv6 的时候确实碰到过类似情况,app 卡顿,打开网页卡顿,索性关了 ipv6. 维护 2 个库确实麻烦,不过商业库可能好点,试试商业库。 |
11 libregratis 1 天前 可以试试 daed ,之前用 ImmortalWrt 临时跑了一下,分流的效果不错 |
12 Jaco3426 OP @libregratis 请问说的是 dae 的 dashboard 吗?我没法换 dae ,现在支持 xhttp 的好像只有 xray 。 |
13 libregratis 1 天前 @Jaco3426 嗯,daed 把前端 dae-wing 和后端 dae 打包了,有一个简单的 dashboard ;开始用 Ubuntu 跑的,需要配置 SNAT (因为国内不通但海外通),后来在 U 盘上跑了几周 ImmortalWrt ,因为软件源收录了 daed ,直接 opkg install 即可;优点,国内外的分流体验很不错;缺点,dashboard 够用但功能没有 mihomo 的强大 |
14 Jaco3426 OP @libregratis 可惜,现在支持 xhttp 的只有 xray 自己的内核,dae/mihomo 之类的全都不能用。 |
15 wuruxu 1 天前 我目前用在 openwrt 上 wireguard + dnsmasq + nft 通过域名来分流,效果很不错 |
16 yeh 1 天前 自己写了个 mosdns 的规则, 有 cnlist (给真实 ip ),gfwlsit (给 fakeip )。 都不在 2 者名单的,先走 cf/google + ecs 国内 查一遍 ip ,如果 ip 在 cnip ,则给真实 ip ,否则给 fakeip 。 这里面不包括广告过滤,没缓存,就是尽快给最新结果 前面加了个 adguardhome ,来缓存 dns 结果和 x 广告,效果还行。 |
19 an0nym0u5u5er 1 天前 给你个我前几天刚更新的手搓版本。 内核 mihomo ,刚从 clash verge rev 切到了 clash party 。 主要使用了 GEOsite 和 GEOIP ,优先匹配 GEOsite ,然后匹配 GEOip ,这样在域名层面能匹配并正确分流的,就不用等 DNS 之后再分流了,国内的网站也能正确的解析到国内的 IP ,因为都是 direct 。 还有一些国外的 APP ,根据进程名匹配,直接走代理。 太具体的不讲了,贴一下片段 rules: # LAN - GEOSITE,private,DIRECT,no-resolve - GEOIP,private,DIRECT,no-resolve - GEOIP,lan,DIRECT,no-resolve # GEOSITE - GEOSITE,cn,DIRECT - GEOSITE,apple-cn,DIRECT - GEOSITE,google,PROXY - GEOSITE,gfw,PROXY - GEOIP,telegram,PROXY - GEOSITE,geolocation-!cn,PROXY # GEOIP - GEOIP,cn,DIRECT # other - DOMAIN-SUFFIX,cn,DIRECT # 按进程名划分的(国内) - PROCESS-NAME,Telegram,PROXY - PROCESS-NAME,Raycast,PROXY - PROCESS-NAME,Dropbox,PROXY 目前使用的 GEO 数据 # 5. import GEO Data geo-auto-update: true geo-update-interval: 24 geodata-mode: true # Custom GEO Download Address # source https://wiki.metacubex.one/en/config/general/ # data https://github.com/MetaCubeX/meta-rules-dat geox-url: # geoip: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat" geoip: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat" # geosite: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat" geosite: "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat" mmdb: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb" asn: "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb" |
21 Jaco3426 OP @an0nym0u5u5er 谢谢。不过我的问题在于如何让 ros 或旁路的其他服务通过域名分流,不太喜欢把流量全给代理。 |
23 wymam 1 天前 我是直接把国外 V6 全部拦截,只放行国内 UI !国外全部走 V4 !然后根据 IP 列表,国内直连,国外到 op |
25 piaorenyong 1 天前 同 PaoPaoDNS+ROS ,不过我用的 singbox |
27 Jaco3426 OP @piaorenyong 是好用的,刚在 ros 里装了 ppdns ,用着也不错。作者说近期可能会更新。 |
28 keyfunc 1 天前 试试 mosdns ,十分的好用,域名规则可以直接用 https://github.com/Loyalsoldier/v2ray-rules-dat/tree/release ,一般加载 direct-list.txt 和 proxy-list.txt 就足够用了,其余的可以同时查询国内 dns 和国外 dns ,返回国内 ip 就直接返回,返回国外 ip 就再扔给后面的代理查一次。 |
30 keyfunc 1 天前 不要把域名分流的事情扔给 RouterOS ,你说的 ppdns 和 mosdns 一样的话,ros 防火墙上劫持下 dns 流量,把所有 dns 请求全部仍给 ppdns 处理。mosdns 可以根据域名来选择使用国内 DNS 查询还是 xray 的 dns server 来查询。你发现的国内域名解析出来国外 ip ,大可能是你使用了国外 dns 解析出的问题。 |
31 chiikawa 21 小时 27 分钟前 旁路 AdGuard+mihomo 负责 DNS 查询和代理,同时 OSPF 宣告非 CNIP 走代理,ROS 检测代理是否正常自动启停 OSPF 恢复直连 |
33 Jaco3426 OP @keyfunc 并不是国内解析出国外,而是解析出的国内 ipv6 地址并不在 cnipv6 ( geoip:cn )列表里,如果根据 ip 分流而不根据域名分流,那它自然被分流去了国外导致无法访问。正常解析流程是如果域名在 geosite:cn ,那 mosdns (带或不带 ecs 可能需要设置多条规则,有些服务商不支持 ecs )去查设置的国内上游,检查返回的 ip 是否在 geoip:cn (这里出现问题)然后再进行后面的步骤...除了国外不使用 ipv6 ,目前没想到什么解决方案 |
34 luolw1998 20 小时 6 分钟前 所有 ipv6 走直连,境外域名走 fake ip |
35 keyfunc 19 小时 48 分钟前 @Jaco3426 IPv6 池分配的还是十分规范的,京东买菜哪个域名解析出来的 IP 不在 IPv6CN 列表里,域名和解析出来的 IP 都贴出来看一看 |
36 Ipsum 19 小时 5 分钟前 @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 可以持久化,也不知道为什么需要这个功能。 |
37 Jaco3426 OP @keyfunc 现在没时间去复现了。我现在查出的地址都在列表内了。但是感觉不管用什么服务器解析,他都应该解析出国内的地址,之前我是用纯 ip 来分流的,要么是我分流设置有问题(和负载均衡这些规则有冲突),要么当时 ip 没更新在列表内。 |
39 lnbiuc 7 小时 18 分钟前 感觉预制域名列表的分流方案都有坑,列表肯定不完整而且更新不及时 你不 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 |
40 Jaco3426 OP @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 之类的,估计得研究一阵子了。 |