go-gost / gost

GO Simple Tunnel - a simple tunnel written in golang
https://gost.run
MIT License
4.19k stars 511 forks source link

bug. "keep-alive interval must be positive" #376

Closed woodlyer closed 9 months ago

woodlyer commented 10 months ago

port mapping shows error.

server:

 ./gost -L relay+kcp://:9001

client:

opl@depl:~/gost$ ./gost -L tcp://:5201/:5201-F relay+kcp://10.10.10.17:9001
{"handler":"tcp","kind":"service","level":"info","listener":"tcp","msg":"listening on [::]:5201/tcp","service":"service-0","time":"2023-12-25T09:21:51.031+08:00"}
{"handler":"tcp","kind":"handler","level":"info","listener":"tcp","local":"127.0.0.1:5201","msg":"127.0.0.1:40690 <> 127.0.0.1:5201","remote":"127.0.0.1:40690","service":"service-0","time":"2023-12-25T09:21:54.350+08:00"}

{"connector":"relay","dialer":"kcp","hop":"hop-0","kind":"dialer","level":"error","msg":"keep-alive interval must be positive","node":"node-0","time":"2023-12-25T09:21:54.352+08:00"}

{"handler":"tcp","kind":"handler","level":"error","listener":"tcp","msg":"route(retry=0) keep-alive interval must be positive","service":"service-0","time":"2023-12-25T09:21:54.352+08:00"}
{"dst":":65432/tcp","handler":"tcp","host":":0","kind":"handler","level":"error","listener":"tcp","local":"127.0.0.1:5201","msg":"keep-alive interval must be positive","node":"target-0","remote":"127.0.0.1:40690","service":"service-0","time":"2023-12-25T09:21:54.352+08:00"}
{"dst":":65432/tcp","duration":2412958,"handler":"tcp","host":":0","kind":"handler","level":"info","listener":"tcp","local":"127.0.0.1:5201","msg":"127.0.0.1:40690 >< 127.0.0.1:5201","node":"target-0","remote":"127.0.0.1:40690","service":"service-0","time":"2023-12-25T09:21:54.352+08:00"}
{"handler":"tcp","kind":"service","level":"error","listener":"tcp","msg":"keep-alive interval must be positive","service":"service-0","time":"2023-12-25T09:21:54.352+08:00"}

version

 ./gost -V
gost v3.0.0-nightly.20231220 (go1.21.5 linux/arm64)
woodlyer commented 10 months ago

if add kcp.keepalive param, It's ok.

# client 
./gost -F relay+kcp://10.10.10.17:9001?kcp.keepalive=10

https://github.com/go-gost/x/blob/9fa95cc8b34863ab42e28d47074ca476bc6b900c/dialer/kcp/metadata.go#L43 image

woodlyer commented 10 months ago

when the md is null, config get 0.

github.com/go-gost/x/dialer/kcp/metadata.go

func (d *kcpDialer) parseMetadata(md mdata.Metadata) (err error) {
...
    d.md.config.TCP = mdutil.GetBool(md, "kcp.tcp", "tcp")
    d.md.config.Key = mdutil.GetString(md, "kcp.key")
    d.md.config.Crypt = mdutil.GetString(md, "kcp.crypt")
    d.md.config.Mode = mdutil.GetString(md, "kcp.mode")
    d.md.config.KeepAlive = mdutil.GetInt(md, "kcp.keepalive") // get 0 
    d.md.config.Interval = mdutil.GetInt(md, "kcp.interval")
    d.md.config.MTU = mdutil.GetInt(md, "kcp.mtu")
    d.md.config.SmuxVer = mdutil.GetInt(md, "kcp.smuxver")
...
}