mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-11 23:54:22 +08:00
Merge pull request #10 from gravitl/roaming_hotfix_v0.1
cleaned up uninstall and reinstall. Added a 'roaming' option to check…
This commit is contained in:
commit
ba808517e5
4 changed files with 147 additions and 46 deletions
|
@ -29,6 +29,7 @@ type NodeConfig struct {
|
||||||
MacAddress string `yaml:"macaddress"`
|
MacAddress string `yaml:"macaddress"`
|
||||||
LocalAddress string `yaml:"localaddress"`
|
LocalAddress string `yaml:"localaddress"`
|
||||||
WGAddress string `yaml:"wgaddress"`
|
WGAddress string `yaml:"wgaddress"`
|
||||||
|
RoamingOff bool `yaml:"roamingoff"`
|
||||||
PostUp string `yaml:"postup"`
|
PostUp string `yaml:"postup"`
|
||||||
PreUp string `yaml:"preup"`
|
PreUp string `yaml:"preup"`
|
||||||
Port int32 `yaml:"port"`
|
Port int32 `yaml:"port"`
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
//"github.com/davecgh/go-spew/spew"
|
//"github.com/davecgh/go-spew/spew"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
"errors"
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -449,8 +450,6 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
|
||||||
match := false
|
match := false
|
||||||
addrs, _ := currentiface.Addrs()
|
addrs, _ := currentiface.Addrs()
|
||||||
for _, a := range addrs {
|
for _, a := range addrs {
|
||||||
fmt.Println("Current address: " + a.String())
|
|
||||||
fmt.Println("node.Address: " + node.Address)
|
|
||||||
if strings.Contains(a.String(), node.Address){
|
if strings.Contains(a.String(), node.Address){
|
||||||
match = true
|
match = true
|
||||||
}
|
}
|
||||||
|
@ -515,24 +514,6 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
|
||||||
}
|
}
|
||||||
return err
|
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 {
|
func setWGConfig() error {
|
||||||
servercfg := config.Config.Server
|
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 {
|
func CheckIn() error {
|
||||||
node := getNode()
|
node := getNode()
|
||||||
nodecfg := config.Config.Node
|
nodecfg := config.Config.Node
|
||||||
|
@ -576,6 +617,39 @@ func CheckIn() error {
|
||||||
|
|
||||||
setupcheck := true
|
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 wcclient nodepb.NodeServiceClient
|
||||||
var requestOpts grpc.DialOption
|
var requestOpts grpc.DialOption
|
||||||
requestOpts = grpc.WithInsecure()
|
requestOpts = grpc.WithInsecure()
|
||||||
|
@ -807,8 +881,8 @@ func Remove() error {
|
||||||
|
|
||||||
err = WipeLocal()
|
err = WipeLocal()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
//return err
|
||||||
log.Fatalf("Unable to wipe local config: %v", err)
|
log.Printf("Unable to wipe local config: %v", err)
|
||||||
}
|
}
|
||||||
err = RemoveSystemDServices()
|
err = RemoveSystemDServices()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -835,6 +909,7 @@ func WipeLocal() error{
|
||||||
}
|
}
|
||||||
ipExec, err := exec.LookPath("ip")
|
ipExec, err := exec.LookPath("ip")
|
||||||
|
|
||||||
|
if ifacename != "" {
|
||||||
cmdIPLinkDel := &exec.Cmd {
|
cmdIPLinkDel := &exec.Cmd {
|
||||||
Path: ipExec,
|
Path: ipExec,
|
||||||
Args: []string{ ipExec, "link", "del", ifacename },
|
Args: []string{ ipExec, "link", "del", ifacename },
|
||||||
|
@ -845,6 +920,7 @@ func WipeLocal() error{
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,11 +28,17 @@ func ConfigureSystemD() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = copy(binarypath, "/etc/netclient/netclient")
|
_, err = copy(binarypath, "/usr/local/bin/netclient")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
_, err = copy(binarypath, "/etc/netclient/netclient")
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
systemservice := `[Unit]
|
systemservice := `[Unit]
|
||||||
|
@ -49,10 +55,10 @@ WantedBy=multi-user.target
|
||||||
|
|
||||||
systemtimer := `[Unit]
|
systemtimer := `[Unit]
|
||||||
Description=Calls the Netmaker Mesh Client Service
|
Description=Calls the Netmaker Mesh Client Service
|
||||||
Requires=netmaker.service
|
Requires=netclient.service
|
||||||
|
|
||||||
[Timer]
|
[Timer]
|
||||||
Unit=netmaker.service
|
Unit=netclient.service
|
||||||
OnCalendar=*:*:0/30
|
OnCalendar=*:*:0/30
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
@ -62,13 +68,13 @@ WantedBy=timers.target
|
||||||
servicebytes := []byte(systemservice)
|
servicebytes := []byte(systemservice)
|
||||||
timerbytes := []byte(systemtimer)
|
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 {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return 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 {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return err
|
return err
|
||||||
|
@ -78,13 +84,13 @@ WantedBy=timers.target
|
||||||
|
|
||||||
cmdSysEnableService := &exec.Cmd {
|
cmdSysEnableService := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "enable", "netmaker.service" },
|
Args: []string{ sysExec, "enable", "netclient.service" },
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
cmdSysStartService := &exec.Cmd {
|
cmdSysStartService := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "start", "netmaker.service"},
|
Args: []string{ sysExec, "start", "netclient.service"},
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
|
@ -96,25 +102,25 @@ WantedBy=timers.target
|
||||||
}
|
}
|
||||||
cmdSysEnableTimer := &exec.Cmd {
|
cmdSysEnableTimer := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "enable", "netmaker.timer" },
|
Args: []string{ sysExec, "enable", "netclient.timer" },
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
cmdSysStartTimer := &exec.Cmd {
|
cmdSysStartTimer := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "start", "netmaker.timer"},
|
Args: []string{ sysExec, "start", "netclient.timer"},
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = cmdSysEnableService.Run()
|
err = cmdSysEnableService.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error enabling netmaker.service. Please investigate.")
|
fmt.Println("Error enabling netclient.service. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
err = cmdSysStartService.Run()
|
err = cmdSysStartService.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error starting netmaker.service. Please investigate.")
|
fmt.Println("Error starting netclient.service. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
err = cmdSysDaemonReload.Run()
|
err = cmdSysDaemonReload.Run()
|
||||||
|
@ -124,12 +130,12 @@ WantedBy=timers.target
|
||||||
}
|
}
|
||||||
err = cmdSysEnableTimer.Run()
|
err = cmdSysEnableTimer.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error enabling netmaker.timer. Please investigate.")
|
fmt.Println("Error enabling netclient.timer. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
err = cmdSysStartTimer.Run()
|
err = cmdSysStartTimer.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error starting netmaker.timer. Please investigate.")
|
fmt.Println("Error starting netclient.timer. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -140,13 +146,13 @@ func RemoveSystemDServices() error {
|
||||||
|
|
||||||
cmdSysStopService := &exec.Cmd {
|
cmdSysStopService := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "stop", "netmaker.service" },
|
Args: []string{ sysExec, "stop", "netclient.service" },
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
cmdSysDisableService := &exec.Cmd {
|
cmdSysDisableService := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "disable", "netmaker.service"},
|
Args: []string{ sysExec, "disable", "netclient.service"},
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
|
@ -156,42 +162,48 @@ func RemoveSystemDServices() error {
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
|
cmdSysResetFailed := &exec.Cmd {
|
||||||
|
Path: sysExec,
|
||||||
|
Args: []string{ sysExec, "reset-failed"},
|
||||||
|
Stdout: os.Stdout,
|
||||||
|
Stderr: os.Stdout,
|
||||||
|
}
|
||||||
cmdSysStopTimer := &exec.Cmd {
|
cmdSysStopTimer := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "stop", "netmaker.timer" },
|
Args: []string{ sysExec, "stop", "netclient.timer" },
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
cmdSysDisableTimer := &exec.Cmd {
|
cmdSysDisableTimer := &exec.Cmd {
|
||||||
Path: sysExec,
|
Path: sysExec,
|
||||||
Args: []string{ sysExec, "disable", "netmaker.timer"},
|
Args: []string{ sysExec, "disable", "netclient.timer"},
|
||||||
Stdout: os.Stdout,
|
Stdout: os.Stdout,
|
||||||
Stderr: os.Stdout,
|
Stderr: os.Stdout,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = cmdSysStopService.Run()
|
err = cmdSysStopService.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error stopping netmaker.service. Please investigate.")
|
fmt.Println("Error stopping netclient.service. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
err = cmdSysDisableService.Run()
|
err = cmdSysDisableService.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error disabling netmaker.service. Please investigate.")
|
fmt.Println("Error disabling netclient.service. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
err = cmdSysStopTimer.Run()
|
err = cmdSysStopTimer.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error stopping netmaker.timer. Please investigate.")
|
fmt.Println("Error stopping netclient.timer. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
err = cmdSysDisableTimer.Run()
|
err = cmdSysDisableTimer.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error disabling netmaker.timer. Please investigate.")
|
fmt.Println("Error disabling netclient.timer. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = os.Remove("/etc/systemd/system/netmaker.service")
|
err = os.Remove("/etc/systemd/system/netclient.service")
|
||||||
err = os.Remove("/etc/systemd/system/netmaker.timer")
|
err = os.Remove("/etc/systemd/system/netclient.timer")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error removing file. Please investigate.")
|
fmt.Println("Error removing file. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
@ -201,7 +213,11 @@ func RemoveSystemDServices() error {
|
||||||
fmt.Println("Error reloading system daemons. Please investigate.")
|
fmt.Println("Error reloading system daemons. Please investigate.")
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
err = cmdSysResetFailed.Run()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error reseting failed system services. Please investigate.")
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,10 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error removing artifacts: ", err)
|
fmt.Println("Error removing artifacts: ", err)
|
||||||
}
|
}
|
||||||
|
err = functions.RemoveSystemDServices()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error removing services: ", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
@ -94,6 +98,10 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error removing artifacts: ", err)
|
fmt.Println("Error removing artifacts: ", err)
|
||||||
}
|
}
|
||||||
|
err = functions.RemoveSystemDServices()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error removing services: ", err)
|
||||||
|
}
|
||||||
fmt.Println("Error deleting node: ", err)
|
fmt.Println("Error deleting node: ", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue