2024-02-10 12:53:55 +00:00

114 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Wyrd DNS ======
^ :!: **Внимание!** ^
| **Проект Wyrd устарел и не рекомендуется к использованию.** Crawler остановлен навсегда, новые домены более не добавляются автоматически ([[https://github.com/Revertron/wyrd/blob/master/README.md|readme.md]]).\\ Автором Wyrd предлагается перейти на использование DNS на основе блокчейна - [[yggdrasil:dns:alfis|ALFIS]]. |
Wyrd - гибкое решение резолва имен в сети Yggdrasil. Резолвит общие доменные зоны и зоны OpenNIC. Также поддерживает собственную зону доменных имен .ygg с автоматической регистрацией. Разработка поддерживается пользователем [[user:rev]]. Является частичным форком краулера сети (автор Arceliar). Написан на языке Python. Репозиторий на Github: https://github.com/Revertron/wyrd. На этой странице приводится русскоязычная версия официальной документации.
==== Введение ====
Если вы используете сеть Yggdrasil, то вы подумали о новом DNS. Не только для преобразования имен в IP-адреса, но и для использования некоторых дополнительных записей, которые нельзя добавить в файл hosts, например CNAME, MX или TXT. И система должна быть надежной: если кто-то зарегистрировал домен, домен должен принадлежать только ему, а не передаваться случайно другому. В настоящее время существует несколько систем «crypto-dns», таких как EmerDNS и т.п., но для их хранения требуется несколько гигабайт дискового пространства. Мы не можем позволить себе это в мобильных телефонах и планшетах. Нам нужен какой-нибудь обычный кеширующий сервер для предоставления DNS-записей, чтобы установить их в мобильном, да и вообще и использовать как обычный DNS.
==== Что такое Wyrd? ====
Wyrd - это скрипт сканера для DNS-сервера BIND, предназначенный для сбора и проверки DNS-записей из данных NodeInfo со всех узлов. Он получает данные: домены, DNS-записи, проверяет «владельца» и сохраняет их в базе данных MySQL (одна простая таблица), затем получает все записи из этой таблицы и передает их на сервер BIND.
==== Как это работает? ====
* Проверяет все узлы (как в сканере map.ygg) на наличие информации о DNS.
* Перебирает найденные домены и проверяет их действительность, зону и владение. Если домен новый, он добавляется, если владелец (IPv6 узла) тот же, он обновляет DNS-записи, если IP не является владельцем, он просто игнорирует домен.
* Когда домен добавляется, узел (представленный IPv6) сохраняется как владелец. Дата и время регистраци (seen_first) также сохраняются.
* Если вам нужно сменить владельца на какой-то другой узел, вы устанавливаете свойство владельца на новый IPv6, и он будет изменен в БД.
* Если вы хотите использовать какой-либо другой узел в качестве «резервного владельца» в случае утери первого узла, вы можете установить свойство отката, и второй узел станет новым владельцем, когда первый пропадет в течение некоторого времени (еще не реализовано).
* В будущей версии каждый домен должен будет быть «куплен» PoW. Простой майнинг одноразового номера, который устранит захват домена или сделает его достаточно сложным.
==== Регистрация ====
Как добавить свой домен к этим серверам? Легко! Просто добавьте необходимые DNS-записи в зону Nodeinfo в файле конфигурации Yggdrasil следующим образом:
=== Один домен ===
<code>
NodeInfo: {
dns: {
domains: [
{
domain: example.ygg
ip: 200:1111:2222:3333:4444:5555:6666:7777
}
]
}
}
</code>
=== Один домен с поддоменами ===
Если вы используете массив records с type и/или TTL, то вам нужно изменить ip на data, потому что может быть также какой-то CNAME, а не только IP.
<code>
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
}
]
}
]
}
}
</code>
=== Все остальные варианты с объяснением ===
<code>
NodeInfo: {
"dns": {
// Вы можете добавить контакт, как это делает WHOIS
"contact": mail@example.com
"domains": [
{
"domain": "test.ygg", // Ваш желаемый домен
"records": [
{
// IP-адрес для разрешения, он может отличаться от адреса вашего узла
"data": "200:149b::b722:fe09:d31:84a4",
"name": "*", // Вы можете пропустить это, по умолчанию значение "@"
"ttl": 300, // Вы можете пропустить это, по умолчанию значение 3600 (один час)
"type": "AAAA" // Это также можно пропустить, по умолчанию будет использовано значение AAAA
}
],
// Теги будут использоваться для ранжирования и поиска в будущем, следите за обновлениями;)
"tags": [
"test",
"dns",
"experiment"
]
},
{
// Вы можете попробовать несколько реальных доменов, но они будут игнорироваться :)
"domain": "google.com",
// Вместо массива "records" вы можете просто ввести IP-адрес,
// type и TTL по умолчанию - AAAA & 3600
"ip": "200:149b::b722:fe09:d31:84a4"
}
]
},
"location": "Somewhere on Earth", // Общие поля
"name": "My meganode!",
}
</code>
В настоящее время поддерживается только этот TLD: **.ygg**. Если сообществу понадобится еще, мы можем добавить.
==== Установка своего инстанса ====
* Вам необходимо установить bind9, python3 и python3-mysqldb. Например: <code> apt-get install bind9 python3 python3-mysqldb </code>
* Клонируйте репозиторий https://github.com/Revertron/wyrd
* Создайте базу данных wyrd, user wyrd и предоставьте этому пользователю все привилегии для этой БД.
* Скопируйте все содержимое каталога bind в /etc/bind/
* Измените пароль в src/config.py
* Запустите его с помощью python3 src/crawler.py
* Было бы хорошо добавить его в cron на каждые 15 минут
==== Синхронизация ====
Вы можете спросить: что если я запустил Wyrd на своем сервере и получил домен от уже проигнорированного скваттера, а не от законного владельца? Хорошо, для этого у меня есть решение, но еще не реализовано. Поскольку у меня есть первый сервер Wyrd, я буду отправлять состояния БД после каждой модификации этого хранилища, и любой, кто запускает его сервер, не будет начинать с нуля. Его сервер будет заполнен всеми текущими записями с первого взгляда. И, что более важно, все изменения в доменах и записях можно легко отслеживать.
===== Ссылки =====
Mastodon: https://zhub.link/@Revertron и @Revertron на [[http://hash.null/yggdrasil_ru/|hash.null]].\\
[[yggdrasil:dns:internal_dns|Статья "Внутрисетевые DNS"]].