From b1595d5ef4197462d9ff556b70365bf9e8113518 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Tue, 26 Oct 2021 16:12:13 -0400 Subject: [PATCH 1/8] fixed minor client bug --- netclient/main.go | 2 +- netclient/ncutils/netclientutils.go | 6 ++++ servercfg/serverconf.go | 48 +++++++++++++++++++++++++++++ serverctl/serverctl.go | 4 ++- 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/netclient/main.go b/netclient/main.go index 12ace5b8..dece9fcc 100644 --- a/netclient/main.go +++ b/netclient/main.go @@ -24,7 +24,7 @@ func main() { app := cli.NewApp() app.Name = "Netclient CLI" app.Usage = "Netmaker's netclient agent and CLI. Used to perform interactions with Netmaker server and set local WireGuard config." - app.Version = "v0.8.4" + app.Version = "v0.8.5" hostname, err := os.Hostname() if err != nil { diff --git a/netclient/ncutils/netclientutils.go b/netclient/ncutils/netclientutils.go index 793d93f7..e9b4102b 100644 --- a/netclient/ncutils/netclientutils.go +++ b/netclient/ncutils/netclientutils.go @@ -397,6 +397,12 @@ func FileExists(f string) bool { if os.IsNotExist(err) { return false } + if err != nil && strings.Contains(err.Error(), "not a directory") { + return false + } + if err != nil { + Log("error reading file: " + f + ", " + err.Error()) + } return !info.IsDir() } diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index 8e9d8b4b..17c58213 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -12,6 +12,7 @@ import ( "github.com/gravitl/netmaker/config" ) +// SetHost - sets the host ip func SetHost() error { remoteip, err := GetPublicIP() if err != nil { @@ -20,6 +21,8 @@ func SetHost() error { os.Setenv("SERVER_HOST", remoteip) return nil } + +// GetServerConfig - gets the server config into memory from file or env func GetServerConfig() config.ServerConfig { var cfg config.ServerConfig cfg.APIConnString = GetAPIConnString() @@ -76,6 +79,8 @@ func GetServerConfig() config.ServerConfig { return cfg } + +// GetFrontendURL - gets the frontend url func GetFrontendURL() string { var frontend = "" if os.Getenv("FRONTEND_URL") != "" { @@ -86,6 +91,7 @@ func GetFrontendURL() string { return frontend } +// GetAPIConnString - gets the api connections string func GetAPIConnString() string { conn := "" if os.Getenv("SERVER_API_CONN_STRING") != "" { @@ -95,6 +101,8 @@ func GetAPIConnString() string { } return conn } + +// GetVersion - version of netmaker func GetVersion() string { version := "0.8.5" if config.Config.Server.Version != "" { @@ -102,6 +110,8 @@ func GetVersion() string { } return version } + +// GetDB - gets the database type func GetDB() string { database := "sqlite" if os.Getenv("DATABASE") != "" { @@ -111,6 +121,8 @@ func GetDB() string { } return database } + +// GetAPIHost - gets the api host func GetAPIHost() string { serverhost := "127.0.0.1" remoteip, _ := GetPublicIP() @@ -127,6 +139,8 @@ func GetAPIHost() string { } return serverhost } + +// GetPodIP - get the pod's ip func GetPodIP() string { podip := "127.0.0.1" if os.Getenv("POD_IP") != "" { @@ -135,6 +149,7 @@ func GetPodIP() string { return podip } +// GetAPIPort - gets the api port func GetAPIPort() string { apiport := "8081" if os.Getenv("API_PORT") != "" { @@ -145,6 +160,7 @@ func GetAPIPort() string { return apiport } +// GetCheckinInterval - get check in interval for nodes func GetCheckinInterval() string { seconds := "15" if os.Getenv("CHECKIN_INTERVAL") != "" { @@ -155,6 +171,7 @@ func GetCheckinInterval() string { return seconds } +// GetDefaultNodeLimit - get node limit if one is set func GetDefaultNodeLimit() int32 { var limit int32 limit = 999999999 @@ -166,6 +183,8 @@ func GetDefaultNodeLimit() int32 { } return limit } + +// GetGRPCConnString - get grpc conn string func GetGRPCConnString() string { conn := "" if os.Getenv("SERVER_GRPC_CONN_STRING") != "" { @@ -176,6 +195,7 @@ func GetGRPCConnString() string { return conn } +// GetCoreDNSAddr - gets the core dns address func GetCoreDNSAddr() string { addr, _ := GetPublicIP() if os.Getenv("COREDNS_ADDR") != "" { @@ -186,6 +206,7 @@ func GetCoreDNSAddr() string { return addr } +// GetGRPCHost - get the grpc host url func GetGRPCHost() string { serverhost := "127.0.0.1" remoteip, _ := GetPublicIP() @@ -202,6 +223,8 @@ func GetGRPCHost() string { } return serverhost } + +// GetGRPCPort - gets the grpc port func GetGRPCPort() string { grpcport := "50051" if os.Getenv("GRPC_PORT") != "" { @@ -211,6 +234,8 @@ func GetGRPCPort() string { } return grpcport } + +// GetMasterKey - gets the configured master key of server func GetMasterKey() string { key := "secretkey" if os.Getenv("MASTER_KEY") != "" { @@ -220,6 +245,8 @@ func GetMasterKey() string { } return key } + +// GetAllowedOrigin - get the allowed origin func GetAllowedOrigin() string { allowedorigin := "*" if os.Getenv("CORS_ALLOWED_ORIGIN") != "" { @@ -229,6 +256,8 @@ func GetAllowedOrigin() string { } return allowedorigin } + +// IsRestBackend - checks if rest is on or off func IsRestBackend() bool { isrest := true if os.Getenv("REST_BACKEND") != "" { @@ -242,6 +271,8 @@ func IsRestBackend() bool { } return isrest } + +// IsAgentBackend - checks if agent backed is on or off func IsAgentBackend() bool { isagent := true if os.Getenv("AGENT_BACKEND") != "" { @@ -255,6 +286,8 @@ func IsAgentBackend() bool { } return isagent } + +// IsClientMode - checks if it should run in client mode func IsClientMode() string { isclient := "on" if os.Getenv("CLIENT_MODE") != "" { @@ -274,6 +307,8 @@ func IsClientMode() string { } return isclient } + +// IsDNSMode - should it run with DNS func IsDNSMode() bool { isdns := true if os.Getenv("DNS_MODE") != "" { @@ -288,6 +323,7 @@ func IsDNSMode() bool { return isdns } +// IsGRPCSSL - ssl grpc on or off func IsGRPCSSL() bool { isssl := false if os.Getenv("GRPC_SSL") != "" { @@ -302,6 +338,7 @@ func IsGRPCSSL() bool { return isssl } +// DisableRemoteIPCheck - disable the remote ip check func DisableRemoteIPCheck() bool { disabled := false if os.Getenv("DISABLE_REMOTE_IP_CHECK") != "" { @@ -315,6 +352,8 @@ func DisableRemoteIPCheck() bool { } return disabled } + +// DisableDefaultNet - disable default net func DisableDefaultNet() bool { disabled := false if os.Getenv("DISABLE_DEFAULT_NET") != "" { @@ -328,6 +367,8 @@ func DisableDefaultNet() bool { } return disabled } + +// GetPublicIP - gets public ip func GetPublicIP() (string, error) { endpoint := "" @@ -354,6 +395,8 @@ func GetPublicIP() (string, error) { } return endpoint, err } + +// GetVerbose - get the verbosity of server func GetVerbose() int32 { level, err := strconv.Atoi(os.Getenv("VERBOSITY")) if err != nil || level < 0 { @@ -365,6 +408,7 @@ func GetVerbose() int32 { return int32(level) } +// GetPlatform - get the system type of server func GetPlatform() string { platform := "linux" if os.Getenv("PLATFORM") != "" { @@ -375,6 +419,7 @@ func GetPlatform() string { return platform } +// GetSQLConn - get the sql connection string func GetSQLConn() string { sqlconn := "http://" if os.Getenv("SQL_CONN") != "" { @@ -385,6 +430,7 @@ func GetSQLConn() string { return sqlconn } +// IsSplitDNS - checks if split dns is on func IsSplitDNS() bool { issplit := false if os.Getenv("IS_SPLIT_DNS") == "yes" { @@ -395,6 +441,7 @@ func IsSplitDNS() bool { return issplit } +// GetNodeID - gets the node id func GetNodeID() string { var id string id = getMacAddr() @@ -406,6 +453,7 @@ func GetNodeID() string { return id } +// GetServerCheckinInterval - gets the server check-in time func GetServerCheckinInterval() int64 { var t = int64(5) var envt, _ = strconv.Atoi(os.Getenv("SERVER_CHECKIN_INTERVAL")) diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index e2d861f6..b6280a6f 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -107,9 +107,11 @@ func HandleContainedClient() error { err = logic.ServerCheckin(servercfg.GetNodeID(), serverNet.NetID) if err != nil { logic.Log("error occurred during server checkin: "+err.Error(), 1) + } else { + logic.Log("completed a checking peers of network "+serverNet.NetID, 3) } } - logic.Log("completed a checkin call", 3) + // logic.Log("completed a checkin call", 3) } return nil } From 67a65605a4c37b15f8b4910a20e4643a95f6cd8e Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 27 Oct 2021 08:52:51 -0400 Subject: [PATCH 2/8] logs --- logic/networks.go | 2 ++ logic/wireguard.go | 2 +- serverctl/serverctl.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/logic/networks.go b/logic/networks.go index 9d513f49..669fc2f1 100644 --- a/logic/networks.go +++ b/logic/networks.go @@ -451,9 +451,11 @@ func isInterfacePresent(iface string, address string) (string, bool) { } for _, addr := range currAddrs { if strings.Contains(addr.String(), address) && currIface.Name != iface { + Log("found iface "+addr.String()+" "+currIface.Name, 2) return currIface.Name, false } } } + Log("failed to find iface "+iface, 2) return "", true } diff --git a/logic/wireguard.go b/logic/wireguard.go index cb318f06..454af426 100644 --- a/logic/wireguard.go +++ b/logic/wireguard.go @@ -169,7 +169,7 @@ func initWireguard(node *models.Node, privkey string, peers []wgtypes.PeerConfig } // set MTU of node interface if _, err := ncutils.RunCmd(ipExec+" link set mtu "+strconv.Itoa(int(node.MTU))+" up dev "+ifacename, true); err != nil { - Log("failed to create interface with mtu "+ifacename, 2) + Log("failed to create interface with mtu "+strconv.Itoa(int(node.MTU))+" - "+ifacename, 2) return err } diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index b6280a6f..cc85fc75 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -108,7 +108,7 @@ func HandleContainedClient() error { if err != nil { logic.Log("error occurred during server checkin: "+err.Error(), 1) } else { - logic.Log("completed a checking peers of network "+serverNet.NetID, 3) + logic.Log("completed peers check of network "+serverNet.NetID, 3) } } // logic.Log("completed a checkin call", 3) From e4e8f368d6622b606373678a2257215c149cb41f Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 27 Oct 2021 09:27:52 -0400 Subject: [PATCH 3/8] logs 2 --- logic/server.go | 3 +++ serverctl/serverctl.go | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/logic/server.go b/logic/server.go index 84f4b0ee..8bed02cc 100644 --- a/logic/server.go +++ b/logic/server.go @@ -2,6 +2,7 @@ package logic import ( "errors" + "fmt" "net" "os" "runtime" @@ -108,6 +109,8 @@ func ServerJoin(network string, serverID string, privateKey string) error { node.ListenPort, err = ncutils.GetFreePort(node.ListenPort) if err != nil { Log("Error retrieving port: "+err.Error(), 2) + } else { + Log("Set client port to "+fmt.Sprintf("%d", node.ListenPort)+" for network "+node.Network, 1) } // safety check. If returned node from server is local, but not currently configured as local, set to local addr diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index cc85fc75..8bb71ef7 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -170,7 +170,9 @@ func SyncNetworks(servernets []models.Network) error { // AddNetwork - add a network to server in client mode func AddNetwork(network string) (bool, error) { - err := logic.ServerJoin(network, servercfg.GetNodeID(), "") - logic.Log("server added to network "+network, 2) + var err error + if err = logic.ServerJoin(network, servercfg.GetNodeID(), ""); err == nil { + logic.Log("server added to network "+network, 2) + } return true, err } From f91dae53554b067d90c7cb7c766fa766866c47e8 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 27 Oct 2021 10:02:39 -0400 Subject: [PATCH 4/8] refactored unneccesary db call --- logic/server.go | 43 ++++++++++------------------- netclient/ncutils/netclientutils.go | 1 + 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/logic/server.go b/logic/server.go index 8bed02cc..c2b738d2 100644 --- a/logic/server.go +++ b/logic/server.go @@ -126,7 +126,7 @@ func ServerJoin(network string, serverID string, privateKey string) error { if err = StorePrivKey(node.ID, privateKey); err != nil { return err } - if err = ServerPush(node.MacAddress, node.Network); err != nil { + if err = ServerPush(node); err != nil { return err } @@ -154,7 +154,7 @@ func ServerCheckin(mac string, network string) error { return err } - newNode, err = ServerPull(mac, network, false) + newNode, err = ServerPull(&serverNode, false) if isDeleteError(err) { return ServerLeave(mac, network) } else if err != nil { @@ -166,22 +166,16 @@ func ServerCheckin(mac string, network string) error { return errors.New("node has been removed") } - return ServerPush(newNode.MacAddress, newNode.Network) + return ServerPush(newNode) } // ServerPull - pulls current config/peers for server -func ServerPull(mac string, network string, onErr bool) (*models.Node, error) { +func ServerPull(serverNode *models.Node, onErr bool) (*models.Node, error) { - var serverNode models.Node var err error - serverNode, err = GetNode(mac, network) - if err != nil { - return &serverNode, err - } - if serverNode.IPForwarding == "yes" { if err = setIPForwardingLinux(); err != nil { - return &serverNode, err + return serverNode, err } } serverNode.OS = runtime.GOOS @@ -199,38 +193,31 @@ func ServerPull(mac string, network string, onErr bool) (*models.Node, error) { Log("removed old interface "+oldIfaceName, 1) } serverNode.PullChanges = "no" - if err = setWGConfig(serverNode, network, false); err != nil { - return &serverNode, err + if err = setWGConfig(*serverNode, serverNode.Network, false); err != nil { + return serverNode, err } // handle server side update - if err = UpdateNode(&serverNode, &serverNode); err != nil { - return &serverNode, err + if err = UpdateNode(serverNode, serverNode); err != nil { + return serverNode, err } } else { - if err = setWGConfig(serverNode, network, true); err != nil { + if err = setWGConfig(*serverNode, serverNode.Network, true); err != nil { if errors.Is(err, os.ErrNotExist) { - return ServerPull(serverNode.MacAddress, serverNode.Network, true) + return ServerPull(serverNode, true) } else { - return &serverNode, err + return serverNode, err } } } - return &serverNode, nil + return serverNode, nil } // ServerPush - pushes config changes for server checkins/join -func ServerPush(mac string, network string) error { - - var serverNode models.Node - var err error - serverNode, err = GetNode(mac, network) - if err != nil /* && !ncutils.IsEmptyRecord(err) May not be necessary */ { - return err - } +func ServerPush(serverNode *models.Node) error { serverNode.OS = runtime.GOOS serverNode.SetLastCheckIn() - return UpdateNode(&serverNode, &serverNode) + return UpdateNode(serverNode, serverNode) } // ServerLeave - removes a server node diff --git a/netclient/ncutils/netclientutils.go b/netclient/ncutils/netclientutils.go index e9b4102b..764406e2 100644 --- a/netclient/ncutils/netclientutils.go +++ b/netclient/ncutils/netclientutils.go @@ -271,6 +271,7 @@ func GetFreePort(rangestart int32) (int32, error) { if err != nil { return 0, err } + for x := rangestart; x <= 65535; x++ { conflict := false for _, i := range devices { From 7121f06c6d13ae26fcc62f056e658a3e1a11dc33 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 27 Oct 2021 10:08:02 -0400 Subject: [PATCH 5/8] log 3 --- serverctl/serverctl.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index 8bb71ef7..76844416 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -171,8 +171,8 @@ func SyncNetworks(servernets []models.Network) error { // AddNetwork - add a network to server in client mode func AddNetwork(network string) (bool, error) { var err error - if err = logic.ServerJoin(network, servercfg.GetNodeID(), ""); err == nil { - logic.Log("server added to network "+network, 2) + if err = logic.ServerJoin(network, servercfg.GetNodeID(), ""); err != nil { + logic.Log("server was not added to network "+network+", "+err.Error(), 2) } return true, err } From 21706edad8cd1a6efe168a5fe7d11a88abdb092b Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 27 Oct 2021 10:09:15 -0400 Subject: [PATCH 6/8] log 4 --- serverctl/serverctl.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index 76844416..8d9d6feb 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -170,9 +170,6 @@ func SyncNetworks(servernets []models.Network) error { // AddNetwork - add a network to server in client mode func AddNetwork(network string) (bool, error) { - var err error - if err = logic.ServerJoin(network, servercfg.GetNodeID(), ""); err != nil { - logic.Log("server was not added to network "+network+", "+err.Error(), 2) - } + var err = logic.ServerJoin(network, servercfg.GetNodeID(), "") return true, err } From c5fe5c8ed7bd69f17dd88bca287893b00a251e24 Mon Sep 17 00:00:00 2001 From: 0xdcarns Date: Wed, 27 Oct 2021 11:02:11 -0400 Subject: [PATCH 7/8] compose update --- compose/docker-compose.caddy.yml | 4 ++-- compose/docker-compose.nodns.yml | 4 ++-- compose/docker-compose.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/compose/docker-compose.caddy.yml b/compose/docker-compose.caddy.yml index ce75f00f..5a1afe7d 100644 --- a/compose/docker-compose.caddy.yml +++ b/compose/docker-compose.caddy.yml @@ -3,7 +3,7 @@ version: "3.4" services: netmaker: container_name: netmaker - image: gravitl/netmaker:v0.8.4 + image: gravitl/netmaker:v0.8.5 volumes: - /etc/netclient/config:/etc/netclient/config - dnsconfig:/root/config/dnsconfig @@ -33,7 +33,7 @@ services: container_name: netmaker-ui depends_on: - netmaker - image: gravitl/netmaker-ui:v0.8 + image: gravitl/netmaker-ui:v0.8.5 links: - "netmaker:api" ports: diff --git a/compose/docker-compose.nodns.yml b/compose/docker-compose.nodns.yml index ab6d5803..41715e5e 100644 --- a/compose/docker-compose.nodns.yml +++ b/compose/docker-compose.nodns.yml @@ -3,7 +3,7 @@ version: "3.4" services: netmaker: container_name: netmaker - image: gravitl/netmaker:v0.8.4 + image: gravitl/netmaker:v0.8.5 volumes: - /etc/netclient/config:/etc/netclient/config - /usr/bin/wg:/usr/bin/wg @@ -32,7 +32,7 @@ services: container_name: netmaker-ui depends_on: - netmaker - image: gravitl/netmaker-ui:v0.8 + image: gravitl/netmaker-ui:v0.8.5 links: - "netmaker:api" ports: diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index 4abb3a64..b77c789e 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.4" services: netmaker: container_name: netmaker - image: gravitl/netmaker:v0.8.4 + image: gravitl/netmaker:v0.8.5 volumes: - /etc/netclient/config:/etc/netclient/config - dnsconfig:/root/config/dnsconfig @@ -33,7 +33,7 @@ services: container_name: netmaker-ui depends_on: - netmaker - image: gravitl/netmaker-ui:v0.8 + image: gravitl/netmaker-ui:v0.8.5 links: - "netmaker:api" ports: From 9be5aaf58b68105cae31868006caa1dd45bae8a0 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Wed, 27 Oct 2021 13:09:46 -0400 Subject: [PATCH 8/8] updating compose --- compose/docker-compose.caddy.yml | 6 +++++- compose/docker-compose.nodns.yml | 6 +++++- compose/docker-compose.yml | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/compose/docker-compose.caddy.yml b/compose/docker-compose.caddy.yml index 5a1afe7d..9ab87045 100644 --- a/compose/docker-compose.caddy.yml +++ b/compose/docker-compose.caddy.yml @@ -12,7 +12,7 @@ services: cap_add: - NET_ADMIN restart: always - network_mode: host + privileged: true environment: SERVER_HOST: "SERVER_PUBLIC_IP" SERVER_API_CONN_STRING: "api.NETMAKER_BASE_DOMAIN:443" @@ -29,6 +29,10 @@ services: SERVER_GRPC_WIREGUARD: "off" CORS_ALLOWED_ORIGIN: "*" DATABASE: "sqlite" + ports: + - "51821-51830:51821-51830/udp" + - "8081:8081" + - "50051:50051" netmaker-ui: container_name: netmaker-ui depends_on: diff --git a/compose/docker-compose.nodns.yml b/compose/docker-compose.nodns.yml index 41715e5e..688a1a72 100644 --- a/compose/docker-compose.nodns.yml +++ b/compose/docker-compose.nodns.yml @@ -11,7 +11,7 @@ services: cap_add: - NET_ADMIN restart: always - network_mode: host + privileged: true environment: SERVER_HOST: "SERVER_PUBLIC_IP" SERVER_API_CONN_STRING: "api.NETMAKER_BASE_DOMAIN:443" @@ -28,6 +28,10 @@ services: SERVER_GRPC_WIREGUARD: "off" CORS_ALLOWED_ORIGIN: "*" DATABASE: "sqlite" + ports: + - "51821-51830:51821-51830/udp" + - "8081:8081" + - "50051:50051" netmaker-ui: container_name: netmaker-ui depends_on: diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index b77c789e..9bb61223 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -12,7 +12,7 @@ services: cap_add: - NET_ADMIN restart: always - network_mode: host + privileged: true environment: SERVER_HOST: "SERVER_PUBLIC_IP" SERVER_API_CONN_STRING: "api.NETMAKER_BASE_DOMAIN:443" @@ -29,6 +29,10 @@ services: SERVER_GRPC_WIREGUARD: "off" CORS_ALLOWED_ORIGIN: "*" DATABASE: "sqlite" + ports: + - "51821-51830:51821-51830/udp" + - "8081:8081" + - "50051:50051" netmaker-ui: container_name: netmaker-ui depends_on: