TTL при запросе любой записи с копанием
Этот вопрос приходит из этой темы. Когда я делаю это, я получаю оставшиеся секунды до истечения срока действия записи A в запрашиваемом сервере имен:
dig stackexchange.com
Однако, если я делаю это, я получаю значения TTL:
dig any stackexchange.com
Итак, я не понимаю, почему, когда я делаю dig any stackexchange.com
Я получаю все значения TTL, как если бы я задал авторский вопрос, когда фактически сделал рекурсивный запрос.
2 ответа
Короче говоря, оба запроса, которые вы упомянули в вопросе, являются неавторизованными.
Записи 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
record будет просто предоставлять записи, которые кэшируются только на вашем сервере имен по умолчанию.
$ 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 меняются для неавторизованных ответов.
Вы не понимаете поле TTL в DNS-запросах. TTL является для клиента индикатором того, как долго он должен кэшировать результаты, прежде чем повторно запрашивать сервер имен. Если вы не обновите свой DNS-сервер другим значением для TTL, ответ всегда будет одинаковым. Это очень плохая практика - перезапрашивать серверы имен каждый раз, когда вам нужно преобразовать имя хоста в IP.