NTK_RFC 0009
Scattered Name Service Disgregation
Распределенная служба имен
В этом документе описана распределенная служба имен (Scattered Name Service Disgregation) – расширение протокола ANDNA. Текст будет включен в окончательную документацию, а сейчас в него можно вносить правки, связавшись с разработчиками.
SNSD
Распределенная служба имен SNSD является эквивалентом ANDNA для записи SRV Record в Internet DNS1, определенной в [1] и кратко описанной в [2].
SNSD отличается от SRV Record и имеет свои уникальные свойства.
С помощью SNSD можно связать адреса IP и имена хостов с другим hostname.
Каждая назначенная запись имеет номер службы (service number), что позволяет группировать адреса IP и hostname с одинаковым номером в массив. При запросе распознавания (resolution request) клиент будет указывать номер, поэтому он получит запись для указанного номера, связанного с hostname.
Например, узел X имеет зарегистрированное имя хоста angelica и по умолчанию для этого имени выделен IP-адрес 1.2.3.4. X связывает имя хоста depausceve со службой http (номер 80) для имени хоста angelica, а также адрес 11.22.33.44 со службой ftp (номер 21) хоста angelica.
Когда Y обычным путем распознает адрес angelica, он получает 1.2.3.4, но при распознавании адреса из web-браузера он будет запрашивать запись, связанную со службой http, и запрос будет возвращать depausceve. Браузер будет распознавать адрес по имени depausceve и получит доступ к серверу. Когда клиент ftp хоста Y будет пытаться распознать адрес angelica, он получит 11.22.33.44. Если Y попытается распознать адрес для не связанной службы, он получит основной адрес хоста 1.2.3.4.
Узел, связанный с записью SNSD, называется узлом SNSD (SNSD node). В приведенном примере такими узлами являются depausceve и 11.22.33.44.
Узел, который регистрирует записи и сохраняет регистрацию основного имени хоста, всегда называют регистрирующим узлом (register node), но может также использоваться термин Zero SNSD node — фактически это соответствует наиболее общей записи SNSD для службы с номером 0.
Отметим, что SNSD полностью отменяет NTK_RFC 0004 [3].
Служба, приоритет, вес
Номер службы
Номер службы указывает область действия записи SNSD. Адрес IP, связанный со службой номер x, будет возвращаться только в ответ на запросы распознавания, содержащие этот номер. Номер службы – это номер порта, с которым связана соответствующая служба. Номера портов можно узнать из файла /etc/services. Служба с номером 0 соответствует обычной записи ANDNA и в ответ на базовый запрос распознавания будет возвращаться соответствующий адрес IP.
Приоритет
Запись SNSD имеет также значение приоритета, которое определяет приоритет данной записи среди других записей внутри массива службы. Клиент будет взаимодействовать с первым узлом SNSD, имеющим наивысший приоритет, и только при недоступности этого узла станет обращаться к узлам с меньшим приоритетом.
Вес
Значение веса, связанное с записью SNSD, служит для выбора среди нескольких записей с одинаковым приоритетом. Клиент запрашивает у ANDNA распознавание и получает, например, 8 разных записей. Первая запись, используемая клиентом, выбирается псевдослучайным способом. Каждая запись может быть выбрана с вероятностью, пропорциональной ее весу. Отметим, что в случае одинакового приоритета у всех записей выбор становится полностью случайным.
Для запрета использования записи можно задать нулевой вес. Значения веса должны быть меньше 128.
Регистрация SNSD
Метод регистрации записи SNSD похож на описанный в [3]. С одной службой можно связать до 16 записей. Максимальное число зарегистрированных записей составляет 256.
Регистрация записей SNSD выполняется одним узлом register_node. Узел hash_node, получающий регистрацию, не будет связываться с counter_node, поскольку имя хоста уже зарегистрировано и его не нужно проверять. Остается проверить лишь действительность подписи.
Регистрирующий узел может также выбрать необязательную функцию SNSD, чтобы убедиться в том, что имя хоста SNSD всегда связано с доверенной машиной. В этом случае узлу register_node нужен открытый ключ ANDNA узла SNSD для передачи узлу периодических запросов. Если узел не отвечает, register_node будет передавать ANDNA для удаления соответствующей записи SNSD.
Регистрация записей SNSD для имен хостов, которые лишь помещены в очередь andna_queue, отвергается. Практические действия по регистрации записи SNSD показаны ниже.
* Изменение файла /etc/netsukuku/snsd_nodes. {{{ register_node# cd /etc/netsukuku/ register_node# cat snsd_nodes # # Файл узлов SNSD # # В формате # hostname:snsd_hostname:service:priority:weight[:pub_key_file] # или # hostname:snsd_ip:service:priority:weight[:pub_key_file] # # Параметр pub_key_file является необязательным. При его наличии NetsukukuD будет # периодически проверять snsd_hostname и контролировать принадлежность имени к # одной машине. При смене машины соответствующая запись snsd будет удаляться. # depausceve:pippo:http:1 depausceve:1.2.3.4:21:0 angelica:frenzu:ssh:1:/etc/netsukuku/snsd/frenzu.pubk register_node# register_node# scp frenzu:/usr/share/andna_lcl_keyring snsd/frenzu.pubk }}} * Передача сигнала SIGHUP демону NetsukukuD на регистрирующем узле. {{{ register_node# killall -HUP ntkd # или register_node# rc.ntk reload }}}
Нулевое значение SNSD IP
Основной адрес IP, связанный с обычным hostname, имеет по умолчанию приведенные ниже значения.
{{{ IP = register_node IP # Это значение нельзя изменить service = 0 priority = 16 weight = 1 }}}
Можно связать другие записи SNSD со службой 0, но не разрешается менять основной адрес IP, в качестве которого может служить только IP-адрес узла register_node. Хотя нет возможности установить другую привязку для основного адреса IP, его можно «отключить», установив вес 0.
Строка, применяемая для смены значений веса и приоритета основного IP, имеет вид
{{{ hostname:hostname:0:priority:weight # Например, register_node# echo depausceve:depausceve:0:23:12 >> /etc/netsukuku/snsd_nodes }}}
Цепочка SNSD
Поскольку для нулевой записи можно задать разные псевдонимы и резервные адреса IP, можно создавать цепочки SNSD. Например,
{{{ depausceve registers: depausceve:80 --> pippo pippo registers: pippo:0 --> frenzu frenzu registers: frenzu:0 --> angelica }}}
Однако цепочки SNSD игнорируются и пригодным считается лишь первое преобразование. Поскольку для службы 0 всегда имеется основной адрес IP, распознавание выполняется всегда. В приведенном случае (depausceve:80 –> pippo:0) распознавание будет возвращать основной IP-адрес pippo:0.
Отклик на запрос преобразования для службы 0 всегда возвращает адреса IP, а не имена хостов.
[1] http://www.ietf.org/rfc/rfc2782.txt
[2] http://en.wikipedia.org/wiki/SRV_record
[3] Mail Exchange request, http://netsukuku.freaknet.org/main_doc/ntk_rfc/Ntk_MX_request
Перевод на русский язык
Николай Малых
1Domain Name System – служба доменных имен.