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