mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-29 18:33:05 +00:00
Do not include BaseDomain as full route in DNSConfig + code reorg
This commit is contained in:
parent
a9a1a8fb3c
commit
061efa1822
2 changed files with 32 additions and 13 deletions
14
api.go
14
api.go
|
@ -258,13 +258,13 @@ func (h *Headscale) getMapResponse(mKey wgkey.Key, req tailcfg.MapRequest, m *Ma
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var dnsConfig *tailcfg.DNSConfig
|
dnsConfig, err := h.getMapResponseDNSConfig(*m, peers)
|
||||||
if h.cfg.DNSConfig != nil && h.cfg.DNSConfig.Proxied { // if MagicDNS is enabled
|
if err != nil {
|
||||||
// Only inject the Search Domain of the current namespace - shared nodes should use their full FQDN
|
log.Error().
|
||||||
dnsConfig = h.cfg.DNSConfig.Clone()
|
Str("func", "getMapResponse").
|
||||||
dnsConfig.Domains = append(dnsConfig.Domains, fmt.Sprintf("%s.%s", m.Namespace.Name, h.cfg.BaseDomain))
|
Err(err).
|
||||||
} else {
|
Msg("Failed generate the DNSConfig")
|
||||||
dnsConfig = h.cfg.DNSConfig
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := tailcfg.MapResponse{
|
resp := tailcfg.MapResponse{
|
||||||
|
|
31
dns.go
31
dns.go
|
@ -4,7 +4,9 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/fatih/set"
|
||||||
"inet.af/netaddr"
|
"inet.af/netaddr"
|
||||||
|
"tailscale.com/tailcfg"
|
||||||
"tailscale.com/util/dnsname"
|
"tailscale.com/util/dnsname"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -29,15 +31,10 @@ import (
|
||||||
// From the netmask we can find out the wildcard bits (the bits that are not set in the netmask).
|
// From the netmask we can find out the wildcard bits (the bits that are not set in the netmask).
|
||||||
// This allows us to then calculate the subnets included in the subsequent class block and generate the entries.
|
// This allows us to then calculate the subnets included in the subsequent class block and generate the entries.
|
||||||
func generateMagicDNSRootDomains(ipPrefix netaddr.IPPrefix, baseDomain string) ([]dnsname.FQDN, error) {
|
func generateMagicDNSRootDomains(ipPrefix netaddr.IPPrefix, baseDomain string) ([]dnsname.FQDN, error) {
|
||||||
base, err := dnsname.ToFQDN(baseDomain)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(juanfont): we are not handing out IPv6 addresses yet
|
// TODO(juanfont): we are not handing out IPv6 addresses yet
|
||||||
// and in fact this is Tailscale.com's range (note the fd7a:115c:a1e0: range in the fc00::/7 network)
|
// and in fact this is Tailscale.com's range (note the fd7a:115c:a1e0: range in the fc00::/7 network)
|
||||||
ipv6base := dnsname.FQDN("0.e.1.a.c.5.1.1.a.7.d.f.ip6.arpa.")
|
ipv6base := dnsname.FQDN("0.e.1.a.c.5.1.1.a.7.d.f.ip6.arpa.")
|
||||||
fqdns := []dnsname.FQDN{base, ipv6base}
|
fqdns := []dnsname.FQDN{ipv6base}
|
||||||
|
|
||||||
// Conversion to the std lib net.IPnet, a bit easier to operate
|
// Conversion to the std lib net.IPnet, a bit easier to operate
|
||||||
netRange := ipPrefix.IPNet()
|
netRange := ipPrefix.IPNet()
|
||||||
|
@ -71,3 +68,25 @@ func generateMagicDNSRootDomains(ipPrefix netaddr.IPPrefix, baseDomain string) (
|
||||||
}
|
}
|
||||||
return fqdns, nil
|
return fqdns, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Headscale) getMapResponseDNSConfig(m Machine, peers Machines) (*tailcfg.DNSConfig, error) {
|
||||||
|
var dnsConfig *tailcfg.DNSConfig
|
||||||
|
if h.cfg.DNSConfig != nil && h.cfg.DNSConfig.Proxied { // if MagicDNS is enabled
|
||||||
|
// Only inject the Search Domain of the current namespace - shared nodes should use their full FQDN
|
||||||
|
dnsConfig = h.cfg.DNSConfig.Clone()
|
||||||
|
dnsConfig.Domains = append(dnsConfig.Domains, fmt.Sprintf("%s.%s", m.Namespace.Name, h.cfg.BaseDomain))
|
||||||
|
|
||||||
|
namespaceSet := set.New(set.ThreadSafe)
|
||||||
|
namespaceSet.Add(m.Namespace)
|
||||||
|
for _, p := range peers {
|
||||||
|
namespaceSet.Add(p.Namespace)
|
||||||
|
}
|
||||||
|
for _, namespace := range namespaceSet.List() {
|
||||||
|
dnsRoute := dnsname.FQDN(fmt.Sprintf("%s.%s", namespace.(Namespace).Name, h.cfg.BaseDomain))
|
||||||
|
dnsConfig.Routes[dnsRoute.WithoutTrailingDot()] = nil
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dnsConfig = h.cfg.DNSConfig
|
||||||
|
}
|
||||||
|
return dnsConfig, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue