vpn

package
v0.0.0-...-f0ebf03 Latest Latest
Warning

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

Go to latest
Published: Jan 4, 2022 License: GPL-3.0 Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ChannelType_undefined = ChannelType(iota)

	ChannelTypeDirect
	ChannelTypeIPFS
	ChannelTypeTunnel

	ChannelType_max

	ChannelTypeAutoRouted
)
View Source
const (
	MessageTypeUndefined = MessageType(iota)
	MessageTypePing
	MessageTypePong
	MessageTypeIntAlias
	MessageTypeEnscapsulated
	MessageTypeConfig
)
View Source
const (
	TopicUpdateSimpleTunnelPort  = `vpn.update_simple_tunnel_port`
	TopicRequestSimpleTunnelPort = `vpn.request_simple_tunnel_port`
	TopicUpdateDirectPort        = `vpn.update_direct_port`
	TopicRequestDirectPort       = `vpn.request_direct_port`
)
View Source
const (
	PeerIDSize = 38
)

Variables

View Source
var (
	ErrUnknownMessageType = e.New("unknown message type")
	ErrMessageTooShort    = e.New(`message is too short`)
	ErrMessageFragmented  = e.New(`message was fragmented`)
	ErrInvalidSize        = e.New(`invalid size`)
	ErrNegativeRTT        = e.New(`negative RTT`)
	ErrWriterIsNil        = e.New(`writer is nil`)
	ErrUnexpectedCount    = e.New(`unexpected count`)
)
View Source
var (
	ErrAlreadyClosed      = e.New(`already closed`)
	ErrAlreadyStarted     = e.New(`already started`)
	ErrWrongMessageLength = e.New(`wrong message length`)
	ErrInvalidPeerID      = e.New(`invalid peer ID`)
)
View Source
var (
	ErrInvalidSignature = e.New(`invalid signature`)
)

Functions

func IsDisabledChannel

func IsDisabledChannel(chType ChannelType) bool

Types

type AddrInfo

type AddrInfo = network.AddrInfo

type ChannelType

type ChannelType uint8

func (ChannelType) String

func (chType ChannelType) String() string

type Config

type Config struct {
	IntAlias           IntAlias
	DirectWGPort       uint16
	SimpleTunnelPort   uint16
	IPFSWGPort         uint16
	SimpleTunnelWGPort uint16
	Peers              map[string]PeerConfig
}

func (Config) Copy

func (cfg Config) Copy() *Config

func (*Config) Marshal

func (cfg *Config) Marshal() ([]byte, error)

func (*Config) Unmarshal

func (cfg *Config) Unmarshal(b []byte) error

type IntAlias

type IntAlias struct {
	PeerID         peer.ID
	Value          uint64
	MaxNetworkSize uint64
	Timestamp      time.Time     `json:",omitempty"`
	Since          time.Duration `json:",omitempty"`
}

func (IntAlias) Copy

func (alias IntAlias) Copy() *IntAlias

func (*IntAlias) Marshal

func (alias *IntAlias) Marshal() ([]byte, error)

func (*IntAlias) Unmarshal

func (alias *IntAlias) Unmarshal(b []byte) error

type IntAliases

type IntAliases []*IntAlias

func (*IntAliases) Marshal

func (aliases *IntAliases) Marshal() ([]byte, error)

func (*IntAliases) Unmarshal

func (aliases *IntAliases) Unmarshal(b []byte) error

type Logger

type Logger interface {
	Error(...interface{})
	Infof(string, ...interface{})
	Debugf(string, ...interface{})

	GetDebugWriter() io.Writer
	GetInfoWriter() io.Writer
	GetErrorWriter() io.Writer
}

type MessageConfig

type MessageConfig struct {
	RoutedNetworks []net.IPNet
}

type MessageIntAlias

type MessageIntAlias struct {
	PeerID         [PeerIDSize]byte
	Value          uint64
	MaxNetworkSize uint64
	Timestamp      int64
	Since          int64

	Index int32
	Count int32
}

func (*MessageIntAlias) FillFrom

func (msg *MessageIntAlias) FillFrom(intAlias *IntAlias) (err error)

func (*MessageIntAlias) FillTo

func (msg *MessageIntAlias) FillTo(intAlias *IntAlias) (err error)

func (*MessageIntAlias) Read

func (msg *MessageIntAlias) Read(b []byte) error

func (*MessageIntAlias) Write

func (msg *MessageIntAlias) Write(b []byte) error

func (*MessageIntAlias) WriteTo

func (msg *MessageIntAlias) WriteTo(writer io.Writer) error

type MessagePing

type MessagePing struct {
	MessagePingData
	SenderSignature [ed25519.SignatureSize]byte
}

func (*MessagePing) Bytes

func (ping *MessagePing) Bytes() []byte

