2dust / v2rayN

A GUI client for Windows, support Xray core and v2fly core and others
https://1.2345345.xyz
GNU General Public License v3.0
67.21k stars 11.21k forks source link

sing-box core 非自定义配置测试(二) #3770

Closed 2dust closed 1 year ago

2dust commented 1 year ago

所有v2ray core支持的协议,非自定义配置现在可以生成 sing-box 的配置文件了

测试方式

注意

2dust commented 1 year ago

之前的测试issue https://github.com/2dust/v2rayN/issues/3753

chika0801 commented 1 year ago

日志级别 warning 应该对应 warn,现在是debug。其它几个级别选项测试了正常。

chika0801 commented 1 year ago

选VLESS协议添加一个节点信息

1 此时跳过证书验证我选 true,生成的配置也是"insecure": true, 正常。 1

2 我编辑这个节点,把tls换成 reality,此时界面变了后,跳过证书验证是维持的true的值,并生成在了singbox配置中。

它应该是当用户选REALITY的时候,这个 "insecure": 要么不生成,要么生成出来就只能是false。用REALITY是不支持自签证书的(我认为是不支持)

2

3

chika0801 commented 1 year ago

路由设置中的 singbox域名解析策略 排序上要不要把空白放到最下方,以方便诱导用户要选的话,选ipv4_only。

我记得解压后用户第一次运行程序,它默认是空白状态没错吧。

2

chika0801 commented 1 year ago

路由设置中用户填域名时,我看你用的是

domain 匹配完整域名。

domain_suffix 匹配域名后缀。

1

我习惯是填的

domain_keyword 匹配域名关键字。

效果我想了下应该没区别。看你怎么想了吧。

chika0801 commented 1 year ago

路由规则中小优化建议

比如下图用户填了2行,但是他不知道要用,结尾,如图 1

他确定后实际变成了这样,你能不能设计成检查到用户是换了行的,忘记最后加,给他自动加一个,了? 2

比如我发现第2个用户多输入了,实际你程序中是把这个,自动去掉了。 3

chika0801 commented 1 year ago

路由设置里 设为活动选集 现在是先点右键,再点左键选,键盘回车的作用现在是把灰色选框向下移动一行直到最底一行。

建议回车的作用要不默认 同 设为活动选集效果(我推荐这行为符合直觉)

或是改成 现在的双击鼠标左键进入编辑详细的界面

1

chika0801 commented 1 year ago

这里补充一个建议,如果用户在s ing-box DNS设置里不填内容,你干脆不要生成整个 DNS 字段 ,不然你生成有 server字段,没有 rule字段,DNS过程会变得奇怪的慢。

不生成整个 DNS 部分字段 是用系统DNS,反正用户不懂,DNS泄露也没几个人注意到。

~sing-boxDNS不填现在默认给的是 tls 8.8.8.8。我看路由器插件上都是默认用 tcp 8.8.8.8查。~

~就算不想用UDP查,就tcp查也够了嘛 tls得又多点延时?建议优化下了。~

1

chika0801 commented 1 year ago

忽略这个建议。原因是我发现 DNS里只填 server字段。在访问网站是 DNS解析速度会莫名变慢许多。

我自己做模板没写 整个 DNS 字段 ,自己用 tun 模式又是写好了的,刚测试才发现了这莫名现象。

~sing-boxDNS设置我只想填 dns里面的server字段,保存会提示不行。~

~我猜你做的校验逻辑是还要必须有rule字段。建议改下只要有server字段也让保存。~

1

2

chika0801 commented 1 year ago

这个参数,我在TUN里面 DNS 设置中,我看 sing-box文件是用在比如去广告反回成功的信号。

正常的DNS解决,还是把 这个关闭cache不开 false好吧

1

chika0801 commented 1 year ago

sing-box点击导入默认DNS,这样改的原因

  1. "servers" 分成一个远程,一个本地,从上到下原则 ,第1个是默认远程
  2. tcp://1.1.1.1 如果用 1.1.1.1(UDP)sing-box我一直是遇到莫名连不通服务端。
  3. 223.5.5.5 本地走direct的却用udp通得了,就很奇怪。

