Я работаю с "виртуальным частным сервером" в облаке, на котором установлена Ubuntu 20.04.
Я заметил, что - иногда - когда я перезагружаю сервер, я не могу ничего пинговать:
$ ping yahoo.com
ping: yahoo.com: Temporary failure in name resolution
$ resolvectl query yahoo.com
yahoo.com: resolve call failed: No appropriate name servers or networks for name found
Насколько я понимаю, поскольку это Ubuntu 20.04, /etc/resolv.conf
больше не используется, а systemd
берет на себя управление DNS.
Но, в любом случае, я бы не хотел вручную указывать DNS-серверы (как старый трюк с указанием 8.8.8.8 от Google в /etc/resolv.conf
) - очевидно, что в большинстве случаев DNS работает: когда сервер загружается, он каким-то образом "получает" DNS-сервер. Поэтому я хотел бы повторить этот процесс, только я понятия не имею как.
(По аналогии, если бы я хотел обновить/получить новый IP-адрес для машины, я знаю, что машина должна запросить его у DHCP-сервера - так что, в конце концов, легко найти, что для этого я должен сделать sudo dhclient -r eth0
, например)
Заметьте также, что когда разрешение имен DNS не работает, у меня нет DNS-серверов
, перечисленных в этом выводе:
$ systemd-resolve --status
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 2 (eth0)
Current Scopes: none
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Я видел, что для очистки кэша DNS они (https://unihost. com/help/how-to-clear-the-dns-cache/) рекомендуют:
sudo /etc/init.d/networking restart
... однако, я бы не хотел выполнять эту команду, поскольку я подключен к серверу по ssh
, поэтому я представляю, что перезапуск всей сети также убьет мою ssh
терминальную сессию и, возможно, приведет к другим нежелательным последствиям.
Итак, мне интересно: есть ли команда, которую я могу запустить в ssh
сессии, которая обновит или получит новые DNS сервера для этой машины - используя аналогичный механизм, который используется при загрузке, когда DNS действительно работает на этой машине?
Я только что нашел https://unix.stackexchange.com/questions/328131/how-to-troubleshoot-dns-with-systemd-resolved с примечанием:
... иногда перезапуск через
sudo systemctl restart systemd-resolved
- хорошая идея.
Итак, я попробовал эту команду:
sudo systemctl restart systemd-resolved
... и действительно, DNS-серверы
появились тогда в выводе systemd-resolve --status
(или ] resolvectl status
, который, кажется, показывает тот же отчет)
Другие возможности:
В Ubuntu 20.04
systemd-resolved
является локальным DNS-сервером, включенным вsystemd
, который действует как преобразователь заглушек, и он должен автоматически редактировать/etc/resolv.conf
с правильной конфигурацией....
Этот файл содержит DNS-серверы из аренды DHCP, но имейте в виду, что вы не получите преимуществ от функции кэширования заглушки.
Ах, если DNS-серверы получены из аренды DHCP - тогда есть вероятность sudo dhclient -r eth0
также может работать.
Наконец, я осмелился запустить:
$ sudo /etc/init.d/networking restart
Restarting networking (via systemctl): networking.service.
... и оказалось, что это не нарушило мою сессию ssh
, так что это тоже хорошо.