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

Есть ли разница между @ и * при использовании BIND?

При настройке зоны BIND DNS я часто задаюсь вопросом, почему существуют оба @ и * чтобы указать псевдоним для имени зоны. Есть ли разница между ними?

@ переводится как доменное имя зоны, на которую оно также ссылается. Это использовалось в файле зоны для example.com, затем @ будет равно example.com. С другой стороны * это подстановочный знак, означающий что угодно.

Вот пример того, как я использую эти два символа в файле зоны:

; SOA Record
EXAMPLE.NET.    3600    IN  SOA ns1.example.com.    dns.example.net. (
                2010031000
                28800
                7200
                604800
                86400
                )

; A Records
@   3600    IN  A   192.168.1.212
@   3600    IN  A   192.168.1.214

; CNAME Records
www 3600    IN  CNAME   @
*   3600    IN  CNAME   @

; NS Records
@   3600    IN  NS  ns1.example.com
@   3600    IN  NS  ns2.example.com

В этом примере я определяю зону для EXAMPLE.NET, используя DNS-серверы EXAMPLE.COM. У меня есть 2 IP-адреса, которые я назначаю записям A для домена, поэтому EXAMPLE.NET указывает как на 192.168.1.212, так и на 192.168.1.214. Затем я определяю пару записей CNAME, www и волшебный * которые оба указывают на @ или как это интерпретируется EXAMPLE.NET. Также есть записи NS, использующие @ символ вместо того, чтобы печатать EXAMPLE.NET.

Таким образом, вы можете перевести этот файл зоны как:

; SOA Record
EXAMPLE.NET.    3600    IN  SOA ns1.example.com.    dns.example.net. (
                2010031000
                28800
                7200
                604800
                86400
                )

; A Records
EXAMPLE.NET.    3600    IN  A   192.168.1.212
EXAMPLE.NET.    3600    IN  A   192.168.1.214

; CNAME Records
www 3600    IN  CNAME   EXAMPLE.NET.
*   3600    IN  CNAME   EXAMPLE.NET.

; NS Records
EXAMPLE.NET.    3600    IN  NS  ns1.example.com
EXAMPLE.NET.    3600    IN  NS  ns2.example.com

Обе версии идентичны. В @ просто становится EXAMPLE.NET и * означает все, что вы могли придумать. Используя * подстановочный знак, вы можете настроить веб-сервер для домена, а затем настроить несколько виртуальных хостов в этом домене без повторного изменения DNS. host1.example.net, blah.example.net и doiexist.example.net будут указывать на одно и то же местоположение, даже если они не указаны специально в файле зоны из-за * подстановочный знак.

В дополнение к тому, что сказал Билл Вайс, я хотел бы отметить, что * означает "все возможные субдомены / метки, кроме уже имеющихся", это означает, что я могу иметь

$ORIGIN EXAMPLE.NET.
a IN A 1.2.3.4
b IN A 4.3.2.1
* IN A 8.8.8.8

и a.EXAMPLE.NET вернет 1.2.3.4 так же, как c.EXAMPLE.NET вернет 8.8.8.8

Также a.a.a.c.EXAMPLE.NET также вернет 8.8.8.8, что делает записи с подстановочными знаками немного беспорядочными. Вы можете потенциально использовать весь кеш рекурсивного сервера имен, перебирая эти имена.

* не является псевдонимом для имени зоны. Это означает «все поддомены».

Думайте о @ как о макросе, который раскрывается во время синтаксического анализа файлов зоны, а * - это оператор, который «подбирает» (сопоставляет) все, что не соответствует ни одной из обычных записей.

Запись * позволяет настроить DNS для возврата указанных записей для запросов, которые в противном случае получили бы ответ «NXDOMAIN» (несуществующий).

«@» расширяется до текущего $ ORIGIN согласно RFC 1035. Я чаще всего видел это в записи SOA в верхней части файла зоны.

Я никогда не видел, чтобы '*' использовалось ни для чего, кроме как для соответствия чему-либо, ранее не совпавшему в записях RR (также известных как записи с подстановочными знаками).