From 2637e0ee79125ee33d3674795c48c2b8f8ce40c4 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Fri, 26 Mar 2021 10:35:52 -0400 Subject: [PATCH] cleaned up uninstall and reinstall. Added a 'roaming' option to check for addresses --- netclient/config/config.go | 1 + netclient/functions/common.go | 120 +++++++++++++++++++++++++++------- netclient/functions/local.go | 64 +++++++++++------- netclient/main.go | 8 +++ 4 files changed, 147 insertions(+), 46 deletions(-) diff --git a/netclient/config/config.go b/netclient/config/config.go index e6b70e33..4487b54f 100644 --- a/netclient/config/config.go +++ b/netclient/config/config.go @@ -29,6 +29,7 @@ type NodeConfig struct { MacAddress string `yaml:"macaddress"` LocalAddress string `yaml:"localaddress"` WGAddress string `yaml:"wgaddress"` + RoamingOff bool `yaml:"roamingoff"` PostUp string `yaml:"postup"` PreUp string `yaml:"preup"` Port int32 `yaml:"port"` diff --git a/netclient/functions/common.go b/netclient/functions/common.go index 8236367f..5a939d45 100644 --- a/netclient/functions/common.go +++ b/netclient/functions/common.go @@ -4,6 +4,7 @@ import ( //"github.com/davecgh/go-spew/spew" "fmt" "time" + "errors" "context" "net/http" "io/ioutil" @@ -449,8 +450,6 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig match := false addrs, _ := currentiface.Addrs() for _, a := range addrs { - fmt.Println("Current address: " + a.String()) - fmt.Println("node.Address: " + node.Address) if strings.Contains(a.String(), node.Address){ match = true } @@ -515,24 +514,6 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig } return err } -/* -func reconfigureWireguardSelf(node nodepb.Node) error { - -} - -func reconfigureWireguardPeers(peers []nodepb.PeersResponse) error { - -} - - -func update(node nodepb.Node) error { - -} - -func updateLocal() error { - -} -*/ func setWGConfig() error { servercfg := config.Config.Server @@ -568,6 +549,66 @@ func retrievePrivKey() (string, error) { } +func getPublicAddr() (string, error) { + resp, err := http.Get("https://ifconfig.me") + if err != nil { + return "", err + } + defer resp.Body.Close() + endpoint := "" + if resp.StatusCode == http.StatusOK { + bodyBytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", err + } + endpoint = string(bodyBytes) + } + return endpoint, err +} +func getPrivateAddr() (string, error) { + ifaces, err := net.Interfaces() + if err != nil { + return "", err + } + var local string + found := false + for _, i := range ifaces { + if i.Flags&net.FlagUp == 0 { + continue // interface down + } + if i.Flags&net.FlagLoopback != 0 { + continue // loopback interface + } + addrs, err := i.Addrs() + if err != nil { + return "", err + } + for _, addr := range addrs { + var ip net.IP + switch v := addr.(type) { + case *net.IPNet: + if !found { + ip = v.IP + local = ip.String() + found = true + } + case *net.IPAddr: + if !found { + ip = v.IP + local = ip.String() + found = true + } + } + } + } + if !found { + err := errors.New("Local Address Not Found.") + return "", err + } + return local, err +} + + func CheckIn() error { node := getNode() nodecfg := config.Config.Node @@ -576,6 +617,39 @@ func CheckIn() error { setupcheck := true + if !nodecfg.RoamingOff { + fmt.Println("Checking to see if addresses have changed") + extIP, err := getPublicAddr() + if err != nil { + fmt.Printf("Error encountered checking ip addresses: %v", err) + } + if nodecfg.Endpoint != extIP && extIP != "" { + fmt.Println("Endpoint has changed from " + + nodecfg.Endpoint + " to " + extIP) + fmt.Println("Updating address") + nodecfg.Endpoint = extIP + nodecfg.PostChanges = "true" + node.Endpoint = extIP + node.Postchanges = "true" + } + intIP, err := getPrivateAddr() + if err != nil { + fmt.Printf("Error encountered checking ip addresses: %v", err) + } + if nodecfg.LocalAddress != intIP && intIP != "" { + fmt.Println("Local Address has changed from " + + nodecfg.LocalAddress + " to " + intIP) + fmt.Println("Updating address") + nodecfg.LocalAddress = intIP + nodecfg.PostChanges = "true" + node.Localaddress = intIP + node.Postchanges = "true" + } + if node.Postchanges != "true" { + fmt.Println("Addresses have not changed.") + } + } + var wcclient nodepb.NodeServiceClient var requestOpts grpc.DialOption requestOpts = grpc.WithInsecure() @@ -807,8 +881,8 @@ func Remove() error { err = WipeLocal() if err != nil { - return err - log.Fatalf("Unable to wipe local config: %v", err) + //return err + log.Printf("Unable to wipe local config: %v", err) } err = RemoveSystemDServices() if err != nil { @@ -835,6 +909,7 @@ func WipeLocal() error{ } ipExec, err := exec.LookPath("ip") + if ifacename != "" { cmdIPLinkDel := &exec.Cmd { Path: ipExec, Args: []string{ ipExec, "link", "del", ifacename }, @@ -845,6 +920,7 @@ func WipeLocal() error{ if err != nil { fmt.Println(err) } + } return err } diff --git a/netclient/functions/local.go b/netclient/functions/local.go index 5422c6a5..4c6fe8c6 100644 --- a/netclient/functions/local.go +++ b/netclient/functions/local.go @@ -28,11 +28,17 @@ func ConfigureSystemD() error { return err } - _, err = copy(binarypath, "/etc/netclient/netclient") + _, err = copy(binarypath, "/usr/local/bin/netclient") if err != nil { log.Println(err) return err } + _, err = copy(binarypath, "/etc/netclient/netclient") + if err != nil { + log.Println(err) + return err + } + systemservice := `[Unit] @@ -49,10 +55,10 @@ WantedBy=multi-user.target systemtimer := `[Unit] Description=Calls the Netmaker Mesh Client Service -Requires=netmaker.service +Requires=netclient.service [Timer] -Unit=netmaker.service +Unit=netclient.service OnCalendar=*:*:0/30 [Install] @@ -62,13 +68,13 @@ WantedBy=timers.target servicebytes := []byte(systemservice) timerbytes := []byte(systemtimer) - err = ioutil.WriteFile("/etc/systemd/system/netmaker.service", servicebytes, 0644) + err = ioutil.WriteFile("/etc/systemd/system/netclient.service", servicebytes, 0644) if err != nil { log.Println(err) return err } - err = ioutil.WriteFile("/etc/systemd/system/netmaker.timer", timerbytes, 0644) + err = ioutil.WriteFile("/etc/systemd/system/netclient.timer", timerbytes, 0644) if err != nil { log.Println(err) return err @@ -78,13 +84,13 @@ WantedBy=timers.target cmdSysEnableService := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "enable", "netmaker.service" }, + Args: []string{ sysExec, "enable", "netclient.service" }, Stdout: os.Stdout, Stderr: os.Stdout, } cmdSysStartService := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "start", "netmaker.service"}, + Args: []string{ sysExec, "start", "netclient.service"}, Stdout: os.Stdout, Stderr: os.Stdout, } @@ -96,25 +102,25 @@ WantedBy=timers.target } cmdSysEnableTimer := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "enable", "netmaker.timer" }, + Args: []string{ sysExec, "enable", "netclient.timer" }, Stdout: os.Stdout, Stderr: os.Stdout, } cmdSysStartTimer := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "start", "netmaker.timer"}, + Args: []string{ sysExec, "start", "netclient.timer"}, Stdout: os.Stdout, Stderr: os.Stdout, } err = cmdSysEnableService.Run() if err != nil { - fmt.Println("Error enabling netmaker.service. Please investigate.") + fmt.Println("Error enabling netclient.service. Please investigate.") fmt.Println(err) } err = cmdSysStartService.Run() if err != nil { - fmt.Println("Error starting netmaker.service. Please investigate.") + fmt.Println("Error starting netclient.service. Please investigate.") fmt.Println(err) } err = cmdSysDaemonReload.Run() @@ -124,12 +130,12 @@ WantedBy=timers.target } err = cmdSysEnableTimer.Run() if err != nil { - fmt.Println("Error enabling netmaker.timer. Please investigate.") + fmt.Println("Error enabling netclient.timer. Please investigate.") fmt.Println(err) } err = cmdSysStartTimer.Run() if err != nil { - fmt.Println("Error starting netmaker.timer. Please investigate.") + fmt.Println("Error starting netclient.timer. Please investigate.") fmt.Println(err) } return nil @@ -140,13 +146,13 @@ func RemoveSystemDServices() error { cmdSysStopService := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "stop", "netmaker.service" }, + Args: []string{ sysExec, "stop", "netclient.service" }, Stdout: os.Stdout, Stderr: os.Stdout, } cmdSysDisableService := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "disable", "netmaker.service"}, + Args: []string{ sysExec, "disable", "netclient.service"}, Stdout: os.Stdout, Stderr: os.Stdout, } @@ -156,42 +162,48 @@ func RemoveSystemDServices() error { Stdout: os.Stdout, Stderr: os.Stdout, } + cmdSysResetFailed := &exec.Cmd { + Path: sysExec, + Args: []string{ sysExec, "reset-failed"}, + Stdout: os.Stdout, + Stderr: os.Stdout, + } cmdSysStopTimer := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "stop", "netmaker.timer" }, + Args: []string{ sysExec, "stop", "netclient.timer" }, Stdout: os.Stdout, Stderr: os.Stdout, } cmdSysDisableTimer := &exec.Cmd { Path: sysExec, - Args: []string{ sysExec, "disable", "netmaker.timer"}, + Args: []string{ sysExec, "disable", "netclient.timer"}, Stdout: os.Stdout, Stderr: os.Stdout, } err = cmdSysStopService.Run() if err != nil { - fmt.Println("Error stopping netmaker.service. Please investigate.") + fmt.Println("Error stopping netclient.service. Please investigate.") fmt.Println(err) } err = cmdSysDisableService.Run() if err != nil { - fmt.Println("Error disabling netmaker.service. Please investigate.") + fmt.Println("Error disabling netclient.service. Please investigate.") fmt.Println(err) } err = cmdSysStopTimer.Run() if err != nil { - fmt.Println("Error stopping netmaker.timer. Please investigate.") + fmt.Println("Error stopping netclient.timer. Please investigate.") fmt.Println(err) } err = cmdSysDisableTimer.Run() if err != nil { - fmt.Println("Error disabling netmaker.timer. Please investigate.") + fmt.Println("Error disabling netclient.timer. Please investigate.") fmt.Println(err) } - err = os.Remove("/etc/systemd/system/netmaker.service") - err = os.Remove("/etc/systemd/system/netmaker.timer") + err = os.Remove("/etc/systemd/system/netclient.service") + err = os.Remove("/etc/systemd/system/netclient.timer") if err != nil { fmt.Println("Error removing file. Please investigate.") fmt.Println(err) @@ -201,7 +213,11 @@ func RemoveSystemDServices() error { fmt.Println("Error reloading system daemons. Please investigate.") fmt.Println(err) } - + err = cmdSysResetFailed.Run() + if err != nil { + fmt.Println("Error reseting failed system services. Please investigate.") + fmt.Println(err) + } return err } diff --git a/netclient/main.go b/netclient/main.go index f02de622..30c45f2f 100644 --- a/netclient/main.go +++ b/netclient/main.go @@ -60,6 +60,10 @@ func main() { if err != nil { fmt.Println("Error removing artifacts: ", err) } + err = functions.RemoveSystemDServices() + if err != nil { + fmt.Println("Error removing services: ", err) + } } os.Exit(1) } @@ -94,6 +98,10 @@ func main() { if err != nil { fmt.Println("Error removing artifacts: ", err) } + err = functions.RemoveSystemDServices() + if err != nil { + fmt.Println("Error removing services: ", err) + } fmt.Println("Error deleting node: ", err) os.Exit(1) }