Как очистить кеш DNS в Ubuntu 24.10?

Вопрос или проблема

Как сбросить кэш DNS в Ubuntu 24.10?

Следующие команды не работают:

systemd-resolve --flush-caches
resolvectl flush-caches 

Когда я пингую определённое доменное имя, оно всё ещё разрешается в старый IP-адрес. Я точно знаю, что изменения DNS были распространены, потому что на другой машине отображается новый IP-адрес.

Чтобы очистить кэш DNS локального резольвера, вам просто нужно выполнить следующую команду:

resolvectl flush-caches

Например, сначала проверьте текущий размер кэша вашего DNS-кэша с помощью команды resolvectl statistics. Обратите внимание, что размер кэша составляет 14.

$ resolvectl statistics
DNSSEC поддерживается текущими серверами: нет

Транзакции             
Текущие транзакции: 0
  Всего транзакций: 101
                         
Кэш                    
  Текущий размер кэша: 14
          Попадания в кэш: 29
        Промахи кэша: 104
                         
Вердикты DNSSEC          
              Защищено: 0
            Незащищено: 0
               Ошибочно: 0
       Неопределено: 0

Затем очистите свой кэш и проверьте статистику снова. Вы заметите, что текущий размер кэша теперь 0.

$ resolvectl flush-caches

$ resolvectl statistics
DNSSEC поддерживается текущими серверами: нет

Транзакции             
Текущие транзакции: 0
  Всего транзакций: 103
                         
Кэш                    
  Текущий размер кэша: 0
          Попадания в кэш: 29
        Промахи кэша: 106
                         
Вердикты DNSSEC          
              Защищено: 0
            Незащищено: 0
               Ошибочно: 0
       Неопределено: 0

После этого, если результаты разрешения доменного имени из вашей команды ping не такие, как вы ожидаете, вам нужно исследовать конфигурацию сервера.

Правильно ли настроен файл /etc/resolv.conf? Он должен быть символьной ссылкой на /run/systemd/resolve/stub-resolv.conf, что является конфигурацией по умолчанию. Проверьте с помощью следующей команды:

$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 31  2021 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

Если это не символическая ссылка, а статический файл с каким-то ошибочным сервером имён, исправьте с помощью следующих команд:

sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Далее, проверьте, какие ваши текущие uplink серверы имён. Используйте resolvectl status, чтобы выяснить. В моём примере ниже серверами имен являются 8.8.8.8 и 1.1.1.1,

$ resolvectl status
Global
       Протоколы: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
режим resolv.conf: stub

Link 2 (enp11s0)
Текущие области: none
     Протоколы: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (wlp9s0)
    Текущие области: DNS
         Протоколы: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Текущий DNS-сервер: 8.8.8.8
       DNS-серверы: 8.8.8.8 1.1.1.1

Link 4 (virbr0)
Текущие области: none
     Протоколы: -DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Теперь попробуйте разрешить доменное имя с этим конкретным сервером имен и обойти локальный резольвер с помощью команды dig и указания сервера имен:

$ dig @8.8.8.8 askubuntu.com

; <<>> DiG 9.18.30-0ubuntu0.22.04.1-Ubuntu <<>> @8.8.8.8 askubuntu.com
; (1 сервер найден)
;; глобальные параметры: +cmd
;; Получен ответ:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60706
;; флаги: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: версия: 0, флаги:; udp: 512
;; ВОПРОСНАЯ СЕКЦИЯ:
;askubuntu.com.         IN  A

;; ОТВЕТНАЯ СЕКЦИЯ:
askubuntu.com.      300 IN  A   104.18.37.100
askubuntu.com.      300 IN  A   172.64.150.156

;; Время запроса: 187 мс
;; СЕРВЕР: 8.8.8.8#53(8.8.8.8) (UDP)
;; КОГДА: Tue Jan 14 17:59:05 PST 2025
;; MSG SIZE  rcvd: 74

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

Если результаты соответствуют вашим ожиданиям, но всё равно неправильны с ping после очистки вашего DNS-кэша, тогда проверьте содержимое файла /etc/hosts, чтобы убедиться, что у вас нет записей, переопределяющих это доменное имя.

