NM-202: fix egress domain routing (#3793)

* NM-195: add key tags info to posture check on join

* NM-195: add network user grps to posture check

* NM-195: add posture checks to middleware

* fix: return error when group network roles are set for specific networks and all networks;

* add all posture check to rsrc permission check func

* NM-202: fix egress domain routing

* fix: add username filter;

* feat: add fallback nameserver support;

* fix: add validation for pro as well;

* fix: skip fallback domains for user gws;

* fix: don't set domains for fallback dns servers;

* fix: validation fixes;

* fix: empty match domains for fallback nameservers;

---------

Co-authored-by: VishalDalwadi <dalwadivishal26@gmail.com>
This commit is contained in:
Abhishek Kondur
2025-12-22 10:10:40 +04:00
committed by GitHub
parent a29cbb0f31
commit 0c9ed2542b
12 changed files with 269 additions and 90 deletions
+19 -2
View File
@@ -80,7 +80,7 @@ func createNs(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
return
}
if err := logic.ValidateNameserverReq(req); err != nil {
if err := logic.ValidateNameserverReq(&req); err != nil {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
return
}
@@ -110,6 +110,7 @@ func createNs(w http.ResponseWriter, r *http.Request) {
Name: req.Name,
NetworkID: req.NetworkID,
Description: req.Description,
Fallback: req.Fallback,
Servers: req.Servers,
MatchAll: req.MatchAll,
Domains: req.Domains,
@@ -199,7 +200,7 @@ func updateNs(w http.ResponseWriter, r *http.Request) {
return
}
if err := logic.ValidateNameserverReq(updateNs); err != nil {
if err := logic.ValidateNameserverReq(&updateNs); err != nil {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
return
}
@@ -218,12 +219,16 @@ func updateNs(w http.ResponseWriter, r *http.Request) {
}
var updateStatus bool
var updateMatchAll bool
var updateFallback bool
if updateNs.Status != ns.Status {
updateStatus = true
}
if updateNs.MatchAll != ns.MatchAll {
updateMatchAll = true
}
if updateNs.Fallback != ns.Fallback {
updateFallback = true
}
event := &models.Event{
Action: models.Update,
Source: models.Subject{
@@ -246,6 +251,13 @@ func updateNs(w http.ResponseWriter, r *http.Request) {
}
if !ns.Default {
if updateNs.MatchAll {
updateNs.Domains = []schema.NameserverDomain{
{
Domain: ".",
},
}
}
ns.Servers = updateNs.Servers
ns.Tags = updateNs.Tags
ns.Domains = updateNs.Domains
@@ -268,6 +280,11 @@ func updateNs(w http.ResponseWriter, r *http.Request) {
ns.MatchAll = updateNs.MatchAll
ns.UpdateMatchAll(db.WithContext(context.TODO()))
}
if updateFallback {
ns.Fallback = updateNs.Fallback
ns.UpdateFallback(db.WithContext(context.TODO()))
}
}
if updateStatus {
+1 -1
View File
@@ -683,7 +683,7 @@ func createNetwork(w http.ResponseWriter, r *http.Request) {
logic.CreateDefaultAclNetworkPolicies(models.NetworkID(network.NetID))
logic.CreateDefaultTags(models.NetworkID(network.NetID))
logic.AddNetworkToAllocatedIpMap(network.NetID)
logic.CreateGoogleDNSNameserver(network.NetID)
logic.CreateFallbackNameserver(network.NetID)
go func() {
defaultHosts := logic.GetDefaultHosts()