package vpnkit

import "github.com/moby/vpnkit/go/pkg/vpnkit"

Package vpnkit allows a running VPNKit service to be reconfigured.

Features

- expose/unexpose TCP and UDP ports

Index

Constants

const (
	// DefaultControlVsock is the AF_VSOCK port the control-plane interface listens on.
	DefaultControlVsock = 0x1002

	// DefaultDataVsock is the AF_VSOCK port the data-plane interface listens on.
	DefaultDataVsock = 0xf3a4
)
const (
	ListPath         = "/forwards/list"
	ExposePortPath   = "/forwards/expose/port"
	ExposePipePath   = "/forwards/expose/pipe"
	UnexposePortPath = "/forwards/unexpose/port"
	UnexposePipePath = "/forwards/unexpose/pipe"
	DumpStatePath    = "/forwards/dump"
)
const (
	// TCP port is exposed
	TCP = Protocol("tcp")
	// UDP port is exposed
	UDP = Protocol("udp")
	// Unix domain socket is exposed
	Unix = Protocol("unix")
)
const DefaultVsockPort = 62373

DefaultVsockPort is the default AF_VSOCK port where vpnkit-forwarder listens.

Types

type Client

type Client interface {
	Expose(context.Context, *Port) error
	Unexpose(context.Context, *Port) error
	ListExposed(context.Context) ([]Port, error)
	DumpState(context.Context, io.Writer) error
}

Client exposes and unexposes ports on vpnkit.

func NewClient

func NewClient(path string) (Client, error)

NewClient can be used to manipulated exposed ports.

type Control

type Control interface {
	Mux() libproxy.Multiplexer   // Mux is the current multiplexer to forward to
	SetMux(libproxy.Multiplexer) // SetMux updates the current multiplexer for future connections
}

Control is the port-forwarding control-plane

type DHCPConfiguration

type DHCPConfiguration struct {
	SearchDomains []string `json:"searchDomains"`
	DomainName    string   `json:"domainName"`
}

DHCPConfiguration configures the built-in DHCP server.

func (DHCPConfiguration) Write

func (d DHCPConfiguration) Write(w io.Writer) error

type Dialer

type Dialer struct {
	HyperkitConnectPath string // HyperkitConnectPath is the path of the `connect` Unix domain socket
	HyperVVMID          string // HyperkitVMVMID is the GUID of the VM running vpnkit-forwarder
	Port                int    // Port is the AF_VSOCK port where vpnkit-forwarder is listening
	// contains filtered or unexported fields
}

Dialer connects to remote addresses via the vpnkit-forwarder.

func (*Dialer) Dial

func (d *Dialer) Dial(network, address string) (net.Conn, error)

Dial connects to the address on the named network.

type ExposeError

type ExposeError struct {
	Message string `json:"message"`
}

ExposeError should be reported through to the user

func (*ExposeError) Error

func (e *ExposeError) Error() string

type Forward

type Forward struct {
	Protocol     Protocol `json:"protocol"`
	ExternalPort int      `json:"external_port"`
	InternalIP   string   `json:"internal_ip"`
	InternalPort int      `json:"internal_port"`
}

Forward is a single forward from the gateway IP ExternalPort to (InternalIP, InternalPort)

type GatewayForwards

type GatewayForwards []Forward

GatewayForwards is a list of individual forwards.

func (GatewayForwards) Write

func (g GatewayForwards) Write(w io.Writer) error

type HTTPConfiguration

type HTTPConfiguration struct {
	HTTP                  string `json:"http,omitempty"`
	HTTPS                 string `json:"https,omitempty"`
	Exclude               string `json:"exclude,omitempty"`
	TransparentHTTPPorts  []int  `json:"transparent_http_ports"`
	TransparentHTTPSPorts []int  `json:"transparent_https_ports"`
}

HTTPConfiguration configures the built-in HTTP proxy.

func (HTTPConfiguration) Write

func (h HTTPConfiguration) Write(w io.Writer) error

type Implementation

type Implementation interface {
	Client
}

Implementation of the control interface.

type Port

type Port struct {
	Proto      Protocol `json:"proto,omitempty"`    // Proto is the protocol used by the exposed port.
	OutIP      net.IP   `json:"out_ip,omitempty"`   // OutIP is the external IP address.
	OutPort    uint16   `json:"out_port,omitempty"` // OutPort is the external port number.
	OutPath    string   `json:"out_path,omitempty"` // OutPath is the external Unix domain socket.
	InIP       net.IP   `json:"in_ip,omitempty"`    // InIP is the internal IP address.
	InPort     uint16   `json:"in_port,omitempty"`  // InPort is the internal port number.
	InPath     string   `json:"in_path,omitempty"`  // InPath is the internal Unix domain socket.
	Annotation string   `json:"annotation,omitempty"`
}

Port describes a UDP, TCP port forward or a Unix domain socket forward.

func (*Port) String

func (p *Port) String() string

String returns a human-readable string

type Protocol

type Protocol string

Protocol used by the exposed port.

type Server

type Server interface {
	Start()
	Stop() error
	List(echo.Context) error
	ExposePort(echo.Context) error
	ExposePipe(echo.Context) error
	UnexposePort(echo.Context) error
	UnexposePipe(echo.Context) error
	DumpState(echo.Context) error

	Echo() *echo.Echo
}

Server exposes port control over HTTP.

func NewServer

func NewServer(path string, impl Implementation) (Server, error)

NewServer handles requests to manipulate exposed ports.

Source Files

config.go connection.go control.go defaults.go dialer.go dialer_linux.go doc.go http.go port.go

Directories

PathSynopsis
go/pkg/vpnkit/control
go/pkg/vpnkit/forward
go/pkg/vpnkit/log
go/pkg/vpnkit/transport
Version
v0.4.0
Published
Mar 4, 2020
Platform
linux/amd64
Imports
18 packages
Last checked
4 hours ago

Tools for package owners.