4

Этот вопрос приходит из этой темы. Когда я делаю это, я получаю оставшиеся секунды до истечения срока действия записи A в запрашиваемом сервере имен:

dig stackexchange.com

Однако, если я сделаю это, я получу значения TTL:

dig any stackexchange.com 

Итак, я не понимаю, почему, когда я dig any stackexchange.com я получаю все значения TTL, как если бы я задал авторский вопрос, когда я фактически сделал рекурсивный запрос.

2 ответа2

6

Короче говоря, оба запроса, которые вы упомянули в вопросе, являются неавторизованными.

Записи DNS для домена могут быть запрошены с кэширующего DNS-сервера или с официального DNS-сервера. Таким образом, если вы хотите запросить DNS-сервер с кэшированием, вы можете указать IP-адрес DNS или, если он не указан, будет выбран DNS-сервер по умолчанию, настроенный в /etc/resolv.conf .

Неавторизованный запрос

$ dig stackexchange.com

или же

$ dig stackexchange.com @8.8.8.8

В обоих случаях запрос возвращает неавторизованный ответ, поскольку DNS вашего интернет-провайдера или открытый DNS Google (8.8.8.8) не являются полномочными для домена stackexchange.com . Когда вы запросили неавторизованный сервер имен, значение TTL, которое он предоставляет, будет уменьшаться при каждом запросе. Как только значение TTL истечет, кэширующий сервер имен будет запрашивать полномочный DNS-сервер.

Авторитетный запрос

Таким образом, чтобы получить авторитетный ответ, вам нужно запросить запись с авторитетного DNS-сервера, который можно найти с помощью метода ниже.

$ dig ns stackexchange.com
       ...
;; ANSWER SECTION:
stackexchange.com.  84894   IN  NS  cf-dns02.stackexchange.com.
stackexchange.com.  84894   IN  NS  cf-dns01.stackexchange.com.
       ...

РАЗДЕЛ ОТВЕТА предоставляет официальные серверы имен для домена stackexchange.com поэтому, если нам нужно получить достоверный ответ,

$ dig stackexchange.com @cf-dns01.stackexchange.com.

Хотя мы запрашиваем авторитетный DNS-сервер, значения TTL не изменятся, поскольку эти серверы имен являются основным источником информации, и срок их действия не истекает до тех пор, пока администратор не изменит их.

Как работает ЛЮБАЯ запись

ЛЮБАЯ запись похожа на шаблон, вы можете использовать ее для получения всех записей, которые кэшируются / хранятся на DNS-сервере. Например, я запросил stackexchange.com для ЛЮБОЙ записи, и мой DNS-сервер по умолчанию отвечает, как показано ниже.

$ dig any stackexchange.com
    ....
;; ANSWER SECTION:
stackexchange.com.  86350   IN  SOA cf-dns01.stackexchange.com. dns.cloudflare.com. 2017456480 10000 2400 604800 3600
stackexchange.com.  176 IN  A   198.252.206.140
stackexchange.com.  84338   IN  NS  cf-dns01.stackexchange.com.
stackexchange.com.  84338   IN  NS  cf-dns02.stackexchange.com.
    ....

Здесь вы можете видеть, что ответ содержит только информацию о записи SOA , A и NS . Но на самом деле существует больше записей для stackexchange.com которые не кэшируются на моем DNS-сервере по умолчанию, поскольку я не запрашивал их.

Теперь я запрашиваю запись MX на DNS-сервере по умолчанию, и ответ

$ dig MX stackexchange.com
    ....
;; ANSWER SECTION:
stackexchange.com.  300 IN  MX  10 aspmx3.googlemail.com.
stackexchange.com.  300 IN  MX  5 alt2.aspmx.l.google.com.
stackexchange.com.  300 IN  MX  5 alt1.aspmx.l.google.com.
stackexchange.com.  300 IN  MX  10 aspmx2.googlemail.com.
stackexchange.com.  300 IN  MX  1 aspmx.l.google.com.
    ....

Теперь я снова запрашиваю ANY запись, и теперь вы можете видеть, что запрос ANY также возвращает записи MX . И поэтому ANY запись будет содержать записи, которые кэшируются только на вашем сервере имен по умолчанию.

$ dig any stackexchange.com
     ....
;; ANSWER SECTION:
stackexchange.com.  298 IN  MX  5 alt1.aspmx.l.google.com.
stackexchange.com.  298 IN  MX  10 aspmx2.googlemail.com.
stackexchange.com.  86084   IN  NS  cf-dns01.stackexchange.com.
stackexchange.com.  298 IN  MX  10 aspmx3.googlemail.com.
stackexchange.com.  298 IN  MX  1 aspmx.l.google.com.
stackexchange.com.  298 IN  MX  5 alt2.aspmx.l.google.com.
stackexchange.com.  86084   IN  NS  cf-dns02.stackexchange.com.
stackexchange.com.  243 IN  A   198.252.206.140
stackexchange.com.  86343   IN  SOA cf-dns01.stackexchange.com. dns.cloudflare.com. 2017456480 10000 2400 604800 3600
     ....

И, как вы можете видеть, значения TTL меняются для неавторизованных ответов.

1

Вы не понимаете поле TTL в DNS-запросах. TTL является для клиента показателем того, как долго он должен кэшировать результаты, прежде чем повторно запрашивать сервер имен. Если вы не обновите свой DNS-сервер другим значением для TTL, ответ всегда будет одинаковым. Это очень плохая практика - перезапрашивать серверы имен каждый раз, когда вам нужно преобразовать имя хоста в IP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .