ginuerzh / gost

GO Simple Tunnel - a simple tunnel written in golang
MIT License
15.57k stars 2.44k forks source link

关于配置文件的疑问和建议 #779

Open aa51513 opened 2 years ago

aa51513 commented 2 years ago

官方给的配置文件示例如下: { "Debug": true, "Retries": 0, "ServeNodes": [ ":8080", "ss://chacha20:12345678@:8338" ], "ChainNodes": [ "http://192.168.1.1:8080", "https://10.0.2.1:443" ], "Routes": [ { "Retries": 1, "ServeNodes": [ "ws://:1443" ], "ChainNodes": [ "socks://:192.168.1.1:1080" ] }, { "Retries": 3, "ServeNodes": [ "quic://:443" ] } ] }

我疑惑的地方在于:为什么这个“ServeNodes”和“ChainNodes”是必选? 按道理来说,全部配置在Routes也应该是可以的,并且更符合逻辑,如下: { "Debug": true, "Routes": [{ "Retries": 1, "ServeNodes": [ "ws://:1443" ], "ChainNodes": [ "socks://:192.168.1.1:1080" ] }, { "Retries": 3, "ServeNodes": [ "quic://:443" ] }, { "Retries": 0, "ServeNodes": [ ":8080", "ss://chacha20:12345678@:8338" ], "ChainNodes": [ "http://192.168.1.1:8080", "https://10.0.2.1:443" ] } ] }

监听3个端口,每个监听各自走不同的路径,非常合理 反倒是在Routes外面,强制要求配置一个ServeNodes和一个ChainNodes,会让人十分疑惑

作者大大看看,有没有可能在未来的版本里,优化一下这个体验?

shoaly commented 2 years ago

顺道说一句, 如果还有v3版本的话, 配置文件要不要换成toml, 至少有两个好处, 排版更灵活了, 支持注释了

shoaly commented 2 years ago

官方给的配置文件示例如下: { "Debug": true, "Retries": 0, "ServeNodes": [ ":8080", "ss://chacha20:12345678@:8338" ], "ChainNodes": [ "http://192.168.1.1:8080", "https://10.0.2.1:443" ], "Routes": [ { "Retries": 1, "ServeNodes": [ "ws://:1443" ], "ChainNodes": [ "socks://:192.168.1.1:1080" ] }, { "Retries": 3, "ServeNodes": [ "quic://:443" ] } ] }

我疑惑的地方在于:为什么这个“ServeNodes”和“ChainNodes”是必选? 按道理来说,全部配置在Routes也应该是可以的,并且更符合逻辑,如下: { "Debug": true, "Routes": [{ "Retries": 1, "ServeNodes": [ "ws://:1443" ], "ChainNodes": [ "socks://:192.168.1.1:1080" ] }, { "Retries": 3, "ServeNodes": [ "quic://:443" ] }, { "Retries": 0, "ServeNodes": [ ":8080", "ss://chacha20:12345678@:8338" ], "ChainNodes": [ "http://192.168.1.1:8080", "https://10.0.2.1:443" ] } ] }

监听3个端口,每个监听各自走不同的路径,非常合理 反倒是在Routes外面,强制要求配置一个ServeNodes和一个ChainNodes,会让人十分疑惑

作者大大看看,有没有可能在未来的版本里,优化一下这个体验?

在回答一下这个, 配置文件最外面的那个 ServeNodes 和 ChainNodes 是可以留空写成一个 []的, 全部配置到 Routes当中去... 至于为什么有两种形式混在一起, 我猜测应该是为了兼容老的格式, Routes应该是后面某个版本添加的, 下面是我自己笔记中的一个范式 供参考

{
    "Debug": true,
    "Retries": 0,
       "ServeNodes": [
                //留空
    ]
    "ChainNodes": [
          // 留空
    ],
    "Routes": [
                // 第一个配置, 等同于 -L ws://:1443 -F socks://:192.168.1.1:1080
        {
            "Retries": 1,
            "ServeNodes": [
                "ws://:1443"
            ],
            "ChainNodes": [
                "socks://:192.168.1.1:1080"
            ]
        },
                // 第二个配置 等同于 -L quic://:443
        {
            "Retries": 3,
            "ServeNodes": [
                "quic://:443"
            ]
        }
    ]
}
aa51513 commented 2 years ago

官方给的配置文件示例如下: { "Debug": true, "Retries": 0, "ServeNodes": [ ":8080", "ss://chacha20:12345678@:8338" ], "ChainNodes": [ "http://192.168.1.1:8080", "https://10.0.2.1:443" ], "Routes": [ { "Retries": 1, "ServeNodes": [ "ws://:1443" ], "ChainNodes": [ "socks://:192.168.1.1:1080" ] }, { "Retries": 3, "ServeNodes": [ "quic://:443" ] } ] } 我疑惑的地方在于:为什么这个“ServeNodes”和“ChainNodes”是必选? 按道理来说,全部配置在Routes也应该是可以的,并且更符合逻辑,如下: { "Debug": true, "Routes": [{ "Retries": 1, "ServeNodes": [ "ws://:1443" ], "ChainNodes": [ "socks://:192.168.1.1:1080" ] }, { "Retries": 3, "ServeNodes": [ "quic://:443" ] }, { "Retries": 0, "ServeNodes": [ ":8080", "ss://chacha20:12345678@:8338" ], "ChainNodes": [ "http://192.168.1.1:8080", "https://10.0.2.1:443" ] } ] } 监听3个端口,每个监听各自走不同的路径,非常合理 反倒是在Routes外面,强制要求配置一个ServeNodes和一个ChainNodes,会让人十分疑惑 作者大大看看,有没有可能在未来的版本里,优化一下这个体验?

在回答一下这个, 配置文件最外面的那个 ServeNodes 和 ChainNodes 是可以留空写成一个 []的, 全部配置到 Routes当中去... 至于为什么有两种形式混在一起, 我猜测应该是为了兼容老的格式, Routes应该是后面某个版本添加的, 下面是我自己笔记中的一个范式 供参考

{
    "Debug": true,
    "Retries": 0,
     "ServeNodes": [
              //留空
    ]
    "ChainNodes": [
        // 留空
    ],
    "Routes": [
              // 第一个配置, 等同于 -L ws://:1443 -F socks://:192.168.1.1:1080
        {
            "Retries": 1,
            "ServeNodes": [
                "ws://:1443"
            ],
            "ChainNodes": [
                "socks://:192.168.1.1:1080"
            ]
        },
              // 第二个配置 等同于 -L quic://:443
        {
            "Retries": 3,
            "ServeNodes": [
                "quic://:443"
            ]
        }
    ]
}

感谢您的热心指点,ServeNodes 和 ChainNodes 是可以留空写成一个 [], 这一点,我倒是从来没想到过,更没有这样去试一下 原因是官方文档说这两个是必需字段,我就认为为空会报错。

如果真是可以留空成[],用户未填写这两个字段的时候,程序处理一下,设个默认值为[],没必要非要指定这两个字段

这个issue先就在这里,看等作者看到了,看他有啥见解,直接给我关了也没啥

ginuerzh commented 2 years ago

这两个现在是可选的

nameldk commented 1 year ago

建议增加个功能,可以把 cli上的参数转成json格式。

cli 上的参数对应配置文件上配置顶对于新手不太友好,但配置文件对于启动程序会友好一些。 比如systemd,不至于每次修改完参数后还要再systemctl daemon-reload