123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package models
- import (
- "context"
- "crypto/md5"
- "fmt"
- "net"
- "sync"
- "time"
- "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
- )
- // ProxyAction - type for proxy action
- type ProxyAction string
- const (
- // default proxy port
- NmProxyPort = 51722
- // default CIDR for proxy peers
- DefaultCIDR = "127.0.0.1/8"
- // PersistentKeepaliveInterval - default keepalive for wg peer
- DefaultPersistentKeepaliveInterval = time.Duration(time.Second * 20)
- // ProxyUpdate - constant for proxy update action
- ProxyUpdate ProxyAction = "PROXY_UPDATE"
- // ProxyDeletePeers - constant for proxy delete peers action
- ProxyDeletePeers ProxyAction = "PROXY_DELETE"
- // ProxyDeleteAllPeers - constant for proxy delete all peers action
- ProxyDeleteAllPeers ProxyAction = "PROXY_DELETE_ALL"
- // NoProxy - constant for no ProxyAction
- NoProxy ProxyAction = "NO_PROXY"
- )
- // PeerConnMap - type for peer conn config map
- type PeerConnMap map[string]*Conn
- // Proxy - struct for proxy config
- type Proxy struct {
- PeerPublicKey wgtypes.Key
- IsExtClient bool
- PeerConf wgtypes.PeerConfig
- PeerEndpoint *net.UDPAddr
- RemoteConnAddr *net.UDPAddr
- LocalConnAddr *net.UDPAddr
- ListenPort int
- ProxyStatus bool
- }
- // Conn is a peer Connection configuration
- type Conn struct {
- // Key is a public key of a remote peer
- Key wgtypes.Key
- IsExtClient bool
- IsRelayed bool
- RelayedEndpoint *net.UDPAddr
- Config Proxy
- StopConn func()
- ResetConn func()
- LocalConn net.Conn
- Mutex *sync.RWMutex
- NetworkSettings map[string]Settings
- ServerMap map[string]struct{}
- }
- // RemotePeer - struct remote peer data
- type RemotePeer struct {
- PeerKey string
- Endpoint *net.UDPAddr
- IsExtClient bool
- LocalConn net.Conn
- CancelFunc context.CancelFunc
- CommChan chan *net.UDPAddr
- }
- // HostInfo - struct for host information
- type HostInfo struct {
- PublicIp net.IP
- PrivIp net.IP
- PubPort int
- PrivPort int
- ProxyEnabled bool
- }
- // RelayedConf - struct relayed peers config
- type RelayedConf struct {
- RelayedPeerEndpoint *net.UDPAddr `json:"relayed_peer_endpoint"`
- RelayedPeerPubKey string `json:"relayed_peer_pub_key"`
- Peers []wgtypes.PeerConfig `json:"relayed_peers"`
- }
- // PeerConf - struct for peer config in the network
- type PeerConf struct {
- Proxy bool `json:"proxy"`
- PublicListenPort int32 `json:"public_listen_port"`
- IsExtClient bool `json:"is_ext_client"`
- Address net.IP `json:"address"`
- ExtInternalIp net.IP `json:"ext_internal_ip"`
- IsRelayed bool `json:"is_relayed"`
- RelayedTo *net.UDPAddr `json:"relayed_to"`
- }
- // ConvPeerKeyToHash - converts peer key to a md5 hash
- func ConvPeerKeyToHash(peerKey string) string {
- return fmt.Sprintf("%x", md5.Sum([]byte(peerKey)))
- }
- // IsPublicIP indicates whether IP is public or not.
- func IsPublicIP(ip net.IP) bool {
- if ip.IsLoopback() || ip.IsLinkLocalUnicast() || ip.IsLinkLocalMulticast() || ip.IsPrivate() {
- return false
- }
- return true
- }
- // ProxyManagerPayload - struct for proxy manager payload
- type ProxyManagerPayload struct {
- Action ProxyAction `json:"action"`
- InterfaceName string `json:"interface_name"`
- Server string `json:"server"`
- //WgAddr string `json:"wg_addr"`
- Peers []wgtypes.PeerConfig `json:"peers"`
- PeerMap map[string]PeerConf `json:"peer_map"`
- IsIngress bool `json:"is_ingress"`
- IsRelayed bool `json:"is_relayed"`
- RelayedTo *net.UDPAddr `json:"relayed_to"`
- IsRelay bool `json:"is_relay"`
- RelayedPeerConf map[string]RelayedConf `json:"relayed_conf"`
- }
- // Metric - struct for metric data
- type ProxyMetric struct {
- NodeConnectionStatus map[string]bool `json:"node_connection_status"`
- LastRecordedLatency uint64 `json:"last_recorded_latency"`
- TrafficSent int64 `json:"traffic_sent"` // stored in MB
- TrafficRecieved int64 `json:"traffic_recieved"` // stored in MB
- }
- // Settings - struct for host settings
- type Settings struct {
- IsRelay bool
- IsIngressGateway bool
- IsRelayed bool
- RelayedTo *net.UDPAddr
- }
|