mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
added local range logic
This commit is contained in:
@@ -227,7 +227,7 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
if servercfg.IsClientMode() != "off" {
|
if servercfg.IsClientMode() != "off" {
|
||||||
var success bool
|
var success bool
|
||||||
success, err = serverctl.AddNetwork(network.NetID)
|
success, err = serverctl.AddNetwork(&network)
|
||||||
if err != nil || !success {
|
if err != nil || !success {
|
||||||
logic.DeleteNetwork(network.NetID)
|
logic.DeleteNetwork(network.NetID)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@@ -26,9 +26,9 @@ const KUBERNETES_LISTEN_PORT = 31821
|
|||||||
const KUBERNETES_SERVER_MTU = 1024
|
const KUBERNETES_SERVER_MTU = 1024
|
||||||
|
|
||||||
// ServerJoin - responsible for joining a server to a network
|
// ServerJoin - responsible for joining a server to a network
|
||||||
func ServerJoin(network string, serverID string, privateKey string) error {
|
func ServerJoin(networkSettings *models.Network, serverID string) error {
|
||||||
|
|
||||||
if network == "" {
|
if networkSettings == nil || networkSettings.NetID == "" {
|
||||||
return errors.New("no network provided")
|
return errors.New("no network provided")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,6 +54,15 @@ func ServerJoin(network string, serverID string, privateKey string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if node.Endpoint == "" {
|
if node.Endpoint == "" {
|
||||||
|
if node.IsLocal == "yes" {
|
||||||
|
var localAddr, localErr = getServerLocalIP(networkSettings)
|
||||||
|
if localErr != nil {
|
||||||
|
logger.Log(1, "could not acquire local address", localErr.Error())
|
||||||
|
} else {
|
||||||
|
node.LocalAddress = localAddr
|
||||||
|
node.LocalRange = networkSettings.LocalRange
|
||||||
|
}
|
||||||
|
}
|
||||||
if node.IsLocal == "yes" && node.LocalAddress != "" {
|
if node.IsLocal == "yes" && node.LocalAddress != "" {
|
||||||
node.Endpoint = node.LocalAddress
|
node.Endpoint = node.LocalAddress
|
||||||
} else {
|
} else {
|
||||||
@@ -65,6 +74,8 @@ func ServerJoin(network string, serverID string, privateKey string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var privateKey = ""
|
||||||
|
|
||||||
// Generate and set public/private WireGuard Keys
|
// Generate and set public/private WireGuard Keys
|
||||||
if privateKey == "" {
|
if privateKey == "" {
|
||||||
wgPrivatekey, err := wgtypes.GeneratePrivateKey()
|
wgPrivatekey, err := wgtypes.GeneratePrivateKey()
|
||||||
@@ -76,7 +87,7 @@ func ServerJoin(network string, serverID string, privateKey string) error {
|
|||||||
node.PublicKey = wgPrivatekey.PublicKey().String()
|
node.PublicKey = wgPrivatekey.PublicKey().String()
|
||||||
}
|
}
|
||||||
|
|
||||||
node.Network = network
|
node.Network = networkSettings.NetID
|
||||||
|
|
||||||
logger.Log(2, "adding a server instance on network", node.Network)
|
logger.Log(2, "adding a server instance on network", node.Network)
|
||||||
err = CreateNode(node)
|
err = CreateNode(node)
|
||||||
@@ -421,3 +432,23 @@ func checkNodeActions(node *models.Node) string {
|
|||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// best effort, or get public ip
|
||||||
|
func getServerLocalIP(networkSettings *models.Network) (string, error) {
|
||||||
|
var networkCIDR = networkSettings.AddressRange
|
||||||
|
var currentAddresses, err = net.InterfaceAddrs()
|
||||||
|
if err != nil { // attempt to use public IP
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
var _, currentCIDR, cidrErr = net.ParseCIDR(networkCIDR)
|
||||||
|
if cidrErr != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
for _, address := range currentAddresses {
|
||||||
|
if currentCIDR.Contains(net.IP(address.Network())) {
|
||||||
|
logger.Log(1, "setting local ip", address.String())
|
||||||
|
return address.String(), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", errors.New("could not find local ip")
|
||||||
|
}
|
||||||
|
@@ -103,7 +103,7 @@ func SyncNetworks(servernets []models.Network) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !exists {
|
if !exists {
|
||||||
success, err := AddNetwork(servernet.NetID)
|
success, err := AddNetwork(&servernet)
|
||||||
if err != nil || !success {
|
if err != nil || !success {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = errors.New("network add failed for " + servernet.NetID)
|
err = errors.New("network add failed for " + servernet.NetID)
|
||||||
@@ -139,7 +139,7 @@ func SyncNetworks(servernets []models.Network) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddNetwork - add a network to server in client mode
|
// AddNetwork - add a network to server in client mode
|
||||||
func AddNetwork(network string) (bool, error) {
|
func AddNetwork(networkSettings *models.Network) (bool, error) {
|
||||||
var err = logic.ServerJoin(network, servercfg.GetNodeID(), "")
|
var err = logic.ServerJoin(networkSettings, servercfg.GetNodeID())
|
||||||
return true, err
|
return true, err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user