mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-30 08:54:25 +08:00
fixing rangeupdate for ipv6, setting ipv4 assignment
This commit is contained in:
parent
60c6e377f8
commit
d63bae351d
4 changed files with 85 additions and 11 deletions
|
@ -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"))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue