Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ACL里添加- reject(geosite:cn)后无法测速 #905

Closed
toyo2333 opened this issue Jan 18, 2024 · 10 comments
Closed

ACL里添加- reject(geosite:cn)后无法测速 #905

toyo2333 opened this issue Jan 18, 2024 · 10 comments

Comments

@toyo2333
Copy link

日志

ERROR   TCP error       {"addr": "xxxx:xxxx", "id": "user", "reqAddr": "www.gstatic.com:80", "error": "rejected"}

客户端clash测速就是error,手机上的应用也是

@toyo2333 toyo2333 added the bug Something isn't working label Jan 18, 2024
@haruue
Copy link
Collaborator

haruue commented Jan 18, 2024

v2fly domain list 是把 www.gstatic.com 列入 cn 域名的。 这个域名有中国的备案并且有中国境内的 CDN (由 北京谷翔信息技术有限公司 运营)。 实践中通常把有中国境内 CDN 的 Google 域名列入 cn 域名, 用于在客户端侧做境内外分流加速并节省代理流量。

https://github.com/v2fly/domain-list-community/blob/a0826ad5297885d779b55f01050f41c4ca7572ce/data/google#L716

因此这不能算 bug, 如果只是要解决你遇到的问题, 在 ACL 里面, reject(geosite:cn) 规则的前面加上 default(geosite:google) 就好了。

@haruue haruue removed the bug Something isn't working label Jan 18, 2024
@toyo2333
Copy link
Author

toyo2333 commented Jan 19, 2024

我在xray里同样的写法 就没有出问题。是不是两个协议用的geosite.dat不同啊。我在hy这边还回去了。换成了geoip:cn
。不过缺点就是,每条请求都要进行一次域名解析进行IP规则匹配检查后再出站。

@haruue
Copy link
Collaborator

haruue commented Jan 19, 2024

xray 支持客户端分流。 如果客户端都把 cn 流量 direct 了, 那服务端 block cn 流量也不会出问题。

@toyo2333
Copy link
Author

xray 支持客户端分流。 如果客户端都把 cn 流量 direct 了, 那服务端 block cn 流量也不会出问题。

哦哦,我的意思是xray那边我也用geosite在服务端block cn流量,测速就没有问题。所以我觉得可能是两边用的dat文件规则判定不同。

@haruue
Copy link
Collaborator

haruue commented Jan 20, 2024

能把你的 xray 客户端和服务端配置文件(可以删掉 inbounds 和 outbounds 里的鉴权信息)发来吗? 我们可以测试看看和 hysteria 的判定上有哪些差异。

@toyo2333
Copy link
Author

客户端用的是同一个Clash规则文件。所以不用发了。服务端xray的路由

    "routing": {
        "rules": [
            {
                "type": "field",
                "domain": [
                    "geosite:cn"
                ],
                "outboundTag": "block"
            },
            {
                "type": "field",
                "protocol": ["bittorrent"],
                "outboundTag": "block"
            },
            {
                "type": "field",
                "inboundTag": ["socks-in"],
                "outboundTag": "warp-IPv6"
            },
            {
                "type":"field",
                "outboundTag":"warp-IPv6",
                "domain":[
                    "geosite:openai",
                    "geosite:twitter",
                    "geosite:reddit"
                ]
            }
        ]
    },

在clash verge客户端点击xray(reality)节点测速
xray服务端日志里是 accepted tcp:www.gstatic.com:80 [direct]

也就是说路由规则没有名中,任何阻止或分流的规则,也就是在xray的geosite里www.gstatic.com 不是 CN

和HY的区别就是这把,HY2里就和你说的一样,这个算是CN,于是在ACL里的block规则就block掉了,导致客户端点HY2节点测速就error。

就像你说的,确实可能不算是bug。我也不知道Xray那边用的库是基于哪里的。我以及改了。HY2配置,让geosite:CN的走warp出站了。

@haruue
Copy link
Collaborator

haruue commented Jan 20, 2024

