From 885b36810b4b70413cdcefd8afc76c992d142b6c Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Wed, 27 Aug 2025 14:04:57 +0530 Subject: [PATCH] depreacte ingress dns usage on client configs --- controllers/ext_client.go | 52 +++++++++------------------------------ logic/dns.go | 39 +++++++++++++++++++++++++++++ migrate/migrate.go | 40 ++++++++++++++++++++++++++++++ pro/controllers/users.go | 11 +++------ schema/dns.go | 1 + 5 files changed, 94 insertions(+), 49 deletions(-) diff --git a/controllers/ext_client.go b/controllers/ext_client.go index 5796439b..9a7c684b 100644 --- a/controllers/ext_client.go +++ b/controllers/ext_client.go @@ -133,6 +133,12 @@ func getExtClient(w http.ResponseWriter, r *http.Request) { logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return } + gwNode, err := logic.GetNodeByID(client.IngressGatewayID) + if err != nil { + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } + logic.SetDNSOnWgConfig(&gwNode, &client) w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(client) @@ -288,39 +294,11 @@ func getExtClientConf(w http.ResponseWriter, r *http.Request) { } } } - + logic.SetDNSOnWgConfig(&gwnode, &client) defaultDNS := "" if client.DNS != "" { defaultDNS = "DNS = " + client.DNS - } else if gwnode.IngressDNS != "" { - defaultDNS = "DNS = " + gwnode.IngressDNS } - if client.DNS == "" { - if len(network.NameServers) > 0 { - if defaultDNS == "" { - defaultDNS = "DNS = " + strings.Join(network.NameServers, ",") - } else { - defaultDNS += "," + strings.Join(network.NameServers, ",") - } - - } - } - // if servercfg.GetManageDNS() { - // if gwnode.Address6.IP != nil { - // if defaultDNS == "" { - // defaultDNS = "DNS = " + gwnode.Address6.IP.String() - // } else { - // defaultDNS = defaultDNS + ", " + gwnode.Address6.IP.String() - // } - // } - // if gwnode.Address.IP != nil { - // if defaultDNS == "" { - // defaultDNS = "DNS = " + gwnode.Address.IP.String() - // } else { - // defaultDNS = defaultDNS + ", " + gwnode.Address.IP.String() - // } - // } - // } defaultMTU := 1420 if host.MTU != 0 { @@ -745,18 +723,10 @@ func createExtClient(w http.ResponseWriter, r *http.Request) { extclient.Tags = make(map[models.TagID]struct{}) // extclient.Tags[models.TagID(fmt.Sprintf("%s.%s", extclient.Network, // models.RemoteAccessTagName))] = struct{}{} - // set extclient dns to ingressdns if extclient dns is not explicitly set - if (extclient.DNS == "") && (node.IngressDNS != "") { - network, _ := logic.GetNetwork(node.Network) - dns := node.IngressDNS - if len(network.NameServers) > 0 { - if dns == "" { - dns = strings.Join(network.NameServers, ",") - } else { - dns += "," + strings.Join(network.NameServers, ",") - } - - } + // set extclient dns to ingressdns if extclient dns is not explicitly + gwDNS := logic.GetGwDNS(&node) + if (extclient.DNS == "") && (gwDNS != "") { + dns := gwDNS extclient.DNS = dns } host, err := logic.GetHost(node.HostID.String()) diff --git a/logic/dns.go b/logic/dns.go index 2af96802..ef0941cb 100644 --- a/logic/dns.go +++ b/logic/dns.go @@ -16,6 +16,7 @@ import ( "github.com/gravitl/netmaker/logger" "github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/schema" + "github.com/gravitl/netmaker/servercfg" "github.com/txn2/txeh" ) @@ -172,6 +173,44 @@ func GetNodeDNS(network string) ([]models.DNSEntry, error) { return dns, nil } +func GetGwDNS(node *models.Node) string { + if !servercfg.GetManageDNS() { + return "" + } + h, err := GetHost(node.HostID.String()) + if err != nil { + return "" + } + if h.DNS != "yes" { + return "" + } + dns := []string{} + if node.Address.IP != nil { + dns = append(dns, node.Address.IP.String()) + } + if node.Address6.IP != nil { + dns = append(dns, node.Address6.IP.String()) + } + return strings.Join(dns, ",") + +} + +func SetDNSOnWgConfig(gwNode *models.Node, extclient *models.ExtClient) { + if extclient.RemoteAccessClientID == "" { + if extclient.DNS == "" { + extclient.DNS = GetGwDNS(gwNode) + } + return + } + ns := GetNameserversForNode(gwNode) + for _, nsI := range ns { + if nsI.MatchDomain == "." { + extclient.DNS = GetGwDNS(gwNode) + break + } + } +} + // GetCustomDNS - gets the custom DNS of a network func GetCustomDNS(network string) ([]models.DNSEntry, error) { diff --git a/migrate/migrate.go b/migrate/migrate.go index 27f6e0dc..814c76c0 100644 --- a/migrate/migrate.go +++ b/migrate/migrate.go @@ -47,6 +47,7 @@ func migrateNameservers() { if err != nil { return } + for _, netI := range nets { if len(netI.NameServers) > 0 { ns := schema.Nameserver{ @@ -59,6 +60,7 @@ func migrateNameservers() { Tags: datatypes.JSONMap{ "*": struct{}{}, }, + Nodes: make(datatypes.JSONMap), Status: true, CreatedBy: user.UserName, } @@ -70,6 +72,44 @@ func migrateNameservers() { logic.SaveNetwork(&netI) } } + nodes, _ := logic.GetAllNodes() + for _, node := range nodes { + if !node.IsGw { + continue + } + if node.IngressDNS != "" { + if (node.Address.IP != nil && node.Address.IP.String() == node.IngressDNS) || + (node.Address6.IP != nil && node.Address6.IP.String() == node.IngressDNS) { + continue + } + if node.IngressDNS == "8.8.8.8" || node.IngressDNS == "1.1.1.1" || node.IngressDNS == "9.9.9.9" { + continue + } + h, err := logic.GetHost(node.HostID.String()) + if err != nil { + continue + } + ns := schema.Nameserver{ + ID: uuid.NewString(), + Name: fmt.Sprintf("%s gw nameservers", h.Name), + NetworkID: node.Network, + Servers: []string{node.IngressDNS}, + MatchAll: true, + MatchDomains: []string{"."}, + Nodes: datatypes.JSONMap{ + node.ID.String(): struct{}{}, + }, + Tags: make(datatypes.JSONMap), + Status: true, + CreatedBy: user.UserName, + } + ns.Create(db.WithContext(context.TODO())) + node.IngressDNS = "" + logic.UpsertNode(&node) + } + + } + } // removes if any stale configurations from previous run. diff --git a/pro/controllers/users.go b/pro/controllers/users.go index a87f8f55..094f62b2 100644 --- a/pro/controllers/users.go +++ b/pro/controllers/users.go @@ -1171,11 +1171,7 @@ func getRemoteAccessGatewayConf(w http.ResponseWriter, r *http.Request) { userConf.OwnerID = user.UserName userConf.RemoteAccessClientID = req.RemoteAccessClientID userConf.IngressGatewayID = node.ID.String() - - // set extclient dns to ingressdns if extclient dns is not explicitly set - if (userConf.DNS == "") && (node.IngressDNS != "") { - userConf.DNS = node.IngressDNS - } + logic.SetDNSOnWgConfig(&node, &userConf) userConf.Network = node.Network host, err := logic.GetHost(node.HostID.String()) @@ -1301,9 +1297,8 @@ func getUserRemoteAccessGwsV1(w http.ResponseWriter, r *http.Request) { } gws := userGws[node.Network] - if extClient.DNS == "" { - extClient.DNS = node.IngressDNS - } + + logic.SetDNSOnWgConfig(&node, &extClient) extClient.IngressGatewayEndpoint = utils.GetExtClientEndpoint( host.EndpointIP, diff --git a/schema/dns.go b/schema/dns.go index 27a845e3..2e5d4240 100644 --- a/schema/dns.go +++ b/schema/dns.go @@ -17,6 +17,7 @@ type Nameserver struct { MatchAll bool `gorm:"match_all" json:"match_all"` MatchDomains datatypes.JSONSlice[string] `gorm:"match_domains" json:"match_domains"` Tags datatypes.JSONMap `gorm:"tags" json:"tags"` + Nodes datatypes.JSONMap `gorm:"nodes" json:"nodes"` Status bool `gorm:"status" json:"status"` CreatedBy string `gorm:"created_by" json:"created_by"` CreatedAt time.Time `gorm:"created_at" json:"created_at"`