mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-18 16:26:38 +00:00
Feature/dns protocol (#543)
Added DNS update protocol message Added sync to clients Update nameserver API with new fields Added default NS groups Added new dns-name flag for the management service append to peer DNS label
This commit is contained in:
34
dns/dns.go
34
dns/dns.go
@@ -5,6 +5,9 @@ package dns
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/miekg/dns"
|
||||
"golang.org/x/net/idna"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -16,12 +19,14 @@ const (
|
||||
DefaultClass = "IN"
|
||||
)
|
||||
|
||||
// Update represents a dns update that is exchanged between management and peers
|
||||
type Update struct {
|
||||
const invalidHostLabel = "[^a-zA-Z0-9-]+"
|
||||
|
||||
// Config represents a dns configuration that is exchanged between management and peers
|
||||
type Config struct {
|
||||
// ServiceEnable indicates if the service should be enabled
|
||||
ServiceEnable bool
|
||||
// NameServerGroups contains a list of nameserver group
|
||||
NameServerGroups []NameServerGroup
|
||||
NameServerGroups []*NameServerGroup
|
||||
// CustomZones contains a list of custom zone
|
||||
CustomZones []CustomZone
|
||||
}
|
||||
@@ -54,3 +59,26 @@ func (s SimpleRecord) String() string {
|
||||
fqdn := dns.Fqdn(s.Name)
|
||||
return fmt.Sprintf("%s %d %s %s %s", fqdn, s.TTL, s.Class, dns.Type(s.Type).String(), s.RData)
|
||||
}
|
||||
|
||||
// GetParsedDomainLabel returns a domain label with max 59 characters,
|
||||
// parsed for old Hosts.txt requirements, and converted to ASCII and lowercase
|
||||
func GetParsedDomainLabel(name string) (string, error) {
|
||||
labels := dns.SplitDomainName(name)
|
||||
if len(labels) == 0 {
|
||||
return "", fmt.Errorf("got empty label list for name \"%s\"", name)
|
||||
}
|
||||
rawLabel := labels[0]
|
||||
ascii, err := idna.Punycode.ToASCII(rawLabel)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("unable to convert host lavel to ASCII, error: %v", err)
|
||||
}
|
||||
|
||||
invalidHostMatcher := regexp.MustCompile(invalidHostLabel)
|
||||
|
||||
validHost := strings.ToLower(invalidHostMatcher.ReplaceAllString(ascii, "-"))
|
||||
if len(validHost) > 58 {
|
||||
validHost = validHost[:59]
|
||||
}
|
||||
|
||||
return validHost, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user