accept custom meship domains
This commit is contained in:
parent
38781e39fe
commit
73c604e9c4
@ -30,6 +30,7 @@ func parseNetworks(networksconf string) (map[string]*net.IPNet, error) {
|
||||
|
||||
var (
|
||||
listenAddr, networksconf string
|
||||
meshipNetworksconf string
|
||||
getName, getIP string
|
||||
debug, noMeshIP bool
|
||||
)
|
||||
@ -37,6 +38,7 @@ var (
|
||||
func init() {
|
||||
flag.StringVar(&listenAddr, "listenaddr", "[::1]:53535", "address to listen on")
|
||||
flag.StringVar(&networksconf, "networks", "ygg=200::/7,cjd=fc00::/8,meshname=::/0,popura=::/0", "TLD=subnet list separated by comma")
|
||||
flag.StringVar(&meshipNetworksconf, "meshipnetworks", "meship=::/0", "TLD=subnet list separated by comma")
|
||||
flag.BoolVar(&noMeshIP, "nomeship", false, "disable .meship resolver")
|
||||
flag.StringVar(&getName, "getname", "", "convert IPv6 address to a name")
|
||||
flag.StringVar(&getIP, "getip", "", "convert a name to IPv6 address")
|
||||
@ -73,11 +75,12 @@ func main() {
|
||||
}
|
||||
|
||||
networks, err := parseNetworks(networksconf)
|
||||
meshipNetworks, err := parseNetworks(meshipNetworksconf)
|
||||
if err != nil {
|
||||
logger.Fatalln(err)
|
||||
}
|
||||
|
||||
s := meshname.New(logger, listenAddr, networks, !noMeshIP)
|
||||
s := meshname.New(logger, listenAddr, networks, meshipNetworks, !noMeshIP)
|
||||
|
||||
if err := s.Start(); err != nil {
|
||||
logger.Fatal(err)
|
||||
|
@ -10,28 +10,30 @@ import (
|
||||
)
|
||||
|
||||
type MeshnameServer struct {
|
||||
log *log.Logger
|
||||
listenAddr string
|
||||
dnsClient *dns.Client
|
||||
dnsServer *dns.Server
|
||||
networks map[string]*net.IPNet
|
||||
enableMeshIP bool
|
||||
log *log.Logger
|
||||
listenAddr string
|
||||
dnsClient *dns.Client
|
||||
dnsServer *dns.Server
|
||||
networks map[string]*net.IPNet
|
||||
meshipNetworks map[string]*net.IPNet
|
||||
enableMeshIP bool
|
||||
|
||||
startedLock sync.RWMutex
|
||||
started bool
|
||||
startedLock sync.RWMutex
|
||||
started bool
|
||||
}
|
||||
|
||||
// New is a constructor for MeshnameServer
|
||||
func New(log *log.Logger, listenAddr string, networks map[string]*net.IPNet, enableMeshIP bool) *MeshnameServer {
|
||||
func New(log *log.Logger, listenAddr string, networks map[string]*net.IPNet, meshipNetworks map[string]*net.IPNet, enableMeshIP bool) *MeshnameServer {
|
||||
dnsClient := new(dns.Client)
|
||||
dnsClient.Timeout = 5000000000 // increased 5 seconds timeout
|
||||
|
||||
return &MeshnameServer{
|
||||
log: log,
|
||||
listenAddr: listenAddr,
|
||||
networks: networks,
|
||||
dnsClient: dnsClient,
|
||||
enableMeshIP: enableMeshIP,
|
||||
log: log,
|
||||
listenAddr: listenAddr,
|
||||
networks: networks,
|
||||
meshipNetworks: meshipNetworks,
|
||||
dnsClient: dnsClient,
|
||||
enableMeshIP: enableMeshIP,
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,8 +65,12 @@ func (s *MeshnameServer) Start() error {
|
||||
s.log.Debugln("Handling:", tld, subnet)
|
||||
}
|
||||
if s.enableMeshIP {
|
||||
dns.HandleFunc("meship", s.handleMeshIPRequest)
|
||||
s.log.Debugln("Handling: meship ::/0")
|
||||
for mtld, subnet := range s.meshipNetworks {
|
||||
//dns.HandleFunc("meship", s.handleMeshIPRequest)
|
||||
dns.HandleFunc(mtld, s.handleMeshIPRequest)
|
||||
//s.log.Debugln("Handling: meship ::/0")
|
||||
s.log.Debugln("Handling as meship:", mtld, subnet)
|
||||
}
|
||||
}
|
||||
|
||||
go func() {
|
||||
@ -87,14 +93,23 @@ func (s *MeshnameServer) handleMeshnameRequest(w dns.ResponseWriter, r *dns.Msg)
|
||||
m := new(dns.Msg)
|
||||
m.SetReply(r)
|
||||
s.log.Debugln(r.String())
|
||||
s.log.Debugln(s.networks) // DEBUG
|
||||
|
||||
var tldList []string
|
||||
for tld := range s.networks {
|
||||
tldList = append(tldList, tld)
|
||||
}
|
||||
s.log.Debugln(tldList) // DEBUG
|
||||
|
||||
for _, q := range r.Question {
|
||||
labels := dns.SplitDomainName(q.Name)
|
||||
s.log.Debugln(labels) // DEBUG
|
||||
if len(labels) < 2 {
|
||||
s.log.Debugln("Error: invalid domain requested")
|
||||
continue
|
||||
}
|
||||
subDomain := labels[len(labels)-2]
|
||||
s.log.Debugln(subDomain) // DEBUG
|
||||
|
||||
resolvedAddr, err := IPFromDomain(&subDomain)
|
||||
if err != nil {
|
||||
@ -134,11 +149,12 @@ func (s *MeshnameServer) handleMeshnameRequest(w dns.ResponseWriter, r *dns.Msg)
|
||||
func (s *MeshnameServer) handleMeshIPRequest(w dns.ResponseWriter, r *dns.Msg) {
|
||||
m := new(dns.Msg)
|
||||
m.SetReply(r)
|
||||
s.log.Debugln(r.String())
|
||||
|
||||
for _, q := range r.Question {
|
||||
labels := dns.SplitDomainName(q.Name)
|
||||
// resolve only 2nd level domains and AAAA type
|
||||
if len(labels) != 2 || q.Qtype != dns.TypeAAAA || q.Qclass != dns.ClassINET {
|
||||
// resolve only AAAA type
|
||||
if q.Qtype != dns.TypeAAAA || q.Qclass != dns.ClassINET {
|
||||
s.log.Debugln("Error: invalid resource requested")
|
||||
continue
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user