Documentation
¶
Overview ¶
Package tunnel is fast and secure client/server package that enables proxying public connections to your local machine over a tunnel connection from the local machine to the public server.
Index ¶
- Variables
- func NormalizeAddress(addr string) (string, error)
- type Backoff
- type Client
- type ClientConfig
- type ProxyFunc
- type ProxyFuncs
- type RegistryItem
- type Server
- func (s *Server) Addr() string
- func (r Server) IsSubscribed(identifier id.ID) bool
- func (s *Server) Ping(identifier id.ID) (time.Duration, error)
- func (s *Server) Start() error
- func (s *Server) Stop()
- func (r Server) Subscribe(identifier id.ID)
- func (r Server) Subscriber(hostPort string) (id.ID, bool)
- func (s *Server) Unsubscribe(identifier id.ID) *RegistryItem
- type ServerConfig
- type TCPProxy
Constants ¶
This section is empty.
Variables ¶
var ( // DefaultKeepAliveIdleTime specifies how long connection can be idle // before sending keepalive message. DefaultKeepAliveIdleTime = 15 * time.Minute // DefaultKeepAliveCount specifies maximal number of keepalive messages // sent before marking connection as dead. DefaultKeepAliveCount = 8 // DefaultKeepAliveInterval specifies how often retry sending keepalive // messages when no response is received. DefaultKeepAliveInterval = 5 * time.Second )
var ( // DefaultTimeout specifies a general purpose timeout. DefaultTimeout = 10 * time.Second // DefaultPingTimeout specifies a ping timeout. DefaultPingTimeout = 500 * time.Millisecond )
Functions ¶
func NormalizeAddress ¶
Types ¶
type Backoff ¶
type Backoff interface { // Next returns the duration to sleep before retrying to reconnect. // If the returned value is negative, the retry is aborted. NextBackOff() time.Duration // Reset is used to signal a reconnection was successful and next // call to Next should return desired time duration for 1st reconnection // attempt. Reset() }
Backoff defines behavior of staggering reconnection retries.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is responsible for creating connection to the server, handling control messages. It uses ProxyFunc for transferring data between server and local services.
func NewClient ¶
func NewClient(config *ClientConfig) (*Client, error)
NewClient creates a new unconnected Client based on configuration. Caller must invoke Start() on returned instance in order to connect server.
type ClientConfig ¶
type ClientConfig struct { // ServerAddr specifies TCP address of the tunnel server. ServerAddr string // TLSClientConfig specifies the tls configuration to use with // tls.Client. TLSClientConfig *tls.Config // DialTLS specifies an optional dial function that creates a tls // connection to the server. If DialTLS is nil, tls.Dial is used. DialTLS func(network, addr string, config *tls.Config) (net.Conn, error) // Backoff specifies backoff policy on server connection retry. If nil // when dial fails it will not be retried. Backoff Backoff // Tunnels specifies the tunnels client requests to be opened on server. Tunnels map[string]*proto.Tunnel // Proxy is ProxyFunc responsible for transferring data between server // and local services. Proxy ProxyFunc // Logger is optional logger. If nil logging is disabled. Logger log.Logger }
ClientConfig is configuration of the Client.
type ProxyFunc ¶
type ProxyFunc func(w io.Writer, r io.ReadCloser, msg *proto.ControlMessage)
ProxyFunc is responsible for forwarding a remote connection to local server and writing the response.
func Proxy ¶
func Proxy(p ProxyFuncs) ProxyFunc
Proxy returns a ProxyFunc that uses custom function if provided.
type ProxyFuncs ¶
type ProxyFuncs struct { // TCP is custom implementation of TCP proxing. TCP ProxyFunc }
ProxyFuncs is a collection of ProxyFunc.
type RegistryItem ¶
RegistryItem holds information about hosts and listeners associated with a client.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is responsible for proxying public connections to the client over a tunnel connection.
func NewServer ¶
func NewServer(config *ServerConfig) (*Server, error)
NewServer creates a new Server.
func (Server) IsSubscribed ¶
IsSubscribed returns true if client is subscribed.
func (*Server) Start ¶
Start starts accepting connections form clients. For accepting http traffic from end users server must be run as handler on http server.
func (Server) Subscriber ¶
Subscriber returns client identifier assigned to given host.
func (*Server) Unsubscribe ¶
func (s *Server) Unsubscribe(identifier id.ID) *RegistryItem
Unsubscribe removes client from registry, disconnects client if already connected and returns it's RegistryItem.
type ServerConfig ¶
type ServerConfig struct { // Addr is TCP address to listen for client connections. If empty ":0" // is used. Addr string // AutoSubscribe if enabled will automatically subscribe new clients on // first call. AutoSubscribe bool // TLSConfig specifies the tls configuration to use with tls.Listener. TLSConfig *tls.Config // Listener specifies optional listener for client connections. If nil // tls.Listen("tcp", Addr, TLSConfig) is used. Listener net.Listener // Logger is optional logger. If nil logging is disabled. Logger log.Logger }
ServerConfig defines configuration for the Server.
type TCPProxy ¶
type TCPProxy struct {
// contains filtered or unexported fields
}
TCPProxy forwards TCP streams.
func NewMultiTCPProxy ¶
NewMultiTCPProxy creates a new dispatching TCPProxy, connections may go to different backends based on localAddrMap.
func NewTCPProxy ¶
NewTCPProxy creates new direct TCPProxy, everything will be proxied to localAddr.
func (*TCPProxy) Proxy ¶
func (p *TCPProxy) Proxy(w io.Writer, r io.ReadCloser, msg *proto.ControlMessage)
Proxy is a ProxyFunc.