4 Commits

Author SHA1 Message Date
George 015fcaf0d2 Add -getname and -getip commands 2021-04-05 10:02:57 -04:00
George c56ec05ae7 Add .meship protocol support (#7) (#8)
* Add .meship protocol support (#7)

* Add an option to disable .meship resolver

Co-authored-by: George <zhoreeq@users.noreply.github.com>
2021-04-05 00:58:46 -04:00
George cc15ec8496 Add logo to README 2021-04-04 08:40:11 -04:00
acetone 5b6b33139b Предложение логотипа для проекта и протокола (#12)
* Create readme.md

* Add files via upload

* Add files via upload

* Delete logo.ai

* Delete logo.png

* Delete logo.svg
2021-04-04 08:25:20 -04:00
13 changed files with 5858 additions and 22 deletions
+2
View File
@@ -1,5 +1,7 @@
# meshname
<img src="https://raw.githubusercontent.com/zhoreeq/meshname/master/img/logo-medium.png">
A universal naming system for all IPv6-based mesh networks, including CJDNS and Yggdrasil.
Implements the [Meshname protocol](https://github.com/zhoreeq/meshname/blob/master/protocol.md).
+22 -3
View File
@@ -38,7 +38,8 @@ func loadConfig(s *meshname.MeshnameServer, confPath string) error {
var (
genconf, subdomain, useconffile, listenAddr, networksconf string
debug, allowRemote bool
getName, getIP string
debug, noMeshIP, allowRemote bool
)
func init() {
@@ -47,6 +48,9 @@ func init() {
flag.StringVar(&useconffile, "useconffile", "", "run daemon with a config file")
flag.StringVar(&listenAddr, "listenaddr", "[::1]:53535", "address to listen on")
flag.StringVar(&networksconf, "networks", "ygg=200::/7,cjd=fc00::/8,meshname=::/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")
flag.BoolVar(&allowRemote, "allowremote", false, "allow remote queries from any IP address")
flag.BoolVar(&debug, "debug", false, "enable debug logging")
}
@@ -63,7 +67,22 @@ func main() {
logger.EnableLevel("debug")
}
if genconf != "" {
if getName != "" {
ip := net.ParseIP(getName)
if ip == nil {
logger.Fatal("Invalid IP address")
}
subDomain := meshname.DomainFromIP(&ip)
fmt.Println(subDomain)
return
} else if getIP != "" {
ip, err := meshname.IPFromDomain(&getIP)
if err != nil {
logger.Fatal(err)
}
fmt.Println(ip)
return
} else if genconf != "" {
if conf, err := meshname.GenConf(genconf, subdomain); err == nil {
fmt.Println(conf)
} else {
@@ -77,7 +96,7 @@ func main() {
logger.Fatalln(err)
}
s := meshname.New(logger, listenAddr, networks, allowRemote)
s := meshname.New(logger, listenAddr, networks, !noMeshIP, allowRemote)
if useconffile != "" {
if err := loadConfig(s, useconffile); err != nil {
logger.Fatalln(err)
+1895
View File
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 878.03 168"><defs><style>.a{fill:#8cc63f;}.b{fill:#f2f2f2;}.c{fill:#006837;}</style></defs><title>logo-ver2</title><rect class="a" x="1" y="29" width="877.03" height="139"/><rect width="877.03" height="13"/><path d="M137.54,469.46V397.84L124.4,384.66H112.52L99.38,397.84v71.62H86.66V392.55l20.78-20.61h22l14.42,14.2,14.42-14.2h22.05l20.77,20.61v76.91H188.42V397.84l-13.14-13.18H163.41l-13.15,13.18v71.62Z" transform="translate(-65 -319)"/><path d="M277.89,469.46h-39L218.1,448.85v-56.3l20.78-20.61h39l20.77,20.56v22.26l-20.77,20.78H235.06V422.82H272.8l13.14-13.36V397.8L272.8,384.66H244l-13.15,13.18v45.72L244,457H272.8l19.5-19.71,8.91,9.11Z" transform="translate(-65 -319)"/><path d="M378,469.46H318.16V457h54.7L386,443.5V427.06H318.16V392.5l20.78-20.56h59.79v12.72H344L330.89,397.8v16.54h67.84v34.48Z" transform="translate(-65 -319)"/><path d="M415.69,469.46V326h12.72v53.78l8-7.84h39l20.78,20.61v76.91H483.53V397.84l-13.15-13.18H441.55l-13.14,13.18v71.62Z" transform="translate(-65 -319)"/><path class="b" d="M581.05,446V391.61l-13.15-10H539.07l-13.14,10V446H513.21V387.59L534,371.94h39l20.78,15.65V446Z" transform="translate(-65 -319)"/><path class="b" d="M670.51,470h-39l-20.77-20.75V426.8l20.77-20.75h42.83v12.79H636.59l-13.14,13.29v11.79l13.14,13.5h28.83L678.57,444V398l-13.15-13.26H627.69V371.94h42.82l20.78,20.72v56.62Z" transform="translate(-65 -319)"/><path class="b" d="M759.13,470V398L746,384.73H734.11L721,398v72H708.25V392.66L729,371.94h22.05l14.42,14.28,14.41-14.28H802l20.78,20.72V470H810V398l-13.14-13.25H785L771.85,398v72Z" transform="translate(-65 -319)"/><path class="b" d="M899.47,470h-39l-20.78-20.72V392.66l20.78-20.72h39l20.78,20.68V415l-20.78,20.89H856.65V423.1h37.74l13.14-13.43V398l-13.14-13.22H865.55L852.41,398v46l13.14,13.47h28.84l19.5-19.82,8.91,9.16Z" transform="translate(-65 -319)"/><path class="c" d="M513,469.15V457h1.67a2.12,2.12,0,0,1,2.39,2.17v7.95c0,1.25-1,2-2.55,2Zm1.08-.92h.43c1,0,1.47-.36,1.47-1.11v-7.95c0-.83-.45-1.25-1.31-1.25h-.59Z" transform="translate(-65 -319)"/><path class="c" d="M519.91,467.43v-8.71a2.06,2.06,0,0,1,4.06,0v8.71a2.06,2.06,0,0,1-4.06,0Zm1.08-8.71v8.71a1,1,0,0,0,1.9,0v-8.71a1,1,0,0,0-1.9,0Z" transform="translate(-65 -319)"/><path class="c" d="M526.42,467.43v-8.71a2.06,2.06,0,0,1,4.06,0v8.71a2.06,2.06,0,0,1-4.06,0Zm1.08-8.71v8.71a1,1,0,0,0,1.9,0v-8.71a1,1,0,0,0-1.9,0Z" transform="translate(-65 -319)"/><path class="c" d="M538.33,469.15h-1.08v-8l-1,3.16h-.9l-1-3.16v8h-1.08V457h1l1.53,5.09,1.53-5.09h1Z" transform="translate(-65 -319)"/><path class="c" d="M541.6,467.43V465.9h1.08v1.53a1,1,0,0,0,1.9,0v-2.17a2.56,2.56,0,0,0-1.33-2.13,3.44,3.44,0,0,1-1.65-2.82v-1.59a2.06,2.06,0,0,1,4.06,0v1.44h-1.08v-1.44a1,1,0,0,0-1.9,0v1.59a2.61,2.61,0,0,0,1.33,2.16,3.39,3.39,0,0,1,1.65,2.79v2.17a2.06,2.06,0,0,1-4.06,0Z" transform="translate(-65 -319)"/><path class="c" d="M548.93,469.15V457h1.67a2.12,2.12,0,0,1,2.39,2.17v7.95c0,1.25-1,2-2.55,2Zm1.08-.92h.43c1,0,1.47-.36,1.47-1.11v-7.95c0-.83-.45-1.25-1.31-1.25H550Z" transform="translate(-65 -319)"/><path class="c" d="M559.64,469.15l-.53-2.78h-2.43l-.55,2.78H555L557.44,457h.92l2.39,12.15Zm-2.77-3.7h2.06l-1-5.22Z" transform="translate(-65 -319)"/><path class="c" d="M566.22,457h1.1l-1.92,7.24v4.91h-1.08v-4.91L562.38,457h1.1l1.37,5.12Z" transform="translate(-65 -319)"/><path class="c" d="M575.28,469.15V457H577a2.12,2.12,0,0,1,2.39,2.17v7.95c0,1.25-1,2-2.55,2Zm1.08-.92h.43c1,0,1.47-.36,1.47-1.11v-7.95c0-.83-.45-1.25-1.31-1.25h-.59Z" transform="translate(-65 -319)"/><path class="c" d="M585.69,469.15l-2-7.55v7.55h-1.08V457h1l2,7.55V457h1.08v12.15Z" transform="translate(-65 -319)"/><path class="c" d="M589.94,467.43V465.9H591v1.53a1,1,0,0,0,1.9,0v-2.17a2.56,2.56,0,0,0-1.33-2.13,3.44,3.44,0,0,1-1.65-2.82v-1.59a2.06,2.06,0,0,1,4.06,0v1.44h-1.08v-1.44a1,1,0,0,0-1.9,0v1.59a2.61,2.61,0,0,0,1.33,2.16,3.39,3.39,0,0,1,1.65,2.79v2.17a2.06,2.06,0,0,1-4.06,0Z" transform="translate(-65 -319)"/></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

+1935
View File
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 878.03 168"><defs><style>.a{fill:#8cc63f;}.b{fill:#f2f2f2;}.c{fill:#006837;}</style></defs><title>logo-ver1</title><rect class="a" x="1" y="29" width="877.03" height="139"/><rect width="877.03" height="13"/><path d="M137.54,469.46V397.84L124.4,384.66H112.52L99.38,397.84v71.62H86.66V392.55l20.78-20.61h22l14.42,14.2,14.42-14.2h22.05l20.77,20.61v76.91H188.42V397.84l-13.14-13.18H163.41l-13.15,13.18v71.62Z" transform="translate(-65 -319)"/><path d="M277.89,469.46h-39L218.1,448.85v-56.3l20.78-20.61h39l20.77,20.56v22.26l-20.77,20.78H235.06V422.82H272.8l13.14-13.36V397.8L272.8,384.66H244l-13.15,13.18v45.72L244,457H272.8l19.5-19.71,8.91,9.11Z" transform="translate(-65 -319)"/><path d="M378,469.46H318.16V457h54.7L386,443.5V427.06H318.16V392.5l20.78-20.56h59.79v12.72H344L330.89,397.8v16.54h67.84v34.48Z" transform="translate(-65 -319)"/><path d="M415.69,469.46V326h12.72v53.78l8-7.84h39l20.78,20.61v76.91H483.53V397.84l-13.15-13.18H441.55l-13.14,13.18v71.62Z" transform="translate(-65 -319)"/><path class="b" d="M581.05,446V391.61l-13.15-10H539.07l-13.14,10V446H513.21V387.59L534,371.94h39l20.78,15.65V446Z" transform="translate(-65 -319)"/><path class="b" d="M670.51,446h-39l-20.77-15.67v-17L631.5,397.7h42.83v9.66H636.59l-13.14,10v8.9l13.14,10.2h28.83l13.15-10.17V391.61l-13.15-10H627.69v-9.66h42.82l20.78,15.65v42.76Z" transform="translate(-65 -319)"/><path class="b" d="M759.13,446V391.61L746,381.6H734.11l-13.14,10V446H708.25V387.59L729,371.94h22.05l14.42,10.79,14.41-10.79H802l20.78,15.65V446H810V391.61l-13.14-10H785l-13.14,10V446Z" transform="translate(-65 -319)"/><path class="b" d="M899.47,446h-39l-20.78-15.65V387.59l20.78-15.65h39l20.78,15.62v16.9l-20.78,15.78H856.65v-9.66h37.74l13.14-10.14v-8.86l-13.14-10H865.55l-13.14,10v34.72l13.14,10.17h28.84l19.5-15,8.91,6.92Z" transform="translate(-65 -319)"/><path class="c" d="M513,469.15V457h8.41c7.39,0,12,.83,12,2.17v7.95c0,1.25-4.92,2-12.82,2Zm5.44-.92h2.15c4.92,0,7.39-.36,7.39-1.11v-7.95c0-.83-2.26-1.25-6.57-1.25h-3Z" transform="translate(-65 -319)"/><path class="c" d="M547.72,467.43v-8.71c0-.94,4.62-1.72,10.16-1.72s10.25.78,10.25,1.72v8.71c0,.94-4.61,1.72-10.25,1.72S547.72,468.37,547.72,467.43Zm5.44-8.71v8.71c0,.44,2.15.8,4.72.8s4.82-.36,4.82-.8v-8.71c0-.44-2.16-.8-4.82-.8S553.16,458.28,553.16,458.72Z" transform="translate(-65 -319)"/><path class="c" d="M580.44,467.43v-8.71c0-.94,4.62-1.72,10.15-1.72s10.26.78,10.26,1.72v8.71c0,.94-4.61,1.72-10.26,1.72S580.44,468.37,580.44,467.43Zm5.44-8.71v8.71c0,.44,2.15.8,4.71.8s4.83-.36,4.83-.8v-8.71c0-.44-2.16-.8-4.83-.8S585.88,458.28,585.88,458.72Z" transform="translate(-65 -319)"/><path class="c" d="M640.29,469.15h-5.43v-8L630,464.27h-4.51l-4.82-3.16v8h-5.44V457h4.82l7.7,5.09,7.69-5.09h4.82Z" transform="translate(-65 -319)"/><path class="c" d="M656.7,467.43V465.9h5.44v1.53c0,.44,2.15.8,4.72.8s4.82-.36,4.82-.8v-2.17c0-1.07-3.08-1.56-6.67-2.13-3.9-.63-8.31-1.34-8.31-2.81v-1.6c0-.94,4.62-1.72,10.16-1.72s10.25.78,10.25,1.72v1.44h-5.43v-1.44c0-.44-2.16-.8-4.82-.8s-4.72.36-4.72.8v1.6c0,1.07,3.08,1.57,6.66,2.15,3.9.62,8.31,1.32,8.31,2.79v2.17c0,.94-4.61,1.72-10.25,1.72S656.7,468.37,656.7,467.43Z" transform="translate(-65 -319)"/><path class="c" d="M693.52,469.15V457h8.41c7.39,0,12,.83,12,2.17v7.95c0,1.25-4.93,2-12.83,2Zm5.44-.92h2.15c4.93,0,7.39-.36,7.39-1.11v-7.95c0-.83-2.26-1.25-6.57-1.25h-3Z" transform="translate(-65 -319)"/><path class="c" d="M747.37,469.15l-2.66-2.78H732.5l-2.77,2.78h-5.54L736.29,457h4.62l12,12.15Zm-14-3.7h10.36l-5.23-5.22Z" transform="translate(-65 -319)"/><path class="c" d="M780.4,457h5.54l-9.64,7.24v4.91h-5.44v-4.91L761.12,457h5.53l6.88,5.12Z" transform="translate(-65 -319)"/><path class="c" d="M825.94,469.15V457h8.41c7.39,0,12,.83,12,2.17v7.95c0,1.25-4.92,2-12.82,2Zm5.44-.92h2.15c4.93,0,7.39-.36,7.39-1.11v-7.95c0-.83-2.26-1.25-6.57-1.25h-3Z" transform="translate(-65 -319)"/><path class="c" d="M878.25,469.15l-10-7.55v7.55h-5.44V457h4.93l10,7.55V457h5.44v12.15Z" transform="translate(-65 -319)"/><path class="c" d="M899.59,467.43V465.9H905v1.53c0,.44,2.16.8,4.72.8s4.82-.36,4.82-.8v-2.17c0-1.07-3.08-1.56-6.66-2.13-3.9-.63-8.31-1.34-8.31-2.81v-1.6c0-.94,4.61-1.72,10.15-1.72s10.26.78,10.26,1.72v1.44h-5.44v-1.44c0-.44-2.15-.8-4.82-.8s-4.72.36-4.72.8v1.6c0,1.07,3.08,1.57,6.67,2.15,3.9.62,8.31,1.32,8.31,2.79v2.17c0,.94-4.62,1.72-10.26,1.72S899.59,468.37,899.59,467.43Z" transform="translate(-65 -319)"/></svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

+1946
View File
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 877.06 166"><defs><style>.a{fill:#8cc63f;}.b{fill:#f2f2f2;}</style></defs><title>logo</title><rect class="a" x="0.03" y="27" width="877.03" height="139"/><rect width="877.03" height="13"/><path d="M137.54,469.46V397.84L124.4,384.66H112.52L99.38,397.84v71.62H86.66V392.55l20.78-20.61h22l14.42,14.2,14.42-14.2h22.05l20.77,20.61v76.91H188.42V397.84l-13.14-13.18H163.41l-13.15,13.18v71.62Z" transform="translate(-65.97 -321)"/><path d="M277.89,469.46h-39L218.1,448.85v-56.3l20.78-20.61h39l20.77,20.56v22.26l-20.77,20.78H235.06V422.82H272.8l13.14-13.36V397.8L272.8,384.66H244l-13.15,13.18v45.72L244,457H272.8l19.5-19.71,8.91,9.11Z" transform="translate(-65.97 -321)"/><path d="M378,469.46H318.16V457h54.7L386,443.5V427.06H318.16V392.5l20.78-20.56h59.79v12.72H344L330.89,397.8v16.54h67.84v34.48Z" transform="translate(-65.97 -321)"/><path d="M415.69,469.46V326h12.72v53.78l8-7.84h39l20.78,20.61v76.91H483.53V397.84l-13.15-13.18H441.55l-13.14,13.18v71.62Z" transform="translate(-65.97 -321)"/><path class="b" d="M581.05,469.46V397.84L567.9,384.66H539.07l-13.14,13.18v71.62H513.21V392.55L534,371.94h39l20.78,20.61v76.91Z" transform="translate(-65.97 -321)"/><path class="b" d="M670.51,469.46h-39l-20.77-20.63V426.49l20.77-20.63h42.83v12.72H636.59L623.45,431.8v11.72L636.59,457h28.83l13.15-13.39V397.84l-13.15-13.18H627.69V371.94h42.82l20.78,20.61v56.3Z" transform="translate(-65.97 -321)"/><path class="b" d="M759.13,469.46V397.84L746,384.66H734.11L721,397.84v71.62H708.25V392.55L729,371.94h22.05l14.42,14.2,14.41-14.2H802l20.78,20.61v76.91H810V397.84l-13.14-13.18H785l-13.14,13.18v71.62Z" transform="translate(-65.97 -321)"/><path class="b" d="M899.47,469.46h-39l-20.78-20.61v-56.3l20.78-20.61h39l20.78,20.56v22.26l-20.78,20.78H856.65V422.82h37.74l13.14-13.36V397.8l-13.14-13.14H865.55l-13.14,13.18v45.72L865.55,457h28.84l19.5-19.71,8.91,9.11Z" transform="translate(-65.97 -321)"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

+1
View File
@@ -0,0 +1 @@
Логотип проекта, не облагаемый какими-либо лицензионными обязательствами.
+40 -5
View File
@@ -16,6 +16,7 @@ type MeshnameServer struct {
dnsClient *dns.Client
dnsServer *dns.Server
networks map[string]*net.IPNet
enableMeshIP bool
allowRemote bool
dnsRecordsLock sync.RWMutex
@@ -26,7 +27,7 @@ type MeshnameServer struct {
}
// New is a constructor for MeshnameServer
func New(log *log.Logger, listenAddr string, networks map[string]*net.IPNet, allowRemote bool) *MeshnameServer {
func New(log *log.Logger, listenAddr string, networks map[string]*net.IPNet, enableMeshIP bool, allowRemote bool) *MeshnameServer {
dnsClient := new(dns.Client)
dnsClient.Timeout = 5000000000 // increased 5 seconds timeout
@@ -36,6 +37,7 @@ func New(log *log.Logger, listenAddr string, networks map[string]*net.IPNet, all
dnsRecords: make(map[string][]dns.RR),
networks: networks,
dnsClient: dnsClient,
enableMeshIP: enableMeshIP,
allowRemote: allowRemote,
}
}
@@ -61,13 +63,18 @@ func (s *MeshnameServer) Start() error {
s.dnsServer = &dns.Server{
Addr: s.listenAddr,
Net: "udp",
NotifyStartedFunc: func(){ close(waitStarted) },
NotifyStartedFunc: func() { close(waitStarted) },
}
for tld, subnet := range s.networks {
dns.HandleFunc(tld, s.handleRequest)
dns.HandleFunc(tld, s.handleMeshnameRequest)
s.log.Debugln("Handling:", tld, subnet)
}
go func(){
if s.enableMeshIP {
dns.HandleFunc("meship", s.handleMeshIPRequest)
s.log.Debugln("Handling: meship ::/0")
}
go func() {
if err := s.dnsServer.ListenAndServe(); err != nil {
s.log.Fatalln("MeshnameServer failed to start:", err)
}
@@ -88,7 +95,7 @@ func (s *MeshnameServer) ConfigureDNSRecords(dnsRecords map[string][]dns.RR) {
s.dnsRecordsLock.Unlock()
}
func (s *MeshnameServer) handleRequest(w dns.ResponseWriter, r *dns.Msg) {
func (s *MeshnameServer) handleMeshnameRequest(w dns.ResponseWriter, r *dns.Msg) {
var remoteLookups = make(map[string][]dns.Question)
m := new(dns.Msg)
m.SetReply(r)
@@ -146,6 +153,34 @@ func (s *MeshnameServer) handleRequest(w dns.ResponseWriter, r *dns.Msg) {
}
}
func (s *MeshnameServer) handleMeshIPRequest(w dns.ResponseWriter, r *dns.Msg) {
m := new(dns.Msg)
m.SetReply(r)
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 {
s.log.Debugln("Error: invalid resource requested")
continue
}
if resolvedAddr, err := IPFromDomain(&labels[0]); err == nil {
answer := new(dns.AAAA)
answer.Hdr = dns.RR_Header{Name: q.Name, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 3600}
answer.AAAA = resolvedAddr
m.Answer = append(m.Answer, answer)
} else {
s.log.Debugln(err)
}
}
if err := w.WriteMsg(m); err != nil {
s.log.Debugln("Error writing response:", err)
}
}
func (s *MeshnameServer) isRemoteLookupAllowed(addr net.Addr) bool {
// TODO prefix whitelists ?
if s.allowRemote {