added local range logic

This commit is contained in:
0xdcarns
2022-01-12 19:39:10 -05:00
parent 685689df1d
commit 72206817bb
3 changed files with 38 additions and 7 deletions

View File

@@ -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 {

View File

@@ -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")
}

View File

@@ -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
} }