diff --git a/logic/acls.go b/logic/acls.go index 4373eff6..f7dcf74e 100644 --- a/logic/acls.go +++ b/logic/acls.go @@ -915,7 +915,7 @@ func IsNodeAllowedToCommunicateV1(node, peer models.Node, checkDefaultPolicy boo for tagID := range nodeTags { - if _, ok := dstMap[tagID.String()]; ok { + if _, ok := dstMap[tagID.String()]; ok || dstAll { if srcAll { allowed = true break @@ -931,7 +931,7 @@ func IsNodeAllowedToCommunicateV1(node, peer models.Node, checkDefaultPolicy boo allowedPolicies = append(allowedPolicies, policy) break } - if _, ok := srcMap[tagID.String()]; ok { + if _, ok := srcMap[tagID.String()]; ok || srcAll { if dstAll { allowed = true break @@ -953,7 +953,7 @@ func IsNodeAllowedToCommunicateV1(node, peer models.Node, checkDefaultPolicy boo } } for tagID := range peerTags { - if _, ok := dstMap[tagID.String()]; ok { + if _, ok := dstMap[tagID.String()]; ok || dstAll { if srcAll { allowed = true break @@ -1051,7 +1051,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) } for tagID := range nodeTags { allowed := false - if _, ok := dstMap[tagID.String()]; policy.AllowedDirection == models.TrafficDirectionBi && ok { + if _, ok := dstMap[tagID.String()]; policy.AllowedDirection == models.TrafficDirectionBi && ok || dstAll { if srcAll { allowed = true allowedPolicies = append(allowedPolicies, policy) @@ -1068,7 +1068,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) allowedPolicies = append(allowedPolicies, policy) break } - if _, ok := srcMap[tagID.String()]; ok { + if _, ok := srcMap[tagID.String()]; ok || srcAll { if dstAll { allowed = true allowedPolicies = append(allowedPolicies, policy) @@ -1088,7 +1088,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) } for tagID := range peerTags { allowed := false - if _, ok := dstMap[tagID.String()]; ok { + if _, ok := dstMap[tagID.String()]; ok || dstAll { if srcAll { allowed = true allowedPolicies = append(allowedPolicies, policy) @@ -1096,7 +1096,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) } for tagID := range nodeTags { - if _, ok := srcMap[tagID.String()]; ok { + if _, ok := srcMap[tagID.String()]; ok || srcAll { allowed = true break } @@ -1107,7 +1107,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) break } - if _, ok := srcMap[tagID.String()]; policy.AllowedDirection == models.TrafficDirectionBi && ok { + if _, ok := srcMap[tagID.String()]; policy.AllowedDirection == models.TrafficDirectionBi && ok || srcAll { if dstAll { allowed = true allowedPolicies = append(allowedPolicies, policy) @@ -1346,6 +1346,8 @@ func GetAclRulesForNode(targetnodeI *models.Node) (rules map[string]models.AclRu } srcTags := convAclTagToValueMap(acl.Src) dstTags := convAclTagToValueMap(acl.Dst) + _, srcAll := srcTags["*"] + _, dstAll := dstTags["*"] aclRule := models.AclRule{ ID: acl.ID, AllowedProtocol: acl.Proto, @@ -1358,16 +1360,16 @@ func GetAclRulesForNode(targetnodeI *models.Node) (rules map[string]models.AclRu var existsInSrcTag bool var existsInDstTag bool - if _, ok := srcTags[nodeTag.String()]; ok { + if _, ok := srcTags[nodeTag.String()]; ok || srcAll { existsInSrcTag = true } - if _, ok := srcTags[targetnode.ID.String()]; ok { + if _, ok := srcTags[targetnode.ID.String()]; ok || srcAll { existsInSrcTag = true } - if _, ok := dstTags[nodeTag.String()]; ok { + if _, ok := dstTags[nodeTag.String()]; ok || dstAll { existsInDstTag = true } - if _, ok := dstTags[targetnode.ID.String()]; ok { + if _, ok := dstTags[targetnode.ID.String()]; ok || dstAll { existsInDstTag = true } @@ -1390,6 +1392,9 @@ func GetAclRulesForNode(targetnodeI *models.Node) (rules map[string]models.AclRu if node.ID == targetnode.ID { continue } + if node.IsStatic && node.StaticNode.IngressGatewayID == targetnode.ID.String() { + continue + } if node.Address.IP != nil { aclRule.IPList = append(aclRule.IPList, node.AddressIPNet4()) } @@ -1423,6 +1428,9 @@ func GetAclRulesForNode(targetnodeI *models.Node) (rules map[string]models.AclRu if node.ID == targetnode.ID { continue } + if node.IsStatic && node.StaticNode.IngressGatewayID == targetnode.ID.String() { + continue + } if node.Address.IP != nil { aclRule.IPList = append(aclRule.IPList, node.AddressIPNet4()) } @@ -1462,6 +1470,9 @@ func GetAclRulesForNode(targetnodeI *models.Node) (rules map[string]models.AclRu if node.ID == targetnode.ID { continue } + if node.IsStatic && node.StaticNode.IngressGatewayID == targetnode.ID.String() { + continue + } if node.Address.IP != nil { aclRule.IPList = append(aclRule.IPList, node.AddressIPNet4()) } @@ -1490,6 +1501,9 @@ func GetAclRulesForNode(targetnodeI *models.Node) (rules map[string]models.AclRu if node.ID == targetnode.ID { continue } + if node.IsStatic && node.StaticNode.IngressGatewayID == targetnode.ID.String() { + continue + } if node.Address.IP != nil { aclRule.IPList = append(aclRule.IPList, node.AddressIPNet4()) } diff --git a/logic/extpeers.go b/logic/extpeers.go index 3ad3634b..26d53802 100644 --- a/logic/extpeers.go +++ b/logic/extpeers.go @@ -458,6 +458,7 @@ func GetStaticNodeIps(node models.Node) (ips []net.IP) { func getFwRulesForNodeAndPeerOnGw(node, peer models.Node, allowedPolicies []models.Acl) (rules []models.FwRule) { for _, policy := range allowedPolicies { + // if static peer dst rule not for ingress node -> skip rules = append(rules, models.FwRule{ SrcIP: net.IPNet{ IP: node.Address.IP, @@ -677,13 +678,19 @@ func GetFwRulesOnIngressGateway(node models.Node) (rules []models.FwRule) { if !nodeI.IsStatic || nodeI.IsUserNode { continue } - if nodeI.StaticNode.IngressGatewayID != node.ID.String() { - continue - } + // if nodeI.StaticNode.IngressGatewayID != node.ID.String() { + // continue + // } for _, peer := range nodes { if peer.StaticNode.ClientID == nodeI.StaticNode.ClientID || peer.IsUserNode { continue } + // if nodeI.StaticNode.IngressGatewayID != node.ID.String() && !peer.IsGw { + // continue + // } + // if peer.IsStatic && peer.StaticNode.IngressGatewayID !=node.ID.String(){ + + // } if ok, allowedPolicies := IsNodeAllowedToCommunicateV1(nodeI.StaticNode.ConvertToStaticNode(), peer, true); ok { rules = append(rules, getFwRulesForNodeAndPeerOnGw(nodeI.StaticNode.ConvertToStaticNode(), peer, allowedPolicies)...) } diff --git a/logic/nodes.go b/logic/nodes.go index 26c06781..bbbc9ee7 100644 --- a/logic/nodes.go +++ b/logic/nodes.go @@ -836,12 +836,12 @@ func GetTagMapWithNodesByNetwork(netID models.NetworkID, withStaticNodes bool) ( tagNodesMap = make(map[models.TagID][]models.Node) nodes, _ := GetNetworkNodes(netID.String()) for _, nodeI := range nodes { - if nodeI.Tags == nil { - continue - } tagNodesMap[models.TagID(nodeI.ID.String())] = []models.Node{ nodeI, } + if nodeI.Tags == nil { + continue + } for nodeTagID := range nodeI.Tags { tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI) } @@ -860,7 +860,7 @@ func AddTagMapWithStaticNodes(netID models.NetworkID, return tagNodesMap } for _, extclient := range extclients { - if extclient.Tags == nil || extclient.RemoteAccessClientID != "" { + if extclient.RemoteAccessClientID != "" { continue } tagNodesMap[models.TagID(extclient.ClientID)] = []models.Node{ @@ -869,6 +869,10 @@ func AddTagMapWithStaticNodes(netID models.NetworkID, StaticNode: extclient, }, } + if extclient.Tags == nil { + continue + } + for tagID := range extclient.Tags { tagNodesMap[tagID] = append(tagNodesMap[tagID], models.Node{ IsStatic: true, @@ -891,6 +895,12 @@ func AddTagMapWithStaticNodesWithUsers(netID models.NetworkID, return tagNodesMap } for _, extclient := range extclients { + tagNodesMap[models.TagID(extclient.ClientID)] = []models.Node{ + { + IsStatic: true, + StaticNode: extclient, + }, + } if extclient.Tags == nil { continue } diff --git a/scripts/nm-quick.sh b/scripts/nm-quick.sh index 3c79dff8..87538771 100755 --- a/scripts/nm-quick.sh +++ b/scripts/nm-quick.sh @@ -253,7 +253,7 @@ save_config() { ( fi # copy entries from the previous config local toCopy=("SERVER_HOST" "SERVER_HOST6" "MASTER_KEY" "MQ_USERNAME" "MQ_PASSWORD" "LICENSE_KEY" "NETMAKER_TENANT_ID" - "INSTALL_TYPE" "NODE_ID" "DNS_MODE" "NETCLIENT_AUTO_UPDATE" "API_PORT" + "INSTALL_TYPE" "NODE_ID" "DNS_MODE" "NETCLIENT_AUTO_UPDATE" "API_PORT" "MANAGE_DNS" "DEFAULT_DOMAIN" "CORS_ALLOWED_ORIGIN" "DISPLAY_KEYS" "DATABASE" "SERVER_BROKER_ENDPOINT" "VERBOSITY" "DEBUG_MODE" "REST_BACKEND" "DISABLE_REMOTE_IP_CHECK" "TELEMETRY" "ALLOWED_EMAIL_DOMAINS" "AUTH_PROVIDER" "CLIENT_ID" "CLIENT_SECRET" "FRONTEND_URL" "AZURE_TENANT" "OIDC_ISSUER" "EXPORTER_API_PORT" "JWT_VALIDITY_DURATION" "RAC_AUTO_DISABLE" "CACHING_ENABLED" "ENDPOINT_DETECTION"