func (*MessagePing) Read

func (ping *MessagePing) Read(b []byte) error

func (*MessagePing) ReadFrom

func (ping *MessagePing) ReadFrom(reader io.Reader) error

func (*MessagePing) SignSender

func (ping *MessagePing) SignSender(privKey ed25519.PrivateKey) (err error)

func (*MessagePing) VerifySender

func (ping *MessagePing) VerifySender(pubKey ed25519.PublicKey) (err error)

func (*MessagePing) Write

func (ping *MessagePing) Write(b []byte) error

func (*MessagePing) WriteTo

func (ping *MessagePing) WriteTo(writer io.Writer) error

type MessagePingData

type MessagePingData struct {
	SequenceID uint64
	SendTS     int64
}

func (*MessagePingData) Bytes

func (pingData *MessagePingData) Bytes() []byte

func (*MessagePingData) Write

func (pingData *MessagePingData) Write(b []byte) error

func (*MessagePingData) WriteTo

func (pingData *MessagePingData) WriteTo(writer io.Writer) error

type MessagePong

type MessagePong struct {
	MessagePongData
	RecipientSignature [ed25519.SignatureSize]byte
}

func (*MessagePong) Bytes

func (pong *MessagePong) Bytes() []byte

func (*MessagePong) Read

func (pong *MessagePong) Read(b []byte) error

func (*MessagePong) SignRecipient

func (pong *MessagePong) SignRecipient(privKey ed25519.PrivateKey) (err error)

func (*MessagePong) VerifyRecipient

func (pong *MessagePong) VerifyRecipient(pubKey ed25519.PublicKey) (err error)

func (*MessagePong) Write

func (pong *MessagePong) Write(b []byte) error

func (*MessagePong) WriteTo

func (pong *MessagePong) WriteTo(writer io.Writer) error

type MessagePongData

type MessagePongData struct {
	MessagePing
	ReceiveTS int64
	SendTS    int64
}

func (*MessagePongData) Bytes

func (pongData *MessagePongData) Bytes() []byte

type MessageType

type MessageType uint16

func ReadMessageType

func ReadMessageType(b []byte) MessageType

func (MessageType) String

func (t MessageType) String() string

func (MessageType) Write

func (t MessageType) Write(b []byte) (n int, err error)

type Peer

type Peer struct {
	ID                   peer.ID
	VPN                  *VPN
	IntAlias             IntAlias
	DirectAddr           *net.UDPAddr
	IPFSControlStream    Stream
	IPFSForwarderStream  Stream
	IPFSTunnelAddrToWG   *net.UDPAddr
	IPFSTunnelConnToWG   *net.UDPConn
	SimpleTunnelConn     net.Conn
	SimpleTunnelConnToWG *net.UDPConn
	SimpleTunnelAddrToWG *net.UDPAddr
	IsTrusted            TrustConfig
	WgPubKey             wgtypes.Key

	LastSuccessfulPingTS     atomic.Value
	LastSuccessfulIPFSPingTS atomic.Value
	// contains filtered or unexported fields
}

func (*Peer) Close

func (peer *Peer) Close() (err error)

func (*Peer) CloseIPFS

func (peer *Peer) CloseIPFS() (err error)

func (*Peer) GetID

func (peer *Peer) GetID() peer.ID

func (*Peer) GetIPFSControlStream

func (peer *Peer) GetIPFSControlStream() (result Stream)

func (*Peer) GetIPFSForwarderStream

func (peer *Peer) GetIPFSForwarderStream() (result Stream)

func (*Peer) GetOptimalChannel

func (peer *Peer) GetOptimalChannel(chTypes ...ChannelType) (optimalChannelType ChannelType)

func (*Peer) GetPublicKey

func (peer *Peer) GetPublicKey() ed25519.PublicKey

func (*Peer) GetRemoteRealIP

func (peer *Peer) GetRemoteRealIP(chType ChannelType) (result net.IP)

func (*Peer) LockDo

func (peer *Peer) LockDo(fn func())

func (*Peer) NewIncomingStream

func (peer *Peer) NewIncomingStream(stream Stream, peerAddr AddrInfo) (err error)

func (*Peer) RLockDo

func (peer *Peer) RLockDo(fn func())

func (*Peer) SendPing

func (peer *Peer) SendPing(chType ChannelType) (err error)

func (*Peer) SetIPFSControlStream

func (peer *Peer) SetIPFSControlStream(stream Stream) (err error)

func (*Peer) SetIPFSForwarderStream

func (peer *Peer) SetIPFSForwarderStream(stream Stream, isOutgoing bool)

func (*Peer) SetIntAlias

func (peer *Peer) SetIntAlias(newIntAlias IntAlias)

func (*Peer) SetSimpleTunnelConn

