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

View file

@ -447,7 +447,7 @@ func UpdateNetworkNodeAddresses(networkName string) error {
var node models.Node
err := json.Unmarshal([]byte(value), &node)
if err != nil {
fmt.Println("error in node address assignment!")
logger.Log(1, "error in node ipv4 address assignment!")
return err
}
if node.Network == networkName {
@ -459,7 +459,7 @@ func UpdateNetworkNodeAddresses(networkName string) error {
ipaddr, iperr = UniqueAddress(networkName, false)
}
if iperr != nil {
fmt.Println("error in node address assignment!")
logger.Log(1, "error in node ipv4 address assignment!")
return iperr
}
@ -475,6 +475,47 @@ func UpdateNetworkNodeAddresses(networkName string) error {
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)
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
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 {
return false, false, false, err
return false, false, false, false, err
}
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
hasholepunchupdate := newNetwork.DefaultUDPHolePunch != currentNetwork.DefaultUDPHolePunch
data, err := json.Marshal(newNetwork)
if err != nil {
return false, false, false, err
return false, false, false, false, err
}
newNetwork.SetNetworkLastModified()
err = database.Insert(newNetwork.NetID, string(data), database.NETWORKS_TABLE_NAME)
return hasrangeupdate, localrangeupdate, hasholepunchupdate, err
return hasrangeupdate4, hasrangeupdate6, localrangeupdate, hasholepunchupdate, err
}
// 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

View file

@ -21,6 +21,7 @@ import (
"github.com/gravitl/netmaker/netclient/auth"
"github.com/gravitl/netmaker/netclient/config"
"github.com/gravitl/netmaker/netclient/daemon"
"github.com/gravitl/netmaker/netclient/local"
"github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/netclient/wireguard"
ssl "github.com/gravitl/netmaker/tls"
@ -57,6 +58,11 @@ func Daemon() error {
}
//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 ==
for server, config := range serverSet {

View file

@ -32,6 +32,8 @@ func SetIPForwarding() error {
// SetIPForwardingLinux - sets the ipforwarding for linux
func SetIPForwardingUnix() error {
// ipv4
out, err := ncutils.RunCmd("sysctl net.ipv4.ip_forward", true)
if err != nil {
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
}