Назад | Перейти на главную страницу

Как управлять несколькими пользователями, пытающимися добавить один и тот же домен к моим DNS-серверам

Я разрабатываю бесплатную службу DNS и не могу полностью решить ситуацию, когда два или более клиентов пытаются добавить один и тот же домен (почти одновременно).

Вот несколько решений для этой ситуации, но ни одно из них не кажется хорошим или жизнеспособным.


Решение 1:

Используйте разные пары серверов имен для каждого клиента

Создание нескольких и разных ns (например, ns1, ns2 .. ns49, ns50, ns51 ..) позволяет мне использовать разные пары серверов с разными клиентами, пытающимися добавить один и тот же домен.

Настоящий владелец будет использовать только свою пару в регистраторе домена (например, ns8 и ns9), поэтому только его записи будут приниматься и распространяться по всему Интернету.

Проблема с решением 1:

Уязвим к массовой атаке

Если злоумышленник создаст действительно большое количество учетных записей, будет невозможно иметь эквивалентное количество пар, если все эти учетные записи попытаются добавить один и тот же домен.


Решение 2:

Разрешить только одной учетной записи пользователя использовать домен

Если один пользователь уже добавил определенный домен и правильно настроил его в своем регистраторе доменов, никакая другая учетная запись не сможет добавить тот же домен.

Проблема с решением 2:

Время благодати

Проверка добавленного домена может занять несколько часов (поправьте меня, если я ошибаюсь). Это потребовало бы от меня предоставления «льготного периода», чтобы позволить каждому недавно добавленному домену оставаться «непроверенным» до тех пор, пока мы не сможем подтвердить его через соответствующего регистратора доменов.

Кроме того, в течение этого льготного периода никакая другая учетная запись не сможет добавить тот же домен, если мы не используем решение 1 (но помните, что № 1 имеет уязвимость).


Как бесплатные (или платные) услуги DSN решают эту проблему? Каковы их подходы (поскольку любой пользователь, очевидно, может добавить любой домен без ограничений)?

Edit: о дубликате

Есть небольшая разница между моим вопросом и Эра первая. Я провайдер, а не заказчик. И вопрос Era только указывает на проблему глазами покупателя.

Кроме того, даже @Jacob из DigitalOcean заявил, что они используют подход «первым пришел - первым обслужен», которого я пытаюсь избежать, и это причина для существования моего вопроса.

Решение 1 может работать для аутентификации пользователя, контролирующего домен. В своем вопросе вы, похоже, наложили на себя некоторые ограничения, возможно, из-за каких-то недоразумений или, может быть, потому, что вы хотите, чтобы это работало без аутентификации пользователя, контролирующего домен.

  • Вы не должны использовать только два DNS-сервера. Два - минимум, но я бы пошел выше. Точное количество используемых DNS-серверов - вопрос личного мнения. Я считаю, что четыре - хороший выбор. При большем количестве DNS-серверов, используемых каждым доменом, у вас будет больше возможных комбинаций.
  • Записи NS, как вы уже заметили, указывают на имена. Возможно, несколько из этих имен указывают на одни и те же IP-адреса, а это значит, что у вас нет недостатка в именах.
  • Вашему сервису нужен как IPv4, так и IPv6. С IPv6 у вас тоже нет недостатка в IP-адресах. Вполне возможно, чтобы каждый сервер прослушивал достаточное количество IPv6-адресов, чтобы у вас мог быть уникальный IP-адрес для каждого из ваших пользователей.

Любое из трех приведенных выше наблюдений должно заполнить пробелы в предложенном вами решении 1, чтобы оно работало, при условии, что вы действительно аутентифицируете контроль пользователя над доменом.

Если вам нужно решение, которое работает без предварительной аутентификации пользователем своего контроля над доменом, я могу только предложить вам полагаться на IPv6.

Гибридное решение, вероятно, могло бы обеспечить плавный поток для пользователей. Я бы спроектировал его следующим образом:

  • Назначьте адресное пространство / 64 каждому из ваших DNS-серверов.
  • Назначьте каждому пользователю 64-битный идентификатор интерфейса.
  • Назначьте 3 имени хоста каждому DNS-серверу плюс пользовательскую комбинацию (одно только v4, одно только v6 и один двойной стек). Имя хоста может, например, выглядеть как kasperd-ns1-ds.example.com.

Пользователь может создать зону с любым именем. Он будет немедленно доступен на IPv6-адресах этого пользователя.

Обслуживание определенной зоны на IPv4-адресах (которые обязательно совместно используются пользователями) будет работать в порядке очереди. Но любой последующий пользователь может подтвердить контроль над доменом, указав в записях NS домена любое из имен хостов, которые вы назначили этому пользователю. Аутентифицированный контроль над доменом превосходит принцип очереди.