Documentation
¶
Overview ¶
Package libproxy provides a network Proxy interface and implementations for TCP and UDP.
Index ¶
- Constants
- func ExposePort(host net.Addr, container net.Addr) (*os.File, error)
- func HandleMultiplexedConnections(conn net.Conn, quit chan struct{}) error
- func HandleTCPConnection(client Conn, backendAddr *net.TCPAddr, quit chan struct{}) error
- type Conn
- type Proxy
- type StubProxy
- type TCPProxy
- type UDPListener
- type UDPProxy
Constants ¶
const ( // TCP protocol const TCP = 1 // UDP protocol const UDP = 2 )
const ( // UDPConnTrackTimeout is the timeout used for UDP connection tracking UDPConnTrackTimeout = 90 * time.Second // UDPBufSize is the buffer size for the UDP proxy UDPBufSize = 65507 )
Variables ¶
This section is empty.
Functions ¶
func ExposePort ¶ added in v0.2.0
func HandleMultiplexedConnections ¶ added in v0.2.0
Types ¶
type Proxy ¶
type Proxy interface {
// Run starts forwarding traffic back and forth between the front
// and back-end addresses.
Run()
// Close stops forwarding traffic and close both ends of the Proxy.
Close()
// FrontendAddr returns the address on which the proxy is listening.
FrontendAddr() net.Addr
// BackendAddr returns the proxied address.
BackendAddr() net.Addr
}
Proxy defines the behavior of a proxy. It forwards traffic back and forth between two endpoints : the frontend and the backend. It can be used to do software port-mapping between two addresses. e.g. forward all traffic between the frontend (host) 127.0.0.1:3000 to the backend (container) at 172.17.42.108:4000.
func NewBestEffortIPProxy ¶ added in v0.2.0
Best-effort attempt to listen on the address in the VM. This is for backwards compatibility with software that expects to be able to listen on 0.0.0.0 and then connect from within a container to the external port. If the address doesn't exist in the VM (i.e. it exists only on the host) then this is not a hard failure.
func NewIPProxy ¶
NewIPProxy creates a Proxy according to the specified frontendAddr and backendAddr.
func NewStubProxy ¶
NewStubProxy creates a new StubProxy
type StubProxy ¶
type StubProxy struct {
// contains filtered or unexported fields
}
StubProxy is a proxy that is a stub (does nothing).
func (*StubProxy) BackendAddr ¶
BackendAddr returns the backend address.
func (*StubProxy) FrontendAddr ¶
FrontendAddr returns the frontend address.
type TCPProxy ¶
type TCPProxy struct {
// contains filtered or unexported fields
}
TCPProxy is a proxy for TCP connections. It implements the Proxy interface to handle TCP traffic forwarding between the frontend and backend addresses.
func NewTCPProxy ¶
NewTCPProxy creates a new TCPProxy.
func (*TCPProxy) BackendAddr ¶
BackendAddr returns the TCP proxied address.
func (*TCPProxy) FrontendAddr ¶
FrontendAddr returns the TCP address on which the proxy is listening.
type UDPListener ¶
type UDPListener interface {
ReadFromUDP(b []byte) (int, *net.UDPAddr, error)
WriteToUDP(b []byte, addr *net.UDPAddr) (int, error)
Close() error
}
UDPListener defines a listener interface to read, write and close a UDP connection
func NewUDPConn ¶
func NewUDPConn(conn net.Conn) UDPListener
NewUDPConn initializes a new UDP connection
func NewUDPListener ¶
func NewUDPListener(listener net.Listener) UDPListener
NewUDPListener initializes a new UDP listener
type UDPProxy ¶
type UDPProxy struct {
// contains filtered or unexported fields
}
UDPProxy is proxy for which handles UDP datagrams. It implements the Proxy interface to handle UDP traffic forwarding between the frontend and backend addresses.
func NewUDPProxy ¶
func NewUDPProxy(frontendAddr net.Addr, listener UDPListener, backendAddr *net.UDPAddr) (*UDPProxy, error)
NewUDPProxy creates a new UDPProxy.
func (*UDPProxy) BackendAddr ¶
BackendAddr returns the proxied UDP address.
func (*UDPProxy) FrontendAddr ¶
FrontendAddr returns the UDP address on which the proxy is listening.