diff --git a/.github/workflows/trigger-nightly.yml b/.github/workflows/trigger-nightly.yml index 360b570..0b7a6d3 100644 --- a/.github/workflows/trigger-nightly.yml +++ b/.github/workflows/trigger-nightly.yml @@ -3,7 +3,7 @@ name: Trigger nightly build on: schedule: # * is a special character in YAML, so you have to quote this string - - cron: '00 15 * * *' + - cron: '30 15 * * *' workflow_dispatch: jobs: diff --git a/cmd/gost/cmd.go b/cmd/gost/cmd.go index 6b64449..73f53d5 100644 --- a/cmd/gost/cmd.go +++ b/cmd/gost/cmd.go @@ -69,13 +69,19 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { nodes = append(nodes, nodeCfg) } - mc := nodeConfig.Connector.Metadata - md := mdx.NewMetadata(mc) + m := map[string]any{} + for k, v := range url.Query() { + if len(v) > 0 { + m[k] = v[0] + } + } + md := mdx.NewMetadata(m) hopConfig := &config.HopConfig{ Name: fmt.Sprintf("%shop-%d", namePrefix, i), - Selector: parseSelector(mc), + Selector: parseSelector(m), Nodes: nodes, + Metadata: m, } if v := mdutil.GetString(md, "bypass"); v != "" { @@ -94,7 +100,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } hopConfig.Bypass = bypassCfg.Name cfg.Bypasses = append(cfg.Bypasses, bypassCfg) - delete(mc, "bypass") + delete(m, "bypass") } if v := mdutil.GetString(md, "resolver"); v != "" { resolverCfg := &config.ResolverConfig{ @@ -113,7 +119,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } hopConfig.Resolver = resolverCfg.Name cfg.Resolvers = append(cfg.Resolvers, resolverCfg) - delete(mc, "resolver") + delete(m, "resolver") } if v := mdutil.GetString(md, "hosts"); v != "" { hostsCfg := &config.HostsConfig{ @@ -134,18 +140,18 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { } hopConfig.Hosts = hostsCfg.Name cfg.Hosts = append(cfg.Hosts, hostsCfg) - delete(mc, "hosts") + delete(m, "hosts") } if v := mdutil.GetString(md, "interface"); v != "" { hopConfig.Interface = v - delete(mc, "interface") + delete(m, "interface") } if v := mdutil.GetInt(md, "so_mark"); v > 0 { hopConfig.SockOpts = &config.SockOptsConfig{ Mark: v, } - delete(mc, "so_mark") + delete(m, "so_mark") } chain.Hops = append(chain.Hops, hopConfig) @@ -385,15 +391,18 @@ func buildServiceConfig(url *url.URL) (*config.ServiceConfig, error) { delete(m, "auth") tlsConfig := &config.TLSConfig{ - CertFile: mdutil.GetString(md, "certFile", "cert"), - KeyFile: mdutil.GetString(md, "keyFile", "key"), - CAFile: mdutil.GetString(md, "caFile", "ca"), + CertFile: mdutil.GetString(md, "tls.certFile", "certFile", "cert"), + KeyFile: mdutil.GetString(md, "tls.keyFile", "keyFile", "key"), + CAFile: mdutil.GetString(md, "tls.caFile", "caFile", "ca"), } + delete(m, "tls.certFile") delete(m, "certFile") delete(m, "cert") + delete(m, "tls.keyFile") delete(m, "keyFile") delete(m, "key") + delete(m, "tls.caFile") delete(m, "caFile") delete(m, "ca") @@ -442,8 +451,17 @@ func buildNodeConfig(url *url.URL) (*config.NodeConfig, error) { dialer = schemes[1] } + m := map[string]any{} + for k, v := range url.Query() { + if len(v) > 0 { + m[k] = v[0] + } + } + md := mdx.NewMetadata(m) + node := &config.NodeConfig{ - Addr: url.Host, + Addr: url.Host, + Metadata: m, } if c := registry.ConnectorRegistry().Get(connector); c == nil { @@ -464,14 +482,6 @@ func buildNodeConfig(url *url.URL) (*config.NodeConfig, error) { auth.Password, _ = url.User.Password() } - m := map[string]any{} - for k, v := range url.Query() { - if len(v) > 0 { - m[k] = v[0] - } - } - md := mdx.NewMetadata(m) - if sauth := mdutil.GetString(md, "auth"); sauth != "" && auth == nil { au, err := parseAuthFromCmd(sauth) if err != nil { @@ -482,23 +492,28 @@ func buildNodeConfig(url *url.URL) (*config.NodeConfig, error) { delete(m, "auth") tlsConfig := &config.TLSConfig{ - CertFile: mdutil.GetString(md, "certFile", "cert"), - KeyFile: mdutil.GetString(md, "keyFile", "key"), - CAFile: mdutil.GetString(md, "caFile", "ca"), - Secure: mdutil.GetBool(md, "secure"), - ServerName: mdutil.GetString(md, "serverName"), + CertFile: mdutil.GetString(md, "tls.certFile", "certFile", "cert"), + KeyFile: mdutil.GetString(md, "tls.keyFile", "keyFile", "key"), + CAFile: mdutil.GetString(md, "tls.caFile", "caFile", "ca"), + Secure: mdutil.GetBool(md, "tls.secure", "secure"), + ServerName: mdutil.GetString(md, "tls.servername", "servername"), } if tlsConfig.ServerName == "" { tlsConfig.ServerName = url.Hostname() } + delete(m, "tls.certFile") delete(m, "certFile") delete(m, "cert") + delete(m, "tls.keyFile") delete(m, "keyFile") delete(m, "key") + delete(m, "tls.caFile") delete(m, "caFile") delete(m, "ca") + delete(m, "tls.secure") delete(m, "secure") + delete(m, "tls.servername") delete(m, "serverName") if !tlsConfig.Secure && tlsConfig.CertFile == "" && tlsConfig.CAFile == "" && tlsConfig.ServerName == "" { diff --git a/cmd/gost/main.go b/cmd/gost/main.go index 7d01f6a..d68a833 100644 --- a/cmd/gost/main.go +++ b/cmd/gost/main.go @@ -64,7 +64,9 @@ func worker(id int, args []string, ctx *context.Context, ret *int) { cmd.Stderr = os.Stderr cmd.Env = append(os.Environ(), fmt.Sprintf("_GOST_ID=%d", id)) - cmd.Run() + if err := cmd.Run(); err != nil { + log.Fatal(err) + } if cmd.ProcessState.Exited() { *ret = cmd.ProcessState.ExitCode() } diff --git a/go.mod b/go.mod index eb11614..5d7fc00 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.22 toolchain go1.22.2 require ( - github.com/go-gost/core v0.0.0-20240508132029-8d554ddcf77c - github.com/go-gost/x v0.0.0-20240613142450-15f28c667a31 + github.com/go-gost/core v0.0.0-20240704150322-30cc92870515 + github.com/go-gost/x v0.0.0-20240704150535-22537ff0d294 github.com/judwhite/go-svc v1.2.1 ) @@ -29,7 +29,7 @@ require ( github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-gost/gosocks4 v0.0.1 // indirect - github.com/go-gost/gosocks5 v0.4.0 // indirect + github.com/go-gost/gosocks5 v0.4.2 // indirect github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a // indirect github.com/go-gost/relay v0.5.0 // indirect github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 // indirect @@ -94,7 +94,7 @@ require ( github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect github.com/vishvananda/netlink v1.1.0 // indirect - github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df // indirect + github.com/vishvananda/netns v0.0.4 // indirect github.com/xtaci/kcp-go/v5 v5.6.5 // indirect github.com/xtaci/smux v1.5.24 // indirect github.com/xtaci/tcpraw v1.2.25 // indirect diff --git a/go.sum b/go.sum index 2207f77..3a32980 100644 --- a/go.sum +++ b/go.sum @@ -53,20 +53,20 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-gost/core v0.0.0-20240508132029-8d554ddcf77c h1:1ahtn+3bQB50at5ubWDOrA4yja8vWpWNrGSRaCztNWg= -github.com/go-gost/core v0.0.0-20240508132029-8d554ddcf77c/go.mod h1:j08tDHkFzk7dfOeLhl3RWsASdf9YWWRfWBUQqbQvx3A= +github.com/go-gost/core v0.0.0-20240704150322-30cc92870515 h1:i/zcDZtz00hcmRosvJgXmgJsdc4bC32PAvt2+8MUOEg= +github.com/go-gost/core v0.0.0-20240704150322-30cc92870515/go.mod h1:QmVAZIXIYBsX44Vehwug5RFnG2K3/Hz/uu/Y4QVhAY0= github.com/go-gost/gosocks4 v0.0.1 h1:+k1sec8HlELuQV7rWftIkmy8UijzUt2I6t+iMPlGB2s= github.com/go-gost/gosocks4 v0.0.1/go.mod h1:3B6L47HbU/qugDg4JnoFPHgJXE43Inz8Bah1QaN9qCc= -github.com/go-gost/gosocks5 v0.4.0 h1:EIrOEkpJez4gwHrMa33frA+hHXJyevjp47thpMQsJzI= -github.com/go-gost/gosocks5 v0.4.0/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4= +github.com/go-gost/gosocks5 v0.4.2 h1:IianxHTkACPqCwiOAT3MHoMdSUl+SEPSRu1ikawC1Pc= +github.com/go-gost/gosocks5 v0.4.2/go.mod h1:1G6I7HP7VFVxveGkoK8mnprnJqSqJjdcASKsdUn4Pp4= github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a h1:ME7P1Brcg4C640DSPqlvQr7JuvvQfJ8QpmS3yCFlK3A= github.com/go-gost/plugin v0.0.0-20240103125338-9c84e29cb81a/go.mod h1:qXr2Zm9Ex2ATqnWuNUzVZqySPMnuIihvblYZt4MlZLw= github.com/go-gost/relay v0.5.0 h1:JG1tgy/KWiVXS0ukuVXvbM0kbYuJTWxYpJ5JwzsCf/c= github.com/go-gost/relay v0.5.0/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451 h1:xj8gUZGYO3nb5+6Bjw9+tsFkA9sYynrOvDvvC4uDV2I= github.com/go-gost/tls-dissector v0.0.2-0.20220408131628-aac992c27451/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.0.0-20240613142450-15f28c667a31 h1:ME3v3km1JFzqphFDWKjzL/urZI4b/BbXAv+KT+pS4+I= -github.com/go-gost/x v0.0.0-20240613142450-15f28c667a31/go.mod h1:Jz+SvVsscqvMOfZfiPDyHE1wngeqvJNxU4jZXnamo2c= +github.com/go-gost/x v0.0.0-20240704150535-22537ff0d294 h1:sXmgKm9UBPMnAbYcMgvf/NUCEbkkFbdRqlTcRZzXPOc= +github.com/go-gost/x v0.0.0-20240704150535-22537ff0d294/go.mod h1:8+dJVV3BEdCciVvmAoqNBZ9+2asPr7ZIcBJGCc9yTfA= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -246,8 +246,9 @@ github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4d github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df h1:OviZH7qLw/7ZovXvuNyL3XQl8UFofeikI1NW1Gypu7k= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= +github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/xtaci/kcp-go/v5 v5.6.5 h1:oxGZNobj3OddrLzwdJYnR/waNgwrL98u02u0DWNHE3k= github.com/xtaci/kcp-go/v5 v5.6.5/go.mod h1:Qy3Zf2tWTdFdEs0E8JvhrX+39r5UDZoYac8anvud7/Q= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae h1:J0GxkO96kL4WF+AIT3M4mfUVinOCPgf2uUWYFUzN0sM=