Как получить TTL записи в кеше DNS в Linux с помощью systemd?

Я задал этот вопрос о том, как увидеть кэш DNSLinux. Кажется, что это возможно, но TTL не показывает, в отличие от Firefox, Chrome и Windows.

В Windows это выглядит так

      PS C:\> ipconfig /displaydns

Windows IP Configuration


    chrome.cloudflare-dns.com
    ----------------------------------------
    Record Name . . . . . : chrome.cloudflare-dns.com
    Record Type . . . . . : 1
    Time To Live  . . . . : 54
    Data Length . . . . . : 4
    Section . . . . . . . : Answer
    A (Host) Record . . . : 104.18.27.211


        vortex.data.microsoft.com
    ----------------------------------------
    Record Name . . . . . : vortex.data.microsoft.com
    Record Type . . . . . : 5
    Time To Live  . . . . : 6
    Data Length . . . . . : 8
    Section . . . . . . . : Answer
    CNAME Record  . . . . : asimov.vortex.data.trafficmanager.net

...

В Linux можно сбросить кеш и просмотреть его с помощью Journalctl:

      rj@vps:~$ time=$(date "+%F %T")
rj@vps:~$ systemctl kill -s USR1 systemd-resolved
rj@vps:~$ journalctl -b -0 --since "$time" -u systemd-resolved | grep " IN "
Oct 10 22:28:38 myserver systemd-resolved[3255524]:         cloudflare.com IN A 104.16.133.229
Oct 10 22:28:38 myserver systemd-resolved[3255524]:         cloudflare.com IN A 104.16.132.229

Вопрос

Как получить TTL записи в кеше DNS в Linux с помощью systemd?

Редактировать:

Основываясь на ответе пользователя 1686, этот сценарий вернет TTL и 0, если он равен 0 или отсутствует в кеше:

      get-ttl () {
    site="$1"
    time=$(date "+%F %T")
    systemctl kill -s USR1 systemd-resolved
    dns_cache=$(journalctl -b -0 --since "$time" -u systemd-resolved \
        | grep " IN ")
    site_cache="$(echo $dns_cache | grep $site)"
    if [ "$site_cache" ]
        then dig +noall +answer $site A | awk '{ print $2 }'
        else echo 0
    fi
}

Затем вы можете использовать это, чтобы найти TTL в кеше и вне кеша:

      $ get-ttl motel6.com
3349
$ get-ttl motels.com
0

1 ответ

Сделайте DNS-запрос к сопоставителю кэширования:

      dig +noall +answer cloudflare.com A @127.0.0.53

Оставшийся TTL кэша в секундах будет показан во втором поле (между именем и классом). При желании добавьтечтобы его отформатировать.

(Обратите внимание, что вам не нужно указывать , поскольку это должна быть единственная запись в вашем resolv.conf при использовании systemd-resolved; Я включил его только в демонстрационных целях.)

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

Другие вопросы по тегам