Вопрос или проблема
Я настраиваю виртуальную машину с Ubuntu 22.04.
У меня возникают проблемы с разрешением имен хостов в моей локальной сети. Я могу пинговать другие серверы по IP, но не по имени хоста: ‘Временный сбой разрешения имен’.
Однако я могу пинговать www.google.com.
Я добавил свои локальные DNS-серверы в /etc/resolve/resolv.conf и в /etc/netplan/01.netcfg.yaml
Нужно ли мне добавить это еще где-то?
Вкратце, я решил свою проблему с помощью
systemctl restart systemd-resolved
У меня свежая установка Ubuntu 22.04. Система постоянно теряет большую часть соединений с интернетом через пару часов. Несколько приложений все еще могут получить доступ к интернету, и я все еще могу заходить на несколько веб-страниц, используя их IP-адреса. Проблема может быть решена перезагрузкой.
Чтобы справиться с этой неприятной проблемой, я протестировал nfw disable
, netplan try
, dhclient -r
,ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
, systemctl enable NetworkManager
, а также несколько других предложений, требующих изменения файлов, таких как /etc/netplan/00-installer-config.yaml
, ни один из этих методов не сработал.
Я могу пинговать свой DNS-сервер, но если я пингую реальную веб-страницу, я получаю ошибку “Временный сбой разрешения имен”. resolvectl query
приводит к ошибке “resolve call failed: Connection timed out.”
Используя команду в начале, я смог восстановить подключение к интернету без перезагрузки системы.
ОБНОВЛЕНИЕ:
Оказывается, Cisco AnyConnect вызывает проблему. Та же проблема повторяется почти каждый раз после отключения от VPN. Я все еще не уверен, почему это происходит, но оригинальная команда может временно решить проблему.
Возможным решением может быть установка libnss-mdns
и настройка /etc/nsswitch.conf
для использования mdns4_minimal
.
На сервере Ubuntu не настроен протокол mdns
.
Эта ошибка произошла у меня, когда я использовал команду hostnamectl.
# hostnamectl set-hostname virtual-machine.dev.da
Чтобы исправить ошибку, мне нужно было изменить файл /etc/hosts и обновить строку с локальным IP-адресом:
127.0.1.1 virtual-machine.dev.da
Ответ или решение
Ошибки с разрешением имен, такие как "Temporary failure in name resolution", особенно в таких системах, как Ubuntu 22.04, часто могут вызывать значительные неудобства в сетевых приложениях. Для профессиональных системных администраторов и специалистов по ИТ понимание и устранение этих проблем является приоритетной задачей. Давайте рассмотрим данную проблему более подробно и предложим возможные решения.
Теория
Система разрешения имен в операционных системах Unix-подобной архитектуры, к которым относится Ubuntu, функционирует благодаря стекам DNS и NetBIOS. Основные компоненты, которые управляют этой функцией, включают библиотеки NSS (Name Service Switch), DNS-клиенты, такие как systemd-resolved
, и конфигурационные файлы, такие как /etc/resolv.conf
и /etc/nsswitch.conf
. Проблемы в этой области могут быть связаны с настройками конфигурации файлов, службами или VPN-клиентами, такими как Cisco AnyConnect, которые изменяют сетевую конфигурацию.
Пример
Ваш случай иллюстрирует несколько ключевых моментов:
-
Комплексность сетевой конфигурации: вы добавили DNS-серверы в
/etc/resolv.conf
и/etc/netplan/01.netcfg.yaml
, однако продолжаете встречать проблему с временными сбоями в разрешении имен после отключения VPN. Это указывает на конфигурационные изменения, вносимые VPN и их влияние на системные службы. -
Успешный пинг Google: демонстрирует, что внешний доступ работает, предполагая, что проблема более вероятно локализована в локальной сети или специфической конфигурации системы.
-
Решение через перезапуск системы: повторный запуск
systemd-resolved
возобновляет нормальное поведение, выявляя, что служба DNS требует повторной инициализации после определенного события.
Применение
На основе вышеизложенного, давайте предложим несколько практических решений и стратегий диагностики, чтобы вы могли эффективно решать подобные проблемы в будущем.
-
Проверка файлов конфигурации DNS:
- Убедитесь, что в
/etc/resolv.conf
указаны правильные адреса локальных DNS-серверов. Помните, что этот файл может быть автоматически сгенерированsystemd-resolved
, поэтому изменения должны быть применены через конфигурационные файлы, относящиеся кsystemd
. - Проверьте
/etc/nsswitch.conf
и убедитесь, что он содержит конфигурацию дляdns
и, при необходимости, дляmdns4_minimal
, чтобы использовать мультимедийные DNS-запросы, которые могут потребоваться для локальных сетевых ресурсов.
- Убедитесь, что в
-
Управление службой systemd-resolved:
- Командой
systemctl restart systemd-resolved
можно быстро решить проблему временно, но долгосрочное решение требует устранения причины сбоя. - Команда
resolvectl
может предоставить диагностику текущего состояния DNS-резолвера и помочь в поимке проблем.
- Командой
-
Изменение системного хоста:
- Если вы меняли имя хоста с помощью
hostnamectl
, убедитесь, что вы обновили/etc/hosts
, добавив соответствующие записи, что поможет системе правильно сопоставлять IP-адреса и локальные имена хостов.
- Если вы меняли имя хоста с помощью
-
Операции с VPN:
- Поскольку проблема возникает после отключения Cisco AnyConnect, проверьте конфигурации VPN на предмет изменения конфигурации сети. Иногда VPN-клиенты заменяют системные DNS-конфигурации временно. Возможно, потребуется выявить скрипты, которые запускают VPN.
-
Долгосрочные решения:
- Рассмотрите возможность написания собственных скриптов или системных хуков, которые будут автоматически восстанавливать DNS-конфигурации после изменений, внесенных VPN.
- Убедитесь, что ваш DHCP-сервер локальной сети предоставляет корректные DNS-настройки, которые постоянно поддерживаются в системе.
Таким образом, при работе с Ubuntu 22.04 и решением проблемы "Temporary failure in name resolution" вам необходимо использовать комплексный подход, начиная от проверки конфигурационных файлов, диагностики проблем в службах и до выяснения влияния сторонних приложений, в частности VPN-клиентов, на системные настройки сети. Обеспечив целостность и устойчивость вашей сетевой конфигурации, вы сможете поддерживать стабильную работу ваших приложений и служб.