func (peer *Peer) SetSimpleTunnelConn(conn net.Conn)

func (*Peer) Start

func (peer *Peer) Start()

func (*Peer) StartChannel

func (peer *Peer) StartChannel(chType ChannelType)

func (*Peer) SwitchDirectChannelToPathOfChannel

func (peer *Peer) SwitchDirectChannelToPathOfChannel(chType ChannelType)

type PeerConfig

type PeerConfig struct {
	DirectWGPort     uint16
	SimpleTunnelPort uint16
}

type Peers

type Peers []*Peer

func (Peers) ToWireGuardConfigs

func (peers Peers) ToWireGuardConfigs(chType ChannelType) (result []wgtypes.PeerConfig, err error)

type Stream

type Stream = network.Stream

type TrustConfig

type TrustConfig struct {
	Routing bool
}

type UpperHandler

type UpperHandler interface {
	OnUpdateMyIP(ip net.IP)
	OnNewRoute(peerID peer.ID, chType ChannelType, ip net.IP)
	OnRemoveRoute(peerID peer.ID, chType ChannelType)
}

type VPN

type VPN struct {
	Config
	// contains filtered or unexported fields
}

func New

func New(dirPath string, subnet net.IPNet, logger Logger) (vpn *VPN, err error)

func (*VPN) AddUpperHandler

func (vpn *VPN) AddUpperHandler(upperHandler UpperHandler)

func (*VPN) Close

func (vpn *VPN) Close() (err error)

func (*VPN) ConsiderKnownPeer

func (vpn *VPN) ConsiderKnownPeer(peerAddr AddrInfo)

func (*VPN) GetIP

func (vpn *VPN) GetIP(intAlias uint64, chType ChannelType) (resultIP net.IP, err error)

func (*VPN) GetIntAlias

func (vpn *VPN) GetIntAlias() (r IntAlias)

func (*VPN) GetMyIP

func (vpn *VPN) GetMyIP(chType ChannelType) (net.IP, error)

func (*VPN) GetNetworkMaximalSize

func (vpn *VPN) GetNetworkMaximalSize() uint64

func (*VPN) GetNetworkSize

func (vpn *VPN) GetNetworkSize() (result uint64)

func (*VPN) GetOrCreatePeerByID

func (vpn *VPN) GetOrCreatePeerByID(peerID peer.ID) (result *Peer)

func (*VPN) GetPSK

func (vpn *VPN) GetPSK() (r []byte)

func (*VPN) GetPublicKey

func (vpn *VPN) GetPublicKey() ed25519.PublicKey

func (*VPN) IsBadAddress

func (vpn *VPN) IsBadAddress(maddr multiaddr.Multiaddr) bool

func (*VPN) IsStarted

func (vpn *VPN) IsStarted() bool

func (*VPN) LoadConfig

func (vpn *VPN) LoadConfig() (err error)

func (*VPN) LockDo

func (vpn *VPN) LockDo(fn func())

func (*VPN) NewIncomingStream

func (vpn *VPN) NewIncomingStream(stream Stream, peerAddr AddrInfo)

func (*VPN) OnPeerConnect

func (vpn *VPN) OnPeerConnect(peerID peer.ID)

func (*VPN) PrivKey

func (vpn *VPN) PrivKey() (r ed25519.PrivateKey)

func (*VPN) ProtocolID

func (vpn *VPN) ProtocolID() protocol.ID

func (*VPN) RLockDo

func (vpn *VPN) RLockDo(fn func())

func (*VPN) ReconnectToPeer

func (vpn *VPN) ReconnectToPeer(peerID peer.ID)

func (*VPN) SaveConfig

func (vpn *VPN) SaveConfig() (err error)

func (*VPN) SetID

func (vpn *VPN) SetID(newID peer.ID)

func (*VPN) SetIntAlias

func (vpn *VPN) SetIntAlias(newValue uint64) (err error)

func (*VPN) SetMyAddrs

func (vpn *VPN) SetMyAddrs(addrs []multiaddr.Multiaddr)

func (*VPN) SetNetwork

func (vpn *VPN) SetNetwork(mesh *network.Network)

func (*VPN) SetPSK

func (vpn *VPN) SetPSK(psk []byte)

func (*VPN) SetPrivateKey

func (vpn *VPN) SetPrivateKey(privKey ed25519.PrivateKey)

func (*VPN) Start

func (vpn *VPN) Start() (err error)

func (*VPN) UpdateWireGuardConfiguration

func (vpn *VPN) UpdateWireGuardConfiguration()

type WGNet

type WGNet struct {
	Subnet         net.IPNet
	IfaceName      string
	WGListenerAddr net.UDPAddr
	// contains filtered or unexported fields
}

Jump to

Keyboard shortcuts

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