Проверьте, какие DNS-серверы использует ваша машина:

resolvectl status | grep 'Current DNS Server'

Вы получите что-то вроде этого:

Current DNS Server: 192.168.100.1

Затем попробуйте эту команду, используя IP-адрес вашего DNS.

dig @192.168.100.1 DOMAIN

Проверьте с внешним DNS

dig @8.8.8.8 DOMAIN

Если у вас продолжаются проблемы, перезапустите вашу систему разрешения.

sudo systemctl restart systemd-resolved

Если в /etc/hosts есть запись, которая переопределяет разрешение DNS, вы можете проверить её с помощью:

cat /etc/hosts

Если вы найдёте запись для <DOMAIN>, пожалуйста, удалите её или закомментируйте.

.

Ответ или решение

Чтобы очистить DNS-кеш в Ubuntu 24.10, необходимо выполнить несколько проверок и действий, поскольку стандартные команды, такие как systemd-resolve --flush-caches и resolvectl flush-caches, могут не всегда работать, как ожидалось. Рассмотрим, как можно справиться с этой ситуацией, и что стоит проверить, чтобы убедиться в правильности настроек DNS.

Теория

DNS (Domain Name System) отвечает за преобразование человеческих имен доменов в IP-адреса, которые понятны компьютерным системам. Иногда происходит обновление DNS-записей, например, когда меняется IP-адрес сервера, обслуживающего сайт. Однако, ваш локальный компьютер может все еще иметь старые записи в своем кеш-памяти, что приводит к неправильному разрешению адресов. Это может создать проблемы, как в вашем случае, где команда ping возвращает старый IP-адрес, несмотря на успешное обновление DNS на других машинах.

Пример

Начнем с команды resolvectl statistics, чтобы проверить текущий размер кеша и другие статистические данные:

$ resolvectl statistics

Эта команда позволит вам увидеть текущий размер кеша и количество успешных и неуспешных разрешений. После этого используйте команду:

$ resolvectl flush-caches

Если эта команда очистила кеш, вы увидите, что размер кеша станет равен нулю, если снова проверите статистику:

$ resolvectl statistics

Применение

Если проблема не решена, следует исследовать конфигурацию серверов имен. Проверим, правильно ли настроен файл /etc/resolv.conf. Это должен быть символическая ссылка на /run/systemd/resolve/stub-resolv.conf. Выполните команду:

$ ls -l /etc/resolv.conf

Если это не символическая ссылка, исправьте это:

sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

После этого проверьте, какие сервера DNS используются вашим компьютером:

$ resolvectl status | grep 'Current DNS Server'

Этим вы получите IP-адрес текущего DNS-сервера. Затем попробуйте использовать команду dig для проверки разрешения доменного имени:

dig @<IP вашего DNS-сервера> ваш-домен

Если проблема все еще существует, попробуйте проверить с использованием внешнего DNS-сервера, например Google:

dig @8.8.8.8 ваш-домен

Эти команды помогут вам определить, является ли проблема локальной на вашей машине или связана с вашими DNS-серверами.

Если все еще наблюдаются проблемы, перезапустите сервис разрешения имен:

sudo systemctl restart systemd-resolved

И, наконец, проверьте файл /etc/hosts на предмет переопределений DNS:

cat /etc/hosts

Если найдёте записи для вашего домена, которые не соответствуют обновлениям в DNS, удалите или закомментируйте их.

Заключение

Следуя данным рекомендациям, вы сможете эффективно очистить DNS-кеш на Ubuntu 24.10 и решить проблему с некорректным разрешением доменных имен. Эта многоэтапная проверка конфигурации и действий должна выявить и исправить наиболее распространенные проблемы, связанные с кешированием DNS в Ubuntu. Если же проблема не решена, возможно, вы столкнулись с уникальным случаем, требующим более глубокого анализа конфигурации сети или связанного программного обеспечения.

Оцените материал
Добавить комментарий

Капча загружается...