Browse Source

iptables now being set by client

afeiszli 4 years ago
parent
commit
e2ec093eaf

+ 2 - 2
controllers/nodeHttpController.go

@@ -592,12 +592,12 @@ func createGateway(w http.ResponseWriter, r *http.Request) {
 	nodechange.IsGateway = true
 	nodechange.IsGateway = true
 	nodechange.GatewayRange = gateway.RangeString
 	nodechange.GatewayRange = gateway.RangeString
 	if gateway.PostUp == "" {
 	if gateway.PostUp == "" {
-		nodechange.PostUp = "iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o " + gateway.Interface + " -j MASQUERADE"
+		nodechange.PostUp = "iptables -A FORWARD -i " + node.Interface + " -j ACCEPT; iptables -t nat -A POSTROUTING -o " + gateway.Interface + " -j MASQUERADE"
 	} else {
 	} else {
 		nodechange.PostUp = gateway.PostUp
 		nodechange.PostUp = gateway.PostUp
 	}
 	}
 	if gateway.PostDown == "" {
 	if gateway.PostDown == "" {
-		nodechange.PostDown = "iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o " + gateway.Interface + " -j MASQUERADE"
+		nodechange.PostDown = "iptables -D FORWARD -i " + node.Interface + " -j ACCEPT; iptables -t nat -D POSTROUTING -o " + gateway.Interface + " -j MASQUERADE"
 	} else {
 	} else {
 		nodechange.PostDown = gateway.PostDown
 		nodechange.PostDown = gateway.PostDown
 	}
 	}

+ 18 - 3
functions/helpers.go

@@ -25,7 +25,7 @@ import (
 //node has that value for the same field within the network
 //node has that value for the same field within the network
 
 
 func CreateServerToken(netID string) (string, error) {
 func CreateServerToken(netID string) (string, error) {
-
+	fmt.Println("Creating token.")
         var network models.Network
         var network models.Network
         var accesskey models.AccessKey
         var accesskey models.AccessKey
 
 
@@ -43,8 +43,23 @@ func CreateServerToken(netID string) (string, error) {
         }
         }
         address := "localhost" + gconf.PortGRPC
         address := "localhost" + gconf.PortGRPC
 
 
-        accessstringdec := address + "." + netID + "." + accesskey.Value
-        accesskey.AccessString = base64.StdEncoding.EncodeToString([]byte(accessstringdec))
+        privAddr := ""
+        if *network.IsLocal {
+                privAddr = network.LocalRange
+        }
+
+
+	fmt.Println("Token details:")
+	fmt.Println("    grpc address + port: " + address)
+	fmt.Println("                network: " + netID)
+	fmt.Println("          private range: " + privAddr)
+
+	accessstringdec := address + "|" + netID + "|" + accesskey.Value + "|" + privAddr
+
+	accesskey.AccessString = base64.StdEncoding.EncodeToString([]byte(accessstringdec))
+
+        fmt.Println("          access string: " + accesskey.AccessString)
+
 
 
         network.AccessKeys = append(network.AccessKeys, accesskey)
         network.AccessKeys = append(network.AccessKeys, accesskey)
 
 

+ 1 - 0
main.go

@@ -63,6 +63,7 @@ func main() {
 
 
 	log.Println("Server starting...")
 	log.Println("Server starting...")
 	mongoconn.ConnectDatabase()
 	mongoconn.ConnectDatabase()
+
 	installserver := false
 	installserver := false
 	if !(defaultnet == "off") {
 	if !(defaultnet == "off") {
 	if config.Config.Server.CreateDefault {
 	if config.Config.Server.CreateDefault {

BIN
netclient/functions/.common.go.swp


+ 47 - 4
netclient/functions/common.go

@@ -678,12 +678,41 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
                 Stderr: os.Stdout,
                 Stderr: os.Stdout,
         }
         }
         err = cmdIPLinkDown.Run()
         err = cmdIPLinkDown.Run()
-        err = cmdIPLinkUp.Run()
-        if  err  !=  nil {
+        if nodecfg.PostDown != "" {
+		runcmds := strings.Split(nodecfg.PostDown, "; ")
+		err = runCmds(runcmds)
+		if err != nil {
+			fmt.Println("Error encountered running PostDown: " + err.Error())
+		}
+	}
+
+	err = cmdIPLinkUp.Run()
+        if nodecfg.PostUp != "" {
+                runcmds := strings.Split(nodecfg.PostUp, "; ")
+                err = runCmds(runcmds)
+                if err != nil {
+                        fmt.Println("Error encountered running PostUp: " + err.Error())
+                }
+        }
+	if  err  !=  nil {
                 return err
                 return err
         }
         }
 	return err
 	return err
 }
 }
+func runCmds(commands []string) error {
+	var err error
+	for _, command := range commands {
+		fmt.Println("Running command: " + command)
+		args := strings.Fields(command)
+		out, err := exec.Command(args[0], args[1:]...).Output()
+		fmt.Println(string(out))
+		if err != nil {
+			return err
+		}
+	}
+	return err
+}
+
 
 
 func setWGKeyConfig(network string, serveraddr string) error {
 func setWGKeyConfig(network string, serveraddr string) error {
 
 
@@ -959,7 +988,7 @@ func CheckIn(network string) error {
                 if ifaceupdate {
                 if ifaceupdate {
 			fmt.Println("Interface update: " + currentiface +
 			fmt.Println("Interface update: " + currentiface +
 			" >>>> " + newinterface)
 			" >>>> " + newinterface)
-                        err := DeleteInterface(currentiface)
+                        err := DeleteInterface(currentiface, nodecfg.PostDown)
                         if err != nil {
                         if err != nil {
                                 fmt.Println("ERROR DELETING INTERFACE: " + currentiface)
                                 fmt.Println("ERROR DELETING INTERFACE: " + currentiface)
                         }
                         }
@@ -1206,12 +1235,19 @@ func WipeLocal(network string) error{
         if  err  !=  nil {
         if  err  !=  nil {
                 fmt.Println(err)
                 fmt.Println(err)
         }
         }
+        if nodecfg.PostDown != "" {
+                runcmds := strings.Split(nodecfg.PostDown, "; ")
+                err = runCmds(runcmds)
+                if err != nil {
+                        fmt.Println("Error encountered running PostDown: " + err.Error())
+                }
+        }
 	}
 	}
 	return err
 	return err
 
 
 }
 }
 
 
-func DeleteInterface(ifacename string) error{
+func DeleteInterface(ifacename string, postdown string) error{
         ipExec, err := exec.LookPath("ip")
         ipExec, err := exec.LookPath("ip")
 
 
         cmdIPLinkDel := &exec.Cmd {
         cmdIPLinkDel := &exec.Cmd {
@@ -1224,6 +1260,13 @@ func DeleteInterface(ifacename string) error{
         if  err  !=  nil {
         if  err  !=  nil {
                 fmt.Println(err)
                 fmt.Println(err)
         }
         }
+        if postdown != "" {
+                runcmds := strings.Split(postdown, "; ")
+                err = runCmds(runcmds)
+                if err != nil {
+                        fmt.Println("Error encountered running PostDown: " + err.Error())
+                }
+        }
         return err
         return err
 }
 }
 
 

+ 1 - 0
netclient/main.go

@@ -110,6 +110,7 @@ func main() {
 			fmt.Println("Beginning agent installation.")
 			fmt.Println("Beginning agent installation.")
 			err := functions.Install(*taccesskey, *tpassword, *tserver, *tnetwork, *tnoauto, *taccesstoken, *tname)
 			err := functions.Install(*taccesskey, *tpassword, *tserver, *tnetwork, *tnoauto, *taccesstoken, *tname)
 			if err != nil {
 			if err != nil {
+				fmt.Println("Error encountered while installing.")
 				if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {
 				if !strings.Contains(err.Error(), "ALREADY_INSTALLED") {
 				fmt.Println("Error installing: ", err)
 				fmt.Println("Error installing: ", err)
 				fmt.Println("Cleaning up (uninstall)")
 				fmt.Println("Cleaning up (uninstall)")

+ 1 - 0
privatekey

@@ -0,0 +1 @@
+wMb6dxHPNJqQd8GbwfLN8HPLiJYEl1uJtEls5hRoD10=

+ 1 - 0
publickey

@@ -0,0 +1 @@
+/FdO9q+Bs3ee/NVbtKwMhSmFj4AyyjmlOrujzaBoenE=

+ 7 - 4
serverctl/serverctl.go

@@ -4,6 +4,7 @@ import (
         "fmt"
         "fmt"
   "github.com/gravitl/netmaker/functions"
   "github.com/gravitl/netmaker/functions"
 	"io"
 	"io"
+	"errors"
 	"net/http"
 	"net/http"
         "os"
         "os"
         "os/exec"
         "os/exec"
@@ -56,11 +57,13 @@ func AddNetwork(network string) (bool, error) {
                 fmt.Println("could not find or create /etc/netclient")
                 fmt.Println("could not find or create /etc/netclient")
                 return false, err
                 return false, err
         }
         }
+	fmt.Println("Directory is ready.")
 	token, err := functions.CreateServerToken(network)
 	token, err := functions.CreateServerToken(network)
         if err != nil {
         if err != nil {
                 fmt.Println("could not create server token for " + network)
                 fmt.Println("could not create server token for " + network)
 		return false, err
 		return false, err
         }
         }
+	fmt.Println("Token is ready.")
         _, err = os.Stat("/etc/netclient/netclient")
         _, err = os.Stat("/etc/netclient/netclient")
 	if os.IsNotExist(err) {
 	if os.IsNotExist(err) {
 		err = DownloadNetclient()
 		err = DownloadNetclient()
@@ -74,12 +77,12 @@ func AddNetwork(network string) (bool, error) {
                 fmt.Println("could not change netclient directory permissions")
                 fmt.Println("could not change netclient directory permissions")
                 return false, err
                 return false, err
         }
         }
-	cmdoutput, err := exec.Command("/etc/netclient/netclient","-c","install","-t",token,"-name","netmaker").Output()
+	fmt.Println("Client is ready. Running install.")
+	out, err := exec.Command("/etc/netclient/netclient","-c","install","-t",token,"-name","netmaker").Output()
+        fmt.Println(string(out))
 	if err != nil {
 	if err != nil {
-	        fmt.Println(string(cmdoutput))
-                return false, err
+                return false, errors.New(string(out) + err.Error())
         }
         }
-	fmt.Println(string(cmdoutput))
 	fmt.Println("Server added to network " + network)
 	fmt.Println("Server added to network " + network)
 	return true, err
 	return true, err
 }
 }