流程 用户用了 "domain_strategy": "ipv4_only" 参数,DNS RULE只有geosite cn用 dns_local(223.5.5.5)解析。没命中的走第1个 远程 tcp 1.1.1.1,去DNS泄露网站查不会露

DNS字段的 strategy https://sing-box.sagernet.org/zh/configuration/dns/#strategy

拨号字段的 domain_strategy https://sing-box.sagernet.org/zh/configuration/shared/dial/#domain_strategy

让我想起*ray里面类似的。我没仔细研究sing-box上面2个都写1个值或不同值有什么结果。

*ray里是

DNS里
queryStrategy: "UseIP" | "UseIPv4" | "UseIPv6"
UseIPv4 只查询 A 记录;UseIPv6 只查询 AAAA 记录。默认值为 UseIP,即查询 A 和 AAAA 记录。
出站里的
domainStrategy: "AsIs" | "UseIP" | "UseIPv4" | "UseIPv6"
在目标地址为域名时, 配置相应的值, Freedom 的行为模式如下:
"AsIs": Freedom 通过系统 DNS 服务器解析获取 IP, 向此域名发出连接.
"UseIP"、"UseIPv4" 和 "UseIPv6": Xray 使用 [内置 DNS 服务器](https://xtls.github.io/Xray-docs-next/config/dns.html) 解析获取 IP, 向此域名发出连接. 默认值为 "AsIs"。

我先建议你不写 DNS字段的 strategy。反正你做了 拨号字段的 domain_strategy,这个值做了选项菜单的。

配置示例

点击查看
``` { "log": { "level": "debug", "timestamp": true }, "dns": { "servers": [ { "tag": "dns_remote", "address": "tcp://1.1.1.1", "detour": "proxy" }, { "tag": "dns_local", "address": "223.5.5.5", "detour": "direct" } ], "rules": [ { "geosite": "cn", "server": "dns_local", "disable_cache": false } ] }, "inbounds": [ { "type": "socks", "tag": "socks", "listen": "127.0.0.1", "listen_port": 10808, "sniff": false, "sniff_override_destination": false, "domain_strategy": "ipv4_only" }, { "type": "http", "tag": "http", "listen": "127.0.0.1", "listen_port": 10809, "sniff": false, "sniff_override_destination": false, "domain_strategy": "ipv4_only" } ], "outbounds": [ { "type": "vless", "tag": "proxy", "server": "", "server_port": 443, "uuid": "", "flow": "xtls-rprx-vision", "packet_encoding": "xudp", "tls": { "enabled": true, "server_name": "", "insecure": false, "utls": { "enabled": true, "fingerprint": "chrome" }, "reality": { "enabled": true, "public_key": "", "short_id": "" } } }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" } ], "route": { "rules": [ { "outbound": "block", "geosite": [ "category-ads-all" ] }, { "outbound": "direct", "geosite": [ "cn" ] }, { "outbound": "direct", "geoip": [ "private", "cn" ] } ] } } ```
2dust commented 1 year ago

几个级别选项测试了正常。

额,这个写反了,

2dust commented 1 year ago

路由设置中用户填域名时,我看你用的是

domain 匹配完整域名。

domain_suffix 匹配域名后缀。

我习惯是填的

domain_keyword 匹配域名关键字。

效果我想了下应该没区别。看你怎么想了吧。

这个部分是抄的v2box,暂时按这个来

2dust commented 1 year ago

忘记最后加,给他自动加一个,了?

去掉逗号然后,加入就比较难了,尝试下

2dust commented 1 year ago

忽略这个建议。原因是我发现 DNS里只填 server字段。在访问网站是 DNS解析速度会莫名变慢许多。

我自己做模板没写 整个 DNS 字段 ,自己用 tun 模式又是写好了的,刚测试才发现了这莫名现象。

~sing-boxDNS设置我只想填 dns里面的server字段,保存会提示不行。~

~我猜你做的校验逻辑是还要必须有rule字段。建议改下只要有server字段也让保存。

现在只检查了server,刚刚测试了只有server可以过

2dust commented 1 year ago

这个参数,我在TUN里面 DNS 设置中,我看 sing-box文件是用在比如去广告反回成功的信号。

正常的DNS解决,还是把 这个关闭cache不开 false好吧

1

直接把这个属性去掉了,不要了,按core默认值

2dust commented 1 year ago

v2rayN.zip

前面提到的基本都调整了 disable_cache这个属性直接去掉了

chika0801 commented 1 year ago

建议在 路由设置窗口——移除设置规则,新增按键盘 DEL 为快捷键

1

chika0801 commented 1 year ago

路由设置——二级菜单 “规则集设置” 里面,少做了 sing-box域名解析策略 选框

1

在路由设置本级菜单中是有。我试了下这2级的逻辑,理解了你做在 二级菜单 “规则集设置” 里面 的 域名解析策略 优先于 下图的这本级菜单。

你看有不有必要在二级菜单 “规则集设置” 里面,也按逻辑把 sing-box域名解析策略 选框 做了? 2

chika0801 commented 1 year ago

现在只检查了server,刚刚测试了只有server可以过

已测试,无问题

额,这个写反了,

已测试,日志等级对应的,全无问题

chika0801 commented 1 year ago

忘记最后加,给他自动加一个,了?

去掉逗号然后,加入就比较难了,尝试下

测试了,用户每行不打半角英文逗号,和最后一行多打半角英文逗号, 都能自动检测修复!厉害。

1

chika0801 commented 1 year ago

关于用户输入成中文,逗号的测试

下图2行结尾是中文状态的,逗号 1

确定后查看自动更改情况是,中文状态的,逗号没自动去,把第1行结尾自动加了英文,逗号。 2

如果能随带修复了,可增加用户体验

chika0801 commented 1 year ago

选VLESS协议添加一个节点信息

1 此时跳过证书验证我选 true,生成的配置也是"insecure": true, 正常。 1

2 我编辑这个节点,把tls换成 reality,此时界面变了后,跳过证书验证是维持的true的值,并生成在了singbox配置中。

它应该是当用户选REALITY的时候,这个 "insecure": 要么不生成,要么生成出来就只能是false。用REALITY是不支持自签证书的(我认为是不支持)

2

3

已测试,修复了。

chika0801 commented 1 year ago

这个参数,我在TUN里面 DNS 设置中,我看 sing-box文件是用在比如去广告反回成功的信号。 正常的DNS解决,还是把 这个关闭cache不开 false好吧 1

直接把这个属性去掉了,不要了,按core默认值

哈哈我本来想建议你,这参数我是看sing-box给的示例,是只在 block 广告分类用,你直接不写了,看你自己嘛。我自己用tun模式时的配置,我抄的singbox官方示例 1

chika0801 commented 1 year ago

我现在选的(激活状态)的配置是用sing-box核心,我点更新 geo file 测试,它是更新到了 v2rayN\bin 文件夹的 geoip.dat,geosite.dat 。

你要不要考虑加个逻辑判断,当前选的节点(配置)是哪个核心,更新对应的 geo 文件?

PS 我以前问过一回。 更新geo后你是取消了自动重启 xray/sing-box 一次,能不能考虑加上了?我想应该是下载了新的geo文件,要重新载入(重启) xray/sing-box 才是马上生效。

1

chika0801 commented 1 year ago

检查 更新 sing-box core,现在是没做判断,如果已是最新版本,没判断,还是弹框让下载(不过这功能不急着加,空了做吧)

1

xray我试了现在是1.8.1,点更新会提示已是最新版本 1.8.1

chika0801 commented 1 year ago

想建议下既然这次加了对生成Sing-box配置支持,sing-box里面的 https://sing-box.sagernet.org/zh/examples/shadowtls/ shadowtls 挺好用的。我刚看了你的添加 shadowsocks 菜单里面,还没做这功能,你要不要考虑这回一起做了?

1

chika0801 commented 1 year ago

我选上 开启Mux多路复用。测试了添加 VMESS ss trojan 3种,我看到你做了 trojan 对应sing-box的配置了

生成的配置如下。我不知道你怎么规划Mux这个对于Sing-box里的选项,我自己用测试了 Mux搭shadowtls 和 trojan 2种组合。

你现在是只给的 smux 和官方文档推荐的 4 4 的默认值。sing-box最新1.3 beta9 版本又加了padding这个参数

http://sing-box.sagernet.org/configuration/shared/multiplex/

      "multiplex": {
        "enabled": true,
        "protocol": "smux",
        "max_connections": 4,
        "min_streams": 4,
        "max_streams": 0
      }

我觉得 max_connections min_streams 这2个参数你默认就给4,不给用户自己填的菜单。

1

我现在想到的是你可以在这儿,做2个选项框。当用户把 开启Mux多路复用 选中后出现,第1个框做 protocol 值的选项 http://sing-box.sagernet.org/zh/configuration/shared/multiplex/#protocol

第2个框做 http://sing-box.sagernet.org/configuration/shared/multiplex/#padding padding的true 和 false 选项。

补充出现这2个框后,不给空白选项,你给默认值吧,比如默认是h2mux padding true

比如我测试的 trojan REALITY h2mux padding 配置

        {
            "type": "trojan",
            "tag": "proxy",
            "server": "", // 服务端的 IP
            "server_port": 443,
            "password": "chika",
            "tls": {
                "enabled": true,
                "server_name": "", // 与服务端一致
                "utls": {
                    "enabled": true,
                    "fingerprint": "chrome" // 使用 uTLS 库模拟客户端 TLS 指纹
                },
                "reality": {
                    "enabled": true,
                    "public_key": "", // 服务端执行 ./sing-box generate reality-keypair 生成,私钥对应的公钥,填 "PublicKey" 的值
                    "short_id": "" // 与服务端一致
                }
            },
            "multiplex": {
                "enabled": true,
                "protocol": "h2mux",
                "max_connections": 4,
                "min_streams": 4,
                "padding": true
            }
        },
chika0801 commented 1 year ago

发现了你的细心设置,地址填域名时,在sing-box配置的dns部分你细心的这样生成了配置。吐槽下 能不能把 tag local_local 改下比如叫 local_dns

1

2dust commented 1 year ago

发现了你的细心设置,地址填域名时,在sing-box配置的dns部分你细心的这样生成了配置。吐槽下 能不能把 tag local_local 改下比如叫 local_dns

1

tag 用local_local 是为了防止和用户填入的tag重复 我发下是远程是域名时,如果有dns配置时,一定要把这个域名用本地解析,不然就无法解析

2dust commented 1 year ago

我选上 开启Mux多路复用。测试了添加 VMESS ss trojan 3种,我看到你做了 trojan 对应sing-box的配置了

生成的配置如下。我不知道你怎么规划Mux这个对于Sing-box里的选项,我自己用测试了 Mux搭shadowtls 和 trojan 2种组合。

你现在是只给的 smux 和官方文档推荐的 4 4 的默认值。sing-box最新1.3 beta9 版本又加了padding这个参数

http://sing-box.sagernet.org/configuration/shared/multiplex/

      "multiplex": {
        "enabled": true,
        "protocol": "smux",
        "max_connections": 4,
        "min_streams": 4,
        "max_streams": 0
      }

我觉得 max_connections min_streams 这2个参数你默认就给4,不给用户自己填的菜单。

1

我现在想到的是你可以在这儿,做2个选项框。当用户把 开启Mux多路复用 选中后出现,第1个框做 protocol 值的选项 http://sing-box.sagernet.org/zh/configuration/shared/multiplex/#protocol

第2个框做 http://sing-box.sagernet.org/configuration/shared/multiplex/#padding padding的true 和 false 选项。

补充出现这2个框后,不给空白选项,你给默认值吧,比如默认是h2mux padding true

比如我测试的 trojan REALITY h2mux padding 配置

        {
            "type": "trojan",
            "tag": "proxy",
            "server": "", // 服务端的 IP
            "server_port": 443,
            "password": "chika",
            "tls": {
                "enabled": true,
                "server_name": "", // 与服务端一致
                "utls": {
                    "enabled": true,
                    "fingerprint": "chrome" // 使用 uTLS 库模拟客户端 TLS 指纹
                },
                "reality": {
                    "enabled": true,
                    "public_key": "", // 服务端执行 ./sing-box generate reality-keypair 生成,私钥对应的公钥,填 "PublicKey" 的值
                    "short_id": "" // 与服务端一致
                }
            },
            "multiplex": {
                "enabled": true,
                "protocol": "h2mux",
                "max_connections": 4,
                "min_streams": 4,
                "padding": true
            }
        },

mux 这个不影响使用,并且大佬们还在争论,暂时不处理

2dust commented 1 year ago

想建议下既然这次加了对生成Sing-box配置支持,sing-box里面的 https://sing-box.sagernet.org/zh/examples/shadowtls/ shadowtls 挺好用的。我刚看了你的添加 shadowsocks 菜单里面,还没做这功能,你要不要考虑这回一起做了?

shadowtls 这个版本不做,先把基础搞好,后面要加时再处理。 shadowtls 这个是不是和reality差不多?

2dust commented 1 year ago

dns cache

dns在各个级别都有缓存,情况比较复杂,所以在sing-box里面就把这个是否缓存属性直接去掉了 实测并没有太多影响,开关都没有什么感觉

chika0801 commented 1 year ago

shadowtls 作者的blog的文章 https://www.ihcblog.com/a-better-tls-obfs-proxy/

我不是很懂,了解了下,它表演了tls握手,同时客户端到服务端不是用目标网站的TLS加密,用的ss里面的ss2022加密方式,在sing-box当客户端,能原生UDP也可在客户端配UoT。还能用上sing-box的mux。

和REALITY比较的话最近在Xray的TG频道有文章介绍。你去看看我不帖了23333。但是我试了下还是挺流畅(我感觉是因为用到了mux)

算得上用的人少,小众,不做也好,我看到就想起提了句,你先减少工作量。

chika0801 commented 1 year ago

dns cache

dns在各个级别都有缓存,情况比较复杂,所以在sing-box里面就把这个是否缓存属性直接去掉了 实测并没有太多影响,开关都没有什么感觉

学习到了。

chika0801 commented 1 year ago

Trojan + REALITY + h2mux padding 这组合如果你没时间先不做也可以的。(我想真没什么人这么配着用23333)

2dust commented 1 year ago

处理下这些

chika0801 commented 1 year ago

点 导入置默认配置,画线处是没格式化的 1

点确定后,再进来看已被格式化好了,细心的功能。

能不能把点击 导入的配置,默认就格式化好(强迫症)23333

2

chika0801 commented 1 year ago

我发下是远程是域名时,如果有dns配置时,一定要把这个域名用本地解析,不然就无法解析

学到了。我平时地址是填的IP。我在用tun模式时也发现了这现象。

chika0801 commented 1 year ago

mux 这个不影响使用,并且大佬们还在争论,暂时不处理

iss和群消息下午都看了2333,现在不做也好。

chika0801 commented 1 year ago

我看到你给gRPC生成的配置默认加了健康检查,sing-box里面H2也能用 "idle_timeout": "60s", "ping_timeout": "20s", 你给用H2生成的配置也一起加下嘛。 文档链接

      "transport": {
        "type": "grpc",
        "service_name": "grpc",
        "idle_timeout": "60s",
        "ping_timeout": "20s",
        "permit_without_stream": false
      }
    "idle_timeout": "60s",
    "ping_timeout": "20s",

它文档2个都给的是15s,你要不要改成15s?

chika0801 commented 1 year ago

测试了Trojan+REALITY 用xray-core和sing-box生成的配置都OK。

chika0801 commented 1 year ago

请问:我记得你说过有计划新增hysteria配置生成(sing-box core),这个计划目前要做,还是暂时延后做了?

我对用hy的能配置,这功能也比较期待。平时用的频率多吧。

2dust commented 1 year ago

我看到你给gRPC生成的配置默认加了健康检查,sing-box里面H2也能用 "idle_timeout": "60s", "ping_timeout": "20s", 你给用H2生成的配置也一起加下嘛。 文档链接

      "transport": {
        "type": "grpc",
        "service_name": "grpc",
        "idle_timeout": "60s",
        "ping_timeout": "20s",
        "permit_without_stream": false
      }
    "idle_timeout": "60s",
    "ping_timeout": "20s",

它文档2个都给的是15s,你要不要改成15s?

sing-box的已经加了,默认值现在是用的xray的默认值

2dust commented 1 year ago

请问:我记得你说过有计划新增hysteria配置生成(sing-box core),这个计划目前要做,还是暂时延后做了?

我对用hy的能配置,这功能也比较期待。平时用的频率多吧。

有计划做,你有配置好的客户端例子吗?

chika0801 commented 1 year ago

有计划做,你有配置好的客户端例子吗?

singbox文档上也有,下面是自己用的配置示例

        {
            "type": "hysteria",
            "tag": "proxy",
            "server": "",
            "server_port": 443,
            "up_mbps": 50, // 这个参数的选框必做,建议如果用户留空给默认值30或50的上行,一般家宽50上行就到头了
            "down_mbps": 150, // 这个参数的选框必做,建议如果用户留空给默认值100到200的下行,hy里客户端填目标下行速度挺重要的,你默认值千万不要给太大了。200是我测过一般geekbench5 500分的vps跑200M时 CPU占用在测speedtest.net网页版多线程,拿htop看就满了的经验。
            "auth_str": "chika", // 它的验证方式你这是当“密码验证”,你还要区外做一个选框,万一有用户是使用了ofbs验证。
            "recv_window_conn": 26843545, // 这参数可不生成,用singbox有默认值
            "recv_window": 67108864, // 这参数可不生成,用singbox有默认值
            "disable_mtu_discovery": false, // 这个 禁止MTU也可不做选项,我反正没看到有人用过也不知道什么场景用得到
            "tls": {
                "enabled": true, // 启用 TLS是必做选项
                "server_name": "", // SNI也是
                "alpn": [
                    "h3" // alph也必做,允许用户留空,但是sing-box里留空不知道默认用什么,hy原版留空是有默认值样。要不你考虑下不让用户留空或如何处理。另外还少一个允许不安全的链接,有些用自签的用户也要一个选项。
                ]
            }
        },

密码验证和obfs我记得逻辑关系是 互相可单独开,或同时一起开。不互斥的关系。

我习惯是只用密码,不开obfs。

chika0801 commented 1 year ago

https://github.com/2dust/v2rayN/issues/3770#issuecomment-1525586205

tag 用local_local 是为了防止和用户填入的tag重复 我发下是远程是域名时,如果有dns配置时,一定要把这个域名用本地解析,不然就无法解析

这个问题我看了Sing-box群聊天 终于明白了。

https://github.com/SagerNet/sing-box/releases/tag/v1.2.2 这个版本更新中提到的

在它的DNS模块的rule写下面的

            {
                "outbound": [
                    "any"
                ],
                "server": "dns_direct" // 对应本地的那个tag
            }

此时出站模块中 server 如果写的域名,就会用本地DNS解析成IP了。

我发现你现在做好了另外一种解决方法。这方法是优雅一点(也没必要改你现在的逻辑)。

刚好想到这问题时想起提到的,结果是这么用的。

或者写这个下载Geo文件时,cdn.jsdelivr.net 域名都能正常用本地DNS解析后下载文件成功。

        "geoip": {
            "download_url": "https://cdn.jsdelivr.net/gh/soffchen/sing-geoip@release/geoip.db",
            "download_detour": "direct"
        },
        "geosite": {
            "download_url": "https://cdn.jsdelivr.net/gh/soffchen/sing-geosite@release/geosite.db",
            "download_detour": "direct"
        },