TLD=subnet configuration
This commit is contained in:
parent
f1cd8b9812
commit
0fe85623e2
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
@ -18,7 +19,7 @@ func main() {
|
|||||||
subdomain := flag.String("subdomain", "meshname.", "subdomain used to generate config")
|
subdomain := flag.String("subdomain", "meshname.", "subdomain used to generate config")
|
||||||
useconffile := flag.String("useconffile", "", "run daemon with a config file")
|
useconffile := flag.String("useconffile", "", "run daemon with a config file")
|
||||||
listenAddr := flag.String("listenaddr", "[::1]:53535", "address to listen on")
|
listenAddr := flag.String("listenaddr", "[::1]:53535", "address to listen on")
|
||||||
meshSubnetStr := flag.String("meshsubnet", "::/0", "valid IPv6 address space")
|
networksconf := flag.String("networks", "ygg=200::/7,cjd=fc00::/8,meshname=::/0", "TLD=subnet list separated by comma")
|
||||||
debug := flag.Bool("debug", false, "enable debug logging")
|
debug := flag.Bool("debug", false, "enable debug logging")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
@ -42,15 +43,21 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
s := new(meshname.MeshnameServer)
|
networks := make(map[string]*net.IPNet)
|
||||||
|
for _, item := range strings.Split(*networksconf, ",") {
|
||||||
|
tokens := strings.SplitN(item, "=", 2)
|
||||||
|
domain, subnet := tokens[0], tokens[1]
|
||||||
|
|
||||||
_, validSubnet, err := net.ParseCIDR(*meshSubnetStr)
|
_, validSubnet, err := net.ParseCIDR(subnet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorln(err)
|
logger.Errorln(err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
networks[domain] = validSubnet
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Init(logger, *listenAddr, *useconffile, validSubnet)
|
s := new(meshname.MeshnameServer)
|
||||||
|
s.Init(logger, *listenAddr, *useconffile, networks)
|
||||||
s.Start()
|
s.Start()
|
||||||
|
|
||||||
c := make(chan os.Signal, 1)
|
c := make(chan os.Signal, 1)
|
||||||
|
@ -9,7 +9,7 @@ Group=nogroup
|
|||||||
ProtectHome=true
|
ProtectHome=true
|
||||||
ProtectSystem=true
|
ProtectSystem=true
|
||||||
SyslogIdentifier=meshnamed
|
SyslogIdentifier=meshnamed
|
||||||
ExecStart=/usr/local/bin/meshnamed -listenaddr [::1]:53535 -meshsubnet 200::/7 -useconffile /etc/meshnamed.conf
|
ExecStart=/usr/local/bin/meshnamed -listenaddr [::1]:53535 -useconffile /etc/meshnamed.conf
|
||||||
Restart=always
|
Restart=always
|
||||||
TimeoutStopSec=5
|
TimeoutStopSec=5
|
||||||
|
|
||||||
|
@ -49,18 +49,18 @@ func GenConf(target, zone string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MeshnameServer struct {
|
type MeshnameServer struct {
|
||||||
validSubnet *net.IPNet
|
|
||||||
log *log.Logger
|
log *log.Logger
|
||||||
listenAddr, zoneConfigPath string
|
listenAddr, zoneConfigPath string
|
||||||
zoneConfig map[string][]dns.RR
|
zoneConfig map[string][]dns.RR
|
||||||
dnsClient *dns.Client
|
dnsClient *dns.Client
|
||||||
dnsServer *dns.Server
|
dnsServer *dns.Server
|
||||||
|
networks map[string]*net.IPNet
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *MeshnameServer) Init(log *log.Logger, listenAddr string, zoneConfigPath string, validSubnet *net.IPNet) {
|
func (s *MeshnameServer) Init(log *log.Logger, listenAddr string, zoneConfigPath string, networks map[string]*net.IPNet) {
|
||||||
s.log = log
|
s.log = log
|
||||||
s.listenAddr = listenAddr
|
s.listenAddr = listenAddr
|
||||||
s.validSubnet = validSubnet
|
s.networks = networks
|
||||||
s.zoneConfigPath = zoneConfigPath
|
s.zoneConfigPath = zoneConfigPath
|
||||||
s.zoneConfig = make(map[string][]dns.RR)
|
s.zoneConfig = make(map[string][]dns.RR)
|
||||||
if s.dnsClient == nil {
|
if s.dnsClient == nil {
|
||||||
@ -119,8 +119,9 @@ func (s *MeshnameServer) Stop() error {
|
|||||||
|
|
||||||
func (s *MeshnameServer) Start() error {
|
func (s *MeshnameServer) Start() error {
|
||||||
s.dnsServer = &dns.Server{Addr: s.listenAddr, Net: "udp"}
|
s.dnsServer = &dns.Server{Addr: s.listenAddr, Net: "udp"}
|
||||||
for _, domain := range DomainZones {
|
for domain := range s.networks {
|
||||||
dns.HandleFunc(domain, s.handleRequest)
|
dns.HandleFunc(domain, s.handleRequest)
|
||||||
|
s.log.Debugln("Handling:", domain)
|
||||||
}
|
}
|
||||||
go s.dnsServer.ListenAndServe()
|
go s.dnsServer.ListenAndServe()
|
||||||
s.log.Infoln("Started meshnamed on:", s.listenAddr)
|
s.log.Infoln("Started meshnamed on:", s.listenAddr)
|
||||||
@ -153,11 +154,14 @@ func (s *MeshnameServer) handleRequest(w dns.ResponseWriter, r *dns.Msg) {
|
|||||||
s.log.Debugln(err)
|
s.log.Debugln(err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if !s.validSubnet.Contains(resolvedAddr) {
|
// check subnet validity
|
||||||
|
tld := labels[len(labels)-1]
|
||||||
|
|
||||||
|
if subnet, ok := s.networks[tld]; ok && subnet.Contains(resolvedAddr) {
|
||||||
|
remoteLookups[resolvedAddr.String()] = append(remoteLookups[resolvedAddr.String()], q)
|
||||||
|
} else {
|
||||||
s.log.Debugln("Error: subnet doesn't match")
|
s.log.Debugln("Error: subnet doesn't match")
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
remoteLookups[resolvedAddr.String()] = append(remoteLookups[resolvedAddr.String()], q)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user