diff --git a/config/parsing/chain.go b/config/parsing/chain.go index 68d7775..9738834 100644 --- a/config/parsing/chain.go +++ b/config/parsing/chain.go @@ -1,6 +1,8 @@ package parsing import ( + "time" + "github.com/go-gost/core/bypass" "github.com/go-gost/core/chain" "github.com/go-gost/core/connector" @@ -135,7 +137,8 @@ func ParseChain(cfg *config.ChainConfig) (chain.Chainer, error) { WithDialer(d). WithAddr(v.Addr). WithInterface(v.Interface). - WithSockOpts(sockOpts) + WithSockOpts(sockOpts). + WithTimeout(10 * time.Second) node := chain.NewNode(v.Name, v.Addr). WithTransport(tr). diff --git a/connector/direct/connector.go b/connector/direct/connector.go new file mode 100644 index 0000000..b1e130f --- /dev/null +++ b/connector/direct/connector.go @@ -0,0 +1,55 @@ +package forward + +import ( + "context" + "net" + + "github.com/go-gost/core/connector" + md "github.com/go-gost/core/metadata" + "github.com/go-gost/x/registry" +) + +func init() { + registry.ConnectorRegistry().Register("direct", NewConnector) +} + +type directConnector struct { + options connector.Options +} + +func NewConnector(opts ...connector.Option) connector.Connector { + options := connector.Options{} + for _, opt := range opts { + opt(&options) + } + + return &directConnector{ + options: options, + } +} + +func (c *directConnector) Init(md md.Metadata) (err error) { + return nil +} + +func (c *directConnector) Connect(ctx context.Context, _ net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) { + var cOpts connector.ConnectOptions + for _, opt := range opts { + opt(&cOpts) + } + + conn, err := cOpts.NetDialer.Dial(ctx, network, address) + if err != nil { + return nil, err + } + + log := c.options.Logger.WithFields(map[string]any{ + "remote": conn.RemoteAddr().String(), + "local": conn.LocalAddr().String(), + "network": network, + "address": address, + }) + log.Debugf("connect %s/%s", address, network) + + return conn, nil +} diff --git a/dialer/direct/dialer.go b/dialer/direct/dialer.go new file mode 100644 index 0000000..1364586 --- /dev/null +++ b/dialer/direct/dialer.go @@ -0,0 +1,38 @@ +package tcp + +import ( + "context" + "net" + + "github.com/go-gost/core/dialer" + "github.com/go-gost/core/logger" + md "github.com/go-gost/core/metadata" + "github.com/go-gost/x/registry" +) + +func init() { + registry.DialerRegistry().Register("direct", NewDialer) +} + +type directDialer struct { + logger logger.Logger +} + +func NewDialer(opts ...dialer.Option) dialer.Dialer { + options := &dialer.Options{} + for _, opt := range opts { + opt(options) + } + + return &directDialer{ + logger: options.Logger, + } +} + +func (d *directDialer) Init(md md.Metadata) (err error) { + return +} + +func (d *directDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOption) (net.Conn, error) { + return nil, nil +} diff --git a/go.mod b/go.mod index fb3fffd..5592363 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d github.com/gin-contrib/cors v1.3.1 github.com/gin-gonic/gin v1.7.7 - github.com/go-gost/core v0.0.0-20220908132925-c546a6b711d9 + github.com/go-gost/core v0.0.0-20220908143917-e7a104651a75 github.com/go-gost/gosocks4 v0.0.1 github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09 github.com/go-gost/relay v0.1.1-0.20211123134818-8ef7fd81ffd7 diff --git a/go.sum b/go.sum index da1eaf6..9887f4d 100644 --- a/go.sum +++ b/go.sum @@ -98,8 +98,8 @@ github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gost/core v0.0.0-20220908132925-c546a6b711d9 h1:0y/ybIPhTJ6fwaN73r2zHmf7zyiaqjpmXTM5W4e0HbM= -github.com/go-gost/core v0.0.0-20220908132925-c546a6b711d9/go.mod h1:bHVbCS9da6XtKNYMkMUVcck5UqDDUkyC37erVfs4GXQ= +github.com/go-gost/core v0.0.0-20220908143917-e7a104651a75 h1:8DoQErtmgR9pRajWTswswLgaqOprJtkz/iC+2oOe24g= +github.com/go-gost/core v0.0.0-20220908143917-e7a104651a75/go.mod h1:bHVbCS9da6XtKNYMkMUVcck5UqDDUkyC37erVfs4GXQ= 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.3.1-0.20211109033403-d894d75b7f09 h1:A95M6UWcfZgOuJkQ7QLfG0Hs5peWIUSysCDNz4pfe04=