Я разрабатываю бесплатную службу DNS и не могу полностью решить ситуацию, когда два или более клиентов пытаются добавить один и тот же домен (почти одновременно).
Вот несколько решений для этой ситуации, но ни одно из них не кажется хорошим или жизнеспособным.
Решение 1:
Используйте разные пары серверов имен для каждого клиента
Создание нескольких и разных ns (например, ns1, ns2 .. ns49, ns50, ns51 ..) позволяет мне использовать разные пары серверов с разными клиентами, пытающимися добавить один и тот же домен.
Настоящий владелец будет использовать только свою пару в регистраторе домена (например, ns8 и ns9), поэтому только его записи будут приниматься и распространяться по всему Интернету.
Проблема с решением 1:
Уязвим к массовой атаке
Если злоумышленник создаст действительно большое количество учетных записей, будет невозможно иметь эквивалентное количество пар, если все эти учетные записи попытаются добавить один и тот же домен.
Решение 2:
Разрешить только одной учетной записи пользователя использовать домен
Если один пользователь уже добавил определенный домен и правильно настроил его в своем регистраторе доменов, никакая другая учетная запись не сможет добавить тот же домен.
Проблема с решением 2:
Время благодати
Проверка добавленного домена может занять несколько часов (поправьте меня, если я ошибаюсь). Это потребовало бы от меня предоставления «льготного периода», чтобы позволить каждому недавно добавленному домену оставаться «непроверенным» до тех пор, пока мы не сможем подтвердить его через соответствующего регистратора доменов.
Кроме того, в течение этого льготного периода никакая другая учетная запись не сможет добавить тот же домен, если мы не используем решение 1 (но помните, что № 1 имеет уязвимость).
Как бесплатные (или платные) услуги DSN решают эту проблему? Каковы их подходы (поскольку любой пользователь, очевидно, может добавить любой домен без ограничений)?
Edit: о дубликате
Есть небольшая разница между моим вопросом и Эра первая. Я провайдер, а не заказчик. И вопрос Era только указывает на проблему глазами покупателя.
Кроме того, даже @Jacob из DigitalOcean заявил, что они используют подход «первым пришел - первым обслужен», которого я пытаюсь избежать, и это причина для существования моего вопроса.
Решение 1 может работать для аутентификации пользователя, контролирующего домен. В своем вопросе вы, похоже, наложили на себя некоторые ограничения, возможно, из-за каких-то недоразумений или, может быть, потому, что вы хотите, чтобы это работало без аутентификации пользователя, контролирующего домен.
Любое из трех приведенных выше наблюдений должно заполнить пробелы в предложенном вами решении 1, чтобы оно работало, при условии, что вы действительно аутентифицируете контроль пользователя над доменом.
Если вам нужно решение, которое работает без предварительной аутентификации пользователем своего контроля над доменом, я могу только предложить вам полагаться на IPv6.
Гибридное решение, вероятно, могло бы обеспечить плавный поток для пользователей. Я бы спроектировал его следующим образом:
kasperd-ns1-ds.example.com
.Пользователь может создать зону с любым именем. Он будет немедленно доступен на IPv6-адресах этого пользователя.
Обслуживание определенной зоны на IPv4-адресах (которые обязательно совместно используются пользователями) будет работать в порядке очереди. Но любой последующий пользователь может подтвердить контроль над доменом, указав в записях NS домена любое из имен хостов, которые вы назначили этому пользователю. Аутентифицированный контроль над доменом превосходит принцип очереди.