fixing rangeupdate for ipv6, setting ipv4 assignment

This commit is contained in:
afeiszli 2022-05-12 19:35:46 -04:00
parent 60c6e377f8
commit d63bae351d
4 changed files with 85 additions and 11 deletions

View file

@ -147,19 +147,26 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
newNetwork.DefaultPostUp = network.DefaultPostUp newNetwork.DefaultPostUp = network.DefaultPostUp
} }
rangeupdate, localrangeupdate, holepunchupdate, err := logic.UpdateNetwork(&network, &newNetwork) rangeupdate4, rangeupdate6, localrangeupdate, holepunchupdate, err := logic.UpdateNetwork(&network, &newNetwork)
if err != nil { if err != nil {
returnErrorResponse(w, r, formatError(err, "badrequest")) returnErrorResponse(w, r, formatError(err, "badrequest"))
return return
} }
if rangeupdate { if rangeupdate4 {
err = logic.UpdateNetworkNodeAddresses(network.NetID) err = logic.UpdateNetworkNodeAddresses(network.NetID)
if err != nil { if err != nil {
returnErrorResponse(w, r, formatError(err, "internal")) returnErrorResponse(w, r, formatError(err, "internal"))
return return
} }
} }
if rangeupdate6 {
err = logic.UpdateNetworkNodeAddresses6(network.NetID)
if err != nil {
returnErrorResponse(w, r, formatError(err, "internal"))
return
}
}
if localrangeupdate { if localrangeupdate {
err = logic.UpdateNetworkLocalAddresses(network.NetID) err = logic.UpdateNetworkLocalAddresses(network.NetID)
if err != nil { if err != nil {
@ -174,7 +181,7 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
return return
} }
} }
if rangeupdate || localrangeupdate || holepunchupdate { if rangeupdate4 || rangeupdate6 || localrangeupdate || holepunchupdate {
nodes, err := logic.GetNetworkNodes(network.NetID) nodes, err := logic.GetNetworkNodes(network.NetID)
if err != nil { if err != nil {
returnErrorResponse(w, r, formatError(err, "internal")) returnErrorResponse(w, r, formatError(err, "internal"))

View file

@ -447,7 +447,7 @@ func UpdateNetworkNodeAddresses(networkName string) error {
var node models.Node var node models.Node
err := json.Unmarshal([]byte(value), &node) err := json.Unmarshal([]byte(value), &node)
if err != nil { if err != nil {
fmt.Println("error in node address assignment!") logger.Log(1, "error in node ipv4 address assignment!")
return err return err
} }
if node.Network == networkName { if node.Network == networkName {
@ -459,7 +459,7 @@ func UpdateNetworkNodeAddresses(networkName string) error {
ipaddr, iperr = UniqueAddress(networkName, false) ipaddr, iperr = UniqueAddress(networkName, false)
} }
if iperr != nil { if iperr != nil {
fmt.Println("error in node address assignment!") logger.Log(1, "error in node ipv4 address assignment!")
return iperr return iperr
} }
@ -475,6 +475,47 @@ func UpdateNetworkNodeAddresses(networkName string) error {
return nil return nil
} }
// UpdateNetworkNodeAddresses6 - updates network node addresses
func UpdateNetworkNodeAddresses6(networkName string) error {
collections, err := database.FetchRecords(database.NODES_TABLE_NAME)
if err != nil {
return err
}
for _, value := range collections {
var node models.Node
err := json.Unmarshal([]byte(value), &node)
if err != nil {
logger.Log(1, "error in node ipv6 address assignment!")
return err
}
if node.Network == networkName {
var ipaddr string
var iperr error
if node.IsServer == "yes" {
ipaddr, iperr = UniqueAddress6(networkName, true)
} else {
ipaddr, iperr = UniqueAddress6(networkName, false)
}
if iperr != nil {
logger.Log(1, "error in node ipv6 address assignment!")
return iperr
}
node.Address6 = ipaddr
data, err := json.Marshal(&node)
if err != nil {
return err
}
database.Insert(node.ID, string(data), database.NODES_TABLE_NAME)
}
}
return nil
}
// IsNetworkNameUnique - checks to see if any other networks have the same name (id) // IsNetworkNameUnique - checks to see if any other networks have the same name (id)
func IsNetworkNameUnique(network *models.Network) (bool, error) { func IsNetworkNameUnique(network *models.Network) (bool, error) {
@ -497,24 +538,25 @@ func IsNetworkNameUnique(network *models.Network) (bool, error) {
} }
// UpdateNetwork - updates a network with another network's fields // UpdateNetwork - updates a network with another network's fields
func UpdateNetwork(currentNetwork *models.Network, newNetwork *models.Network) (bool, bool, bool, error) { func UpdateNetwork(currentNetwork *models.Network, newNetwork *models.Network) (bool, bool, bool, bool, error) {
if err := ValidateNetwork(newNetwork, true); err != nil { if err := ValidateNetwork(newNetwork, true); err != nil {
return false, false, false, err return false, false, false, false, err
} }
if newNetwork.NetID == currentNetwork.NetID { if newNetwork.NetID == currentNetwork.NetID {
hasrangeupdate := newNetwork.AddressRange != currentNetwork.AddressRange hasrangeupdate4 := newNetwork.AddressRange != currentNetwork.AddressRange
hasrangeupdate6 := newNetwork.AddressRange6 != currentNetwork.AddressRange6
localrangeupdate := newNetwork.LocalRange != currentNetwork.LocalRange localrangeupdate := newNetwork.LocalRange != currentNetwork.LocalRange
hasholepunchupdate := newNetwork.DefaultUDPHolePunch != currentNetwork.DefaultUDPHolePunch hasholepunchupdate := newNetwork.DefaultUDPHolePunch != currentNetwork.DefaultUDPHolePunch
data, err := json.Marshal(newNetwork) data, err := json.Marshal(newNetwork)
if err != nil { if err != nil {
return false, false, false, err return false, false, false, false, err
} }
newNetwork.SetNetworkLastModified() newNetwork.SetNetworkLastModified()
err = database.Insert(newNetwork.NetID, string(data), database.NETWORKS_TABLE_NAME) err = database.Insert(newNetwork.NetID, string(data), database.NETWORKS_TABLE_NAME)
return hasrangeupdate, localrangeupdate, hasholepunchupdate, err return hasrangeupdate4, hasrangeupdate6, localrangeupdate, hasholepunchupdate, err
} }
// copy values // copy values
return false, false, false, errors.New("failed to update network " + newNetwork.NetID + ", cannot change netid.") return false, false, false, false, errors.New("failed to update network " + newNetwork.NetID + ", cannot change netid.")
} }
// GetNetwork - gets a network from database // GetNetwork - gets a network from database

View file

@ -21,6 +21,7 @@ import (
"github.com/gravitl/netmaker/netclient/auth" "github.com/gravitl/netmaker/netclient/auth"
"github.com/gravitl/netmaker/netclient/config" "github.com/gravitl/netmaker/netclient/config"
"github.com/gravitl/netmaker/netclient/daemon" "github.com/gravitl/netmaker/netclient/daemon"
"github.com/gravitl/netmaker/netclient/local"
"github.com/gravitl/netmaker/netclient/ncutils" "github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/netclient/wireguard" "github.com/gravitl/netmaker/netclient/wireguard"
ssl "github.com/gravitl/netmaker/tls" ssl "github.com/gravitl/netmaker/tls"
@ -57,6 +58,11 @@ func Daemon() error {
} }
//initialPull(cfg.Network) //initialPull(cfg.Network)
} }
// set ipforwarding on startup
err := local.SetIPForwarding()
if err != nil {
logger.Log(0, err.Error())
}
// == subscribe to all nodes for each on machine == // == subscribe to all nodes for each on machine ==
for server, config := range serverSet { for server, config := range serverSet {

View file

@ -32,6 +32,8 @@ func SetIPForwarding() error {
// SetIPForwardingLinux - sets the ipforwarding for linux // SetIPForwardingLinux - sets the ipforwarding for linux
func SetIPForwardingUnix() error { func SetIPForwardingUnix() error {
// ipv4
out, err := ncutils.RunCmd("sysctl net.ipv4.ip_forward", true) out, err := ncutils.RunCmd("sysctl net.ipv4.ip_forward", true)
if err != nil { if err != nil {
log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.") log.Println("WARNING: Error encountered setting ip forwarding. This can break functionality.")
@ -46,6 +48,23 @@ func SetIPForwardingUnix() error {
} }
} }
} }
// ipv6
out, err = ncutils.RunCmd("sysctl net.ipv6.conf.all.forwarding", true)
if err != nil {
log.Println("WARNING: Error encountered setting ipv6 forwarding. This can break functionality.")
return err
} else {
s := strings.Fields(string(out))
if s[2] != "1" {
_, err = ncutils.RunCmd("sysctl -w net.ipv6.conf.all.forwarding=1", true)
if err != nil {
log.Println("WARNING: Error encountered setting ipv6 forwarding. You may want to investigate this.")
return err
}
}
}
return nil return nil
} }