我试验了一下, 使用你提供的配置文件节选编写一个完整的 xray 配置文件, 启动了 xray

点这里, 展开过长的配置文件
{
  "log": {
    "loglevel": "warn"
  },
  "inbounds": [
    {
      "protocol": "socks",
      "listen": "127.0.0.1",
      "port": 21081,
      "settings": {
        "udpEnabled": false
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {
        "domainStrategy": "AsIs"
      },
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "settings": {
        "response": {
          "type": "http"
        }
      },
      "tag": "block"
    }
  ],
  "dns": {
    "servers": [
      "8.8.8.8",
      "8.8.4.4"
    ]
  },
  "routing": {
    "strategy": "rules",
    "settings": {
      "domainStrategy": "IPIfNonMatch",
      "domainMatcher": "mph",
      "rules": [
            {
                "type": "field",
                "domain": [
                    "geosite:cn"
                ],
                "outboundTag": "block"
            },
            {
                "type": "field",
                "protocol": ["bittorrent"],
                "outboundTag": "block"
            },
            {
                "type": "field",
                "inboundTag": ["socks-in"],
                "outboundTag": "direct"
            },
            {
                "type":"field",
                "outboundTag": "direct",
                "domain":[
                    "geosite:openai",
                    "geosite:twitter",
                    "geosite:reddit"
                ]
            }
      ]
    }
  }
}

我仅修改了 "outboundTag": "warp-IPv6""outboundTag": "direct" , 因为我这里没有 warp。

xray 不会自动下载/更新 geosite.dat, 这个操作通常由包管理或者一键脚本提供, 我检查了下看来大部分实现和 Hysteria 一样是从 https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat 下载的 geosite.dat。

我启动了 xray, 并发起 socks5 请求, 可以看到基于您提供的路由规则, www.gstatic.com 确实是被 block 的。

image

我怀疑你那里没有被 block 是以下原因:

  1. 你服务器上的 geosite.dat 一直都没有更新, 或者你使用的安装脚本/包管理从别的地方下载了 geosite.dat , 你可以上传你服务器上的 geosite.dat (可能和 xray 配置文件在同一个目录, 或者在 /usr/share/xray/geosite.dat ) 供我们进行进一步的测试。

  2. 你配置了 "outboundTag": "block", 但是没有设置一个 tag 为 block 的 outbounds, 这种情况下 xray 会使用默认的 outbounds (服务端通常是一个 tag 为 direct 的 freedom, 也就是放行), 并且你会看到这样的日志

    2024/01/20 16:17:03 [Warning] [3713748176] app/dispatcher: non existing outTag: block
    2024/01/20 16:17:03 tcp:127.0.0.1:42324 accepted tcp:www.gstatic.com:443 [direct]
    

@toyo2333
Copy link
Author

辛苦你了。我使用的是teddysun的docker部署的Xray。晚一点我发下完整配置。block的出站是有配的。晚一点我整理下发

@haruue
Copy link
Collaborator

haruue commented Jan 20, 2024

我使用的是teddysun的docker部署的Xray。

我不用 docker, 我搜索了一下找到了这个 dockerfile
https://github.com/teddysun/across/blob/master/docker/xray/Dockerfile

这里面的 geosite.dat 是从 https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat 下载的,
我试了一下配置 hysteria 载入这个 geosite.dat , reject(geosite:cn) 是不会阻止 www.gstatic.com 的。

@toyo2333
Copy link
Author

我使用的是teddysun的docker部署的Xray。

我不用 docker, 我搜索了一下找到了这个 dockerfile

https://github.com/teddysun/across/blob/master/docker/xray/Dockerfile

这里面的 geosite.dat 是从 https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat 下载的,

我试了一下配置 hysteria 载入这个 geosite.dat , reject(geosite:cn) 是不会阻止 www.gstatic.com 的。

感谢你仔细的排查。OK 那就是域名库的问题而不是代理程序的问题了。 暂时我先把cn都用warp出站了。后面我在想想怎么做更合理。再次感谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants