mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 03:46:02 +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
|
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"))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue