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