Содержание

Wyrd

:!: Attention!
The project is deprecated in favor of blockchain based DNS - ALFIS, the crawler is stopped forever (no more new domains). Readme.md

Decentralized DNS implementation for Yggdrasil

Working servers are here:

Server IP Location
301:2522::53Praha, Czechia
301:2923::53Bratislava, Slovakia
300:4523::53Duesseldorf, Germany
303:8b1a::53Saint Petersburg, Russia

Feel free to use :)

Introduction

If you use Yggdrasil network, then you've thought about new DNS. Not only to convert names to IPs, but use some additional records, that you can't add to hosts file, like CNAME, MX or TXT. And the system should be reliable, if someone got one domain, it must maintain it's owner, and not give it to some second guy. There are some «crypto-dns» systems, like EmerDNS and alike, but they need you to have some gigabytes of HDD-space to store that blockchain. We cannot afford this in mobile phones and tablets. Then, we need to use some ordinary caching server to provide those DNS-records, to set them in mobile and use like ordinary DNS.

What is Wyrd?

Wyrd is a crawler script for BIND DNS-server, to collect and validate DNS-records from NodeInfo data from all nodes. It gets data - domains, DNS-records, checks for «owner», and stores them in MySQL database (one simple table), then gets all records from that table and feeds it to BIND server. How it works?

How to add your domain to those servers? Easy! Just add needed DNS-records to your zoneinfo like this:

One domain

Althought it has a lot of different brackets, but it is simple

NodeInfo: {
  dns: {
    domains: [
      {
        domain: example.ygg
        ip: 200:1111:2222:3333:4444:5555:6666:7777
      }
    ]
  }
}

One domain with subdomains

If you use the records array with type and/or ttl, then you need to change ip to data, because there may be some CNAME also, not only IP.

NodeInfo: {
  dns: {
    domains: [
      {
        domain: example.ygg
        records: [
            {
                data: 200:1111:2222:3333:4444:5555:6666:7777
                name: @
                ttl: 300
                type: AAAA
            }
            {
                data: 200:1111:2222:3333:4444:5555:6666:7778
                name: ftp
                ttl: 600
                type: AAAA
            }
        ]
      }
    ]
  }
}

All other variants with explanation

"nodeinfo": {
    "dns": {
      // You may add some contact, just how WHOIS does
      "contact": mail@example.com
      "domains": [
        {
          "domain": "test.ygg", // Your desired domain
          "records": [
            {
              // The IP address to resolve to, it may be different from your node's address
              "data": "200:149b::b722:fe09:d31:84a4",
              "name": "*", // You can omit it, default "@" will be used
              "ttl": 300, // You can omit it too, default 3600 (one hour) will be used
              "type": "AAAA" // And this one can be omited, AAAA will be used as default
            }
          ],
          // Tags will be used for ranking and searching in the future, stay tuned ;)
          "tags": [
            "test",
            "dns",
            "experiment"
          ]
        },
        {
          // You can try some real domains, but they will be ignored :)
          "domain": "google.com",
          // Instead of "records" array you can just enter an IP address,
          // type and TTL will be default - AAAA & 3600
          "ip": "200:149b::b722:fe09:d31:84a4"
        }
      ]
    },
    "location": "Somewhere on Earth", // The common fields
    "name": "My meganode!",
  }

Currently only this TLD is supported: .ygg. If the community will need some more, we can add some.

Links

Official Wyrd's repository on GitHub: https://github.com/Revertron/wyrd