tunnel

package
v0.0.0-...-36fb464 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2025 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	*cio.Logger
	Inbound   bool
	Outbound  bool
	Socks     bool
	KeepAlive time.Duration
	TlsConf   *tls.Config
	IsClient  bool
	// Optional tap factory for per-connection capture
	TapFactory TapFactory
	// Username owning this tunnel (for tagging)
	Username string
}

Config a Tunnel

type Meta

type Meta struct {
	Username string
	Remote   settings.Remote
	ConnID   string
}

Meta describes the context of a tapped connection within a tunnel owned by a user.

type Proxy

type Proxy struct {
	*cio.Logger
	// contains filtered or unexported fields
}

Proxy is the inbound portion of a Tunnel

func NewProxy

func NewProxy(logger *cio.Logger, sshTun sshTunnel, index int, remote *settings.Remote, tlsConf *tls.Config, isClient bool) (*Proxy, error)

NewProxy creates a Proxy

func (*Proxy) Run

func (p *Proxy) Run(ctx context.Context) error

Run enables the proxy and blocks while its active, close the proxy by cancelling the context.

type Tap

type Tap interface {
	OnOpen()
	SrcWriter() io.Writer // bytes flowing from src->dst (client -> upstream)
	DstWriter() io.Writer // bytes flowing from dst->src (upstream -> client)
	OnClose(sent int64, received int64)
}

Tap receives lifecycle and byte-stream callbacks for a single connection.

type TapFactory

type TapFactory func(meta Meta) Tap

TapFactory creates a Tap for a given connection meta. It can return nil to disable capture for that connection.

type Tunnel

type Tunnel struct {
	Config

	//internals
	TlsConf *tls.Config
	// contains filtered or unexported fields
}

Tunnel represents an SSH tunnel with proxy capabilities. Both chisel client and server are Tunnels. chisel client has a single set of remotes, whereas chisel server has multiple sets of remotes (one set per client). Each remote has a 1:1 mapping to a proxy. Proxies listen, send data over ssh, and the other end of the ssh connection communicates with the endpoint and returns the response.

func New

func New(c Config) *Tunnel

New Tunnel from the given Config

func (*Tunnel) BindRemotes

func (t *Tunnel) BindRemotes(ctx context.Context, remotes []*settings.Remote) error

BindRemotes converts the given remotes into proxies, and blocks until the caller cancels the context or there is a proxy error.

func (*Tunnel) BindSSH

func (t *Tunnel) BindSSH(ctx context.Context, c ssh.Conn, reqs <-chan *ssh.Request, chans <-chan ssh.NewChannel) error

BindSSH provides an active SSH for use for tunnelling

func (*Tunnel) DeliverToRemote

func (t *Tunnel) DeliverToRemote(ctx context.Context, r *settings.Remote, payload []byte) error

DeliverToRemote opens an SSH channel to the given remote and writes the payload bytes, then closes.

func (*Tunnel) DeliverToRemoteWithResponse

func (t *Tunnel) DeliverToRemoteWithResponse(ctx context.Context, r *settings.Remote, payload []byte) ([]byte, error)

DeliverToRemoteWithResponse opens an SSH channel to the given remote, writes the payload, half-closes the write side, then reads all response bytes until EOF or context timeout.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL