DNS-запись с подстановочным знаком
DNS -запись с подстановочными знаками — это запись в зоне DNS , которая будет соответствовать запросам несуществующих доменных имен. DNS-запись с подстановочными знаками указывается с помощью *
как крайняя левая метка (часть) доменного имени, например *.example.com
. Точные правила соответствия подстановочного знака указаны в разделе RFC 1034 , но правила не являются ни интуитивно понятными, ни четко определенными. Это привело к несовместимым реализациям и неожиданным результатам при их использовании.
Определения подстановочных знаков DNS
[ редактировать ]DNS-запись с подстановочными знаками в файле зоны выглядит примерно так:
*.example.com. 3600 IN MX 10 host1.example.com.
Эта запись DNS с подстановочными знаками приведет к поиску DNS по доменным именам, заканчивающимся на example.com
которые не существуют для синтеза записей MX. Итак, поиск записи MX для somerandomname.example.com
вернет запись MX, указывающую на host1.example.com
.
Подстановочные знаки в DNS гораздо более ограничены, чем другие подстановочные знаки, используемые в других компьютерных системах. Записи DNS с подстановочными знаками имеют одну *
(звездочка) в качестве крайней левой метки DNS , например *.example.com
. Звездочки в других местах домена не будут работать как подстановочные знаки, поэтому ни *abc.example.com
ни abc.*.example.com
работают как DNS-записи с подстановочными знаками. Более того, подстановочный знак сопоставляется только тогда, когда домен не существует, а не только тогда, когда нет совпадающих записей запрошенного типа. Даже определение «не существует», определенное в алгоритме поиска Раздел 4.3.3 RFC 1034 может привести к тому, что подстановочный знак не будет соответствовать случаям, которые можно было бы ожидать от других типов подстановочных знаков.
Исходное определение поведения подстановочного знака DNS указано в RFC 1034, разделы 4.3.2 и 4.3.3, но только косвенно, за счет определенных шагов алгоритма поиска, и в результате правила не являются ни интуитивно понятными, ни четко определенными. В результате, 20 лет спустя, RFC 4592 «Роль подстановочных знаков в системе доменных имен» был написан для разъяснения правил.
Цитировать RFC 1912 : «Распространенной ошибкой является мнение, что подстановочный знак MX для зоны будет применяться ко всем хостам в зоне. Подстановочный знак MX будет применяться только к именам в зоне, которые вообще не указаны в DNS». То есть, если для *.example.com
и запись A (но без записи MX) для www.example.com
, правильный ответ (согласно RFC 1034 ) на запрос MX для www.example.com
«нет ошибок, но нет данных»; это контрастирует с возможно ожидаемым ответом записи MX, прикрепленной к *.example.com
.
Пример использования
[ редактировать ]Следующий пример взят из RFC 4592 , раздел 2.2.1, и полезен для пояснения того, как работают подстановочные знаки.
Допустим, есть зона DNS со следующими записями ресурсов:
$ORIGIN example.
example. 3600 IN SOA <SOA RDATA>
example. 3600 NS ns.example.com.
example. 3600 NS ns.example.net.
*.example. 3600 TXT "this is a wildcard"
*.example. 3600 MX 10 host1.example.
sub.*.example. 3600 TXT "this is not a wildcard"
host1.example. 3600 A 192.0.2.1
_ssh._tcp.host1.example. 3600 SRV <SRV RDATA>
_ssh._tcp.host2.example. 3600 SRV <SRV RDATA>
subdel.example. 3600 NS ns.example.com.
subdel.example. 3600 NS ns.example.net.
Полезно взглянуть на доменные имена в древовидной структуре:
example ├─ * │ └─ sub ├─ host1 │ └─ _tcp │ └─ _ssh ├─ host2 │ └─ _tcp │ └─ _ssh └─ subdel
Следующие ответы будут синтезированы из одного из подстановочных знаков в зоне:
Запрашиваемый домен | Запрошенный тип RR | Результаты |
---|---|---|
host3.example.
|
МХ | Ответом будет "host3.example. IN MX..." |
host3.example.
|
А | Ответ будет отражать «нет ошибок, но нет данных», поскольку не существует записи ресурса «А» (RR), установленной в *.example .
|
foo.bar.example.
|
ТЕКСТ | Ответом будет «foo.bar.example. IN TXT…», потому что bar.example. не существует, но подстановочный знак существует.
|
Следующие ответы не будут синтезированы из каких-либо подстановочных знаков в зоне:
Запрашиваемый домен | Запрошенный тип RR | Результаты |
---|---|---|
host1.example.
|
МХ | Ни один подстановочный знак не будет соответствовать, потому что host1.example. существует. Вместо этого вы получите ответ «нет ошибок, но нет данных». Запись MX с подстановочными знаками не предоставляет записи MX для доменов, которые иначе существуют.
|
sub.*.example.
|
МХ | Ни один подстановочный знак не будет соответствовать, потому что sub.*.example. существует. Домен sub.*.example. никогда не будет действовать как подстановочный знак, даже если в нем есть звездочка.
|
_telnet._tcp.host1.example.
|
СРВ | Ни один подстановочный знак не будет соответствовать, потому что _tcp.host1.example. существует (без данных).
|
host.subdel.example.
|
А | Ни один подстановочный знак не будет соответствовать, потому что subdel.example. существует и является разрезом зоны, помещая host.subdel.example. в другую зону DNS . Даже если host.subdel.example. не существует в другой зоне, подстановочный знак из родительской зоны использоваться не будет.
|
ghost.*.example.
|
МХ | Ни один подстановочный знак не будет соответствовать, потому что *.example. существует, это домен с подстановочными знаками, но он все еще существует.
|
Последний пример подчеркивает одно распространенное заблуждение относительно подстановочных знаков. Подстановочный знак «блокирует себя» в том смысле, что подстановочный знак не соответствует собственным поддоменам. То есть, *.example.
не соответствует всем именам в example.
зона; он не соответствует именам ниже *.example.
. Чтобы скрыть имена под *.example.
, необходимо другое доменное имя с подстановочным знаком — *.*.example.
— который охватывает все, кроме собственных поддоменов.
На практике
[ редактировать ]Цитировать из RFC 4592 , многие реализации DNS по-разному расходятся с исходным определением подстановочных знаков. Некоторые из вариаций включают в себя:
- С помощью djbdns , помимо проверки подстановочных знаков на текущем уровне, сервер проверяет наличие подстановочных знаков во всех включающих супердоменах, вплоть до корня. [ нужна ссылка ] В приведенных выше примерах запрос на
_telnet._tcp.host1.example
для записи MX будет соответствовать подстановочному знаку, несмотря на домен_tcp.host1.example
существующий. - DNS-сервер Microsoft (если он настроен для этого) [1] ) и MaraDNS (по умолчанию) имеют подстановочные знаки, а также соответствуют всем запросам на пустые наборы записей ресурсов; т.е. доменные имена, для которых нет записей нужного типа . В приведенных выше примерах запрос на
sub.*.example
для записи MX будет соответствовать*.example
, несмотря наsub.*.example
явно существует только с записью TXT .
Зарегистрированные лица
[ редактировать ]Домены с подстановочными знаками широко используются веб-сайтами блогов, которые позволяют пользователям создавать поддомены по требованию; например, такие сайты, как WordPress или Blogspot . Другое популярное использование - веб-сайты Free Dynamic DNS , которые позволяют пользователям создавать DNS-имя, которое меняется в соответствии с IP-адресом их хоста, поскольку IP-адрес периодически меняется DHCP-сервером их интернет-провайдера.
Новые домены верхнего уровня
[ редактировать ]В новых gTLD запрещено публиковать подстановочные знаки (или использовать эквивалентные механизмы серверов имен) согласно спецификации 6 о соглашения ICANN базовом реестре новых gTLD. ICANN Однако структура управления конфликтами имен ( PDF ) прямо требует, чтобы новые gTLD публиковали (в течение как минимум 90 дней) специальные подстановочные знаки MX, SRV, TXT и 127.0.53.53 A, которые предупреждают о потенциальных конфликтах имен из-за использования относительных доменные имена с путями поиска доменов .
Реестры/провайдеры Интернета
[ редактировать ]Несколько регистраторов доменных имен в разное время вводили подстановочные записи для доменов верхнего уровня , чтобы обеспечить платформу для рекламы, в первую очередь VeriSign для .com и .net с ее (сейчас удаленной) системой Site Finder . также В домене верхнего уровня .museum была запись подстановочного знака, которая сейчас удалена. По состоянию на март 2018 г. [update], доменами верхнего уровня, использующими запись A с подстановочным знаком (отличную от 127.0.53.53), являются .fm , .la , .ph , .pw , .vg и .ws . Интернационализированные грузинских TLD .中国 (.xn--fiqs8s или .xn--fiqz9s для «Китай») и .გე (.xn--узел для букв для грузинского кода страны «GE») также имеют записи с подстановочными знаками A. *.中国
подстановочный знак разрешает ibaidu.com
(помечен Chrome как небезопасный) и *.გე
подстановочный знак соответствует веб-сайту домена верхнего уровня .ge .
Интернет-провайдеры также стали обычным явлением синтезировать записи адресов на предмет опечаток для одного и того же человека, практика, называемая «объемным» тайпсквоттингом , но это не настоящие подстановочные знаки, а скорее модифицированные кэширующие серверы имен. [2]
Игнорирование подстановочных знаков от других
[ редактировать ]Консорциум программного обеспечения Интернета выпустил версию программного обеспечения BIND DNS, которую можно настроить для фильтрации DNS-записей с подстановочными знаками из определенных доменов. Различные разработчики выпустили программные исправления для BIND и djbdns .
Другие программы DNS-сервера последовали этому примеру, предоставив возможность игнорировать записи DNS с подстановочными знаками в соответствии с настройками.