Ver código fonte

add egress routes to static nodes by access

abhishek9686 3 meses atrás
pai
commit
0671a0d9dc
2 arquivos alterados com 41 adições e 4 exclusões
  1. 37 4
      logic/egress.go
  2. 4 0
      logic/extpeers.go

+ 37 - 4
logic/egress.go

@@ -148,25 +148,58 @@ func isNodeUsingInternetGw(node *models.Node) {
 func DoesNodeHaveAccessToEgress(node *models.Node, e *schema.Egress) bool {
 	nodeTags := maps.Clone(node.Tags)
 	nodeTags[models.TagID(node.ID.String())] = struct{}{}
+	if !e.IsInetGw {
+		nodeTags[models.TagID("*")] = struct{}{}
+	}
+	fmt.Println("=====> CHECKING FOR EGRESS ", e.Name)
 	acls, _ := ListAclsByNetwork(models.NetworkID(node.Network))
+	if !e.IsInetGw {
+		defaultDevicePolicy, _ := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
+		if defaultDevicePolicy.Enabled {
+			fmt.Println("hereee 1")
+			return true
+		}
+	}
 	for _, acl := range acls {
 		if !acl.Enabled {
 			continue
 		}
 		srcVal := convAclTagToValueMap(acl.Src)
+		fmt.Println("ACL SRC: ", acl.Src, acl.Name)
+		if !e.IsInetGw && acl.AllowedDirection == models.TrafficDirectionBi {
+			if _, ok := srcVal["*"]; ok {
+				fmt.Println("hereee 2")
+				return true
+			}
+		}
 		for _, dstI := range acl.Dst {
-			if dstI.ID == models.EgressID {
+
+			if !e.IsInetGw && dstI.ID == models.NodeTagID && dstI.Value == "*" {
+				fmt.Println("hereee 3")
+				return true
+			}
+			if dstI.ID == models.EgressID && dstI.Value == e.ID {
 				e := schema.Egress{ID: dstI.Value}
 				err := e.Get(db.WithContext(context.TODO()))
 				if err != nil || !e.Status {
+					fmt.Println("hereee 4")
 					continue
 				}
-
-				if _, ok := srcVal[node.ID.String()]; ok {
-					return true
+				if node.IsStatic {
+					if _, ok := srcVal[node.StaticNode.ClientID]; ok {
+						fmt.Println("hereee 5")
+						return true
+					}
+				} else {
+					if _, ok := srcVal[node.ID.String()]; ok {
+						fmt.Println("hereee 6")
+						return true
+					}
 				}
+
 				for tagID := range nodeTags {
 					if _, ok := srcVal[tagID.String()]; ok {
+						fmt.Println("hereee 7")
 						return true
 					}
 				}

+ 4 - 0
logic/extpeers.go

@@ -74,12 +74,16 @@ func GetEgressRangesOnNetwork(client *models.ExtClient) ([]string, error) {
 	if err != nil {
 		return []string{}, err
 	}
+	clientNode := client.ConvertToStaticNode()
 	for _, currentNode := range networkNodes {
 		if currentNode.Network != client.Network {
 			continue
 		}
+		AddEgressInfoToPeerByAccess(&clientNode, &currentNode)
 		if currentNode.EgressDetails.IsEgressGateway { // add the egress gateway range(s) to the result
+			fmt.Println("EGRESSS EXTCLEINT: ", currentNode.EgressDetails)
 			if len(currentNode.EgressDetails.EgressGatewayRanges) > 0 {
+
 				result = append(result, currentNode.EgressDetails.EgressGatewayRanges...)
 			}
 		}