Napraw „Tymczasową awarię rozwiązywania DNS” w Debianie 12 za pomocą systemd-resolved

Błąd Temporary failure in name resolutionoznacza, że ​​aplikacja nie mogła przekształcić nazwy hosta, np. deb.debian.orgw adres IP. W systemie Debian 12 (Bookworm) nie oznacza to automatycznie, że systemd-resolvedproblem jest rozwiązany. System Debian 12 nie jest instalowany systemd-resolveddomyślnie, a DNS może być zarządzany bezpośrednio przez NetworkManager, ifupdown, narzędzia DHCP lub inny resolver. Jeśli celowo włączono [brakuje informacji o błędzie] systemd-resolved, najszybszym rozwiązaniem jest zidentyfikowanie warstwy, która uległa awarii, przed zmianą konfiguracji.

Ten praktyczny podręcznik koncentruje się na systemach, które używają lub mają używać systemu systemd-resolved. Dokumentacja pakietu Bookworm Debiana zawiera informacje o instalowaniu systemd-resolvedprzełączników /etc/resolv.confz zarządzaniem systemd-resolved. Usługa ta zapewnia lokalny szczątkowy serwer DNS 127.0.0.53i akceptuje informacje DNS z konfiguracji globalnej, konfiguracji sieci dla poszczególnych łączy, DHCP, resolvectl. oraz usług zarządzania siecią. Więcej informacji można znaleźć na stronie pakietu Debian systemd-resolved oraz w podręczniku Debian systemd-resolved .

Szybka lista kontrolna diagnozy

SprawdzaćRozkazCo mówi ci wynik
Podstawowa ścieżka sieciowaping -c 3 1.1.1.1Jeśli adres IP działa, ale nazwa hosta nie, sprawdź DNS. ICMP może zostać zablokowany, więc nie traktuj nieudanego pinga jako dowodu na awarię sieci.
Usługa Resolversystemctl is-active systemd-resolvedactivepotwierdza, że ​​demon jest uruchomiony, ale nie dowodzi, że nadrzędny serwer DNS jest użyteczny.
Skuteczny DNSresolvectl statusPokazuje globalne i indywidualne serwery DNS, zakresy, domeny routingu i aktywny tryb rozpoznawania nazw.
ścieżka wyszukiwania glibcgetent ahosts debian.orgTestuje rozwiązywanie nazw hostów za pomocą ścieżki przełączania usług nazw (Name Service Switch) systemu, a nie tylko za pomocą narzędzia specyficznego dla DNS.
Dzienniki rozwiązywaczajournalctl -u systemd-resolved -bPrzydatne w przypadku niedostępnych serwerów DNS, problemów z działaniem w trybie awaryjnym i problemów z protokołem.

1. Sprawdź, czy problem dotyczy DNS, a nie ogólnej łączności

Zacznij od przetestowania nazwy hosta, a następnie adresu IP:

getent ahosts debian.org
ping -c 3 debian.org
ping -c 3 1.1.1.1

Jeśli wyszukiwanie nazwy hosta zakończy się niepowodzeniem, a bezpośredni test IP zakończy się powodzeniem, prawdopodobną domeną błędu jest DNS. Jeśli oba testy zawiodą, najpierw sprawdź interfejs, trasę, bramę, sieć VLAN, powiązanie Wi-Fi, zaporę sieciową lub sieć nadrzędną. Zmiana DNS nie naprawi brakującej trasy domyślnej.

Terminal pokazuje nieudane wyszukiwanie nazwy hosta Debian, podczas gdy bezpośrednie zapytanie ping do 1.1.1.1 powiodło się.
Bezpośrednie polecenie ping IP kończy się powodzeniem, natomiast rozwiązanie debian.org kończy się niepowodzeniem. Jest to dobry znak, że łączność istnieje, ale rozwiązywanie nazw DNS nie działa.

Aby uzyskać bardziej deterministyczne sprawdzenie routingu, uruchom także:

ip address
ip route

Zwykle powinieneś mieć adres oczekiwanego interfejsu i trasę domyślną. Dokładna nazwa interfejsu może brzmieć enp1s0, ens160, eth0lub coś innego.

2. Sprawdź, czy systemd-resolved jest faktycznie używany

Nie zakładaj, że jest on obecny tylko dlatego, że komputer korzysta z systemd. Sprawdź zarówno pakiet, jak i usługę:

dpkg -s systemd-resolved 2>/dev/null | grep '^Status'
systemctl status systemd-resolved --no-pager
resolvectl status

Jeśli pakiet jest nieobecny, a na komputerze działa inna, działająca konfiguracja zarządzania DNS, instalacja systemd-resolvednie jest automatycznie właściwym rozwiązaniem. Jeśli system powinien z niego korzystać, a usługa jest zainstalowana, ale zatrzymana, włącz ją i uruchom:

sudo systemctl enable --now systemd-resolved

Jeśli to polecenie nie zadziała, przed ponownym uruchomieniem usługi sprawdź dzienniki:

journalctl -u systemd-resolved -b --no-pager

3. Przed zastąpieniem pliku /etc/resolv.conf sprawdź jego poprawność

Najczęstszym błędem konfiguracyjnym jest traktowanie /etc/resolv.confpliku jako izolowanego. Dzięki temu systemd-resolvedplik może działać w kilku obsługiwanych trybach. Zalecany przez upstream tryb szczątkowy łączy się /etc/resolv.confz /run/systemd/resolve/stub-resolv.conf, który kieruje tradycyjnych klientów DNS do 127.0.0.53. Inny prawidłowy tryb łączy się z /run/systemd/resolve/resolv.conf, który bezpośrednio udostępnia znane serwery upstream, ale traci routing DNS dla każdego łącza systemd-resolved dla aplikacji, które odczytują ten plik bezpośrednio.

ls -l /etc/resolv.conf
cat /etc/resolv.conf
Terminal pokazujący /etc/resolv.conf jako zwykły plik zawierający serwery DNS wygenerowane przez NetworkManager.
Przed zmianą pliku /etc/resolv.conf sprawdź, czy jest on zwykłym plikiem czy dowiązaniem symbolicznym; różni menedżerowie sieci korzystają z różnych modeli własności.

Zwykły plik nie jest automatycznie błędny. NetworkManager lub inny menedżer resolverów może celowo przejąć nad nim kontrolę. Jeśli jednak ten host jest zaprojektowany do korzystania z trybu szczątkowego rozwiązywanego przez systemd, nieaktualny zwykły plik, nieaktualne dowiązanie symboliczne lub plik wskazujący na nieosiągalne serwery nazw może spowodować błędy wyszukiwania.

Przywróć zalecane łącze szczątkowe, gdy tryb szczątkowy jest zamierzony

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
ls -l /etc/resolv.conf
cat /etc/resolv.conf
Terminal przywraca /etc/resolv.conf do dowiązania symbolicznego stub-resolv.conf rozwiązanego przez systemd i pokazuje serwer nazw 127.0.0.53.
Gdy ten host celowo używa systemd-resolved w trybie szczątkowym, plik /etc/resolv.conf może wskazywać na utrzymywany plik szczątkowy w pliku /run/systemd/resolve/stub-resolv.conf.

Oczekiwane jest, że plik szczątkowy będzie widoczny nameserver 127.0.0.53. Jest to lokalny odbiornik, a nie serwer DNS nadrzędny. Użyj tego polecenia resolvectl status, aby sprawdzić, z którymi serwerami nadrzędnymi systemd-resolved faktycznie się skontaktuje. To rozróżnienie jest udokumentowane w podręczniku systemd-resolved Bookworm .

4. Sprawdź, czy systemd-resolved ma użyteczny serwer DNS

Uruchomić:

resolvectl status

Skoncentruj się na łączu, które przenosi trasę domyślną. Prawidłowa konfiguracja powinna zazwyczaj uwzględniać jeden lub więcej serwerów DNS dla tego łącza lub odpowiednie globalne serwery DNS. Jeśli nie ma dostępnego serwera DNS, samo naprawienie dowiązania symbolicznego nie pomoże: lokalny stub nie ma dokąd wysyłać zapytań.

Możesz przetestować resolver bezpośrednio:

resolvectl query debian.org

W podręczniku Debiana resolvectl udokumentowano status, query, flush-caches, oraz polecenia DNS dla poszczególnych łączy służące do inspekcji i rozwiązywania problemów.

5. Jeśli właścicielem interfejsu jest NetworkManager, napraw DNS w profilu połączenia

W instalacjach na komputerach stacjonarnych i wielu systemach Debian ogólnego przeznaczenia, NetworkManager może udostępniać dane DNS dla każdego łącza do systemd-resolved. Najpierw zidentyfikuj aktywny profil i aktualne wartości DNS:

nmcli connection show --active
nmcli device show
Terminal używający nmcli do wyświetlania aktywnego połączenia NetworkManager i informacji DNS dla interfejsu ens160.
W systemach NetworkManager należy sprawdzać i zmieniać ustawienia DNS w profilu połączenia zamiast wielokrotnie ręcznie edytować plik /etc/resolv.conf.

Jeśli DHCP dostarcza nieprawidłowy serwer DNS, zmień profil NetworkManager, zamiast edytować go /etc/resolv.confpo każdym ponownym uruchomieniu. Na przykład, jeśli Twoja polityka sieciowa zezwala na publiczne resolvery:

sudo nmcli connection modify "Wired connection 1"   ipv4.ignore-auto-dns yes   ipv4.dns "1.1.1.1 9.9.9.9"
sudo nmcli connection up "Wired connection 1"

Zastąp nazwę profilu i serwery DNS wartościami odpowiednimi dla Twojej sieci. Sieci korporacyjne, sieci VPN, środowiska Active Directory i konfiguracje z podzielonym DNS często wymagają wewnętrznych resolverów; publiczny DNS może uszkodzić prywatne nazwy hostów. Oficjalny dokument referencyjny konfiguracji NetworkManager dokumentuje jego integrację z systemd-resolved.

6. Jeśli interfejs jest własnością systemd-networkd, skonfiguruj DNS dla każdego łącza

W przypadku serwerów korzystających z systemd-networkd, umieść ustawienia DNS w odpowiednim .networkpliku w /etc/systemd/network/. Prosty przykład oparty na DHCP to:

[Match]
Name=ens160

[Network]
DHCP=yes
DNS=1.1.1.1
DNS=9.9.9.9
Domains=~.

[DHCPv4]
UseDNS=no

UseDNS=noMa to znaczenie, gdy chcesz zignorować serwery DNS dostarczane przez DHCP. Bez tego, serwer DNS DHCP jest używany domyślnie. Domains=~.to domena routingu tylko dla głównego serwera DNS, dzięki czemu łącze to nadaje się do zapytań, które nie pasują do bardziej szczegółowej domeny routingu. Nie dodawaj go bezmyślnie w systemach z wieloma adresami lub VPN, gdzie podział DNS jest celowy.

sudo systemctl restart systemd-networkd
resolvectl status ens160
Edytor terminala i Nano pokazujący ustawienia DNS w pliku systemd-networkd .network i status resolvectl dla ens160.
W przypadku systemd-networkd, DNS można zdefiniować dla każdego łącza w pliku .networkd, a następnie zweryfikować przy użyciu resolvectl.

Informacje na temat zachowania DNS=, Domains=, i DHCP UseDNS=znajdują się w podręczniku Debian Bookworm systemd.network .

7. Używaj globalnego pliku solved.conf tylko wtedy, gdy naprawdę chcesz mieć dostęp do DNS w całym systemie

/etc/systemd/resolved.conflub w sekcji „drop-in” /etc/systemd/resolved.conf.d/można zdefiniować serwery DNS systemu. Jest to przydatne w przypadku polityki obejmującej cały host, ale jest mniej precyzyjne niż konfiguracja dla każdego łącza na komputerach z sieciami VPN, wieloma interfejsami lub prywatnymi strefami DNS.

Lokalne dodawanie jest zazwyczaj bardziej przejrzyste niż edycja głównego pliku w stylu dostawcy:

sudo mkdir -p /etc/systemd/resolved.conf.d
sudoedit /etc/systemd/resolved.conf.d/10-dns.conf

Przykład:

[Resolve]
DNS=1.1.1.1 9.9.9.9

Następnie zastosuj:

sudo systemctl restart systemd-resolved
resolvectl status

W podręczniku Debian solved.conf wyjaśniono, że DNS=serwery DNS systemu i ustawienia administratora /etc/systemd/resolved.conf.d/mają pierwszeństwo przed konfiguracją o niższym priorytecie.

8. Opróżnij pamięć podręczną dopiero po naprawieniu konfiguracji bazowej

Nieaktualna pamięć podręczna może utrudniać rozwiązywanie problemów, ale opróżnianie pamięci podręcznej nie zastępuje naprawy niedostępnego serwera nadrzędnego lub uszkodzonej konfiguracji łącza. Po wprowadzeniu rzeczywistej zmiany w konfiguracji można uruchomić:

sudo resolvectl flush-caches
resolvectl query debian.org
Terminal opróżnia pamięć podręczną rozwiązaną przez systemd i wysyła zapytanie do debian.org za pomocą resolvectl.
Po poprawieniu konfiguracji DNS, pamięć podręczną należy opróżniać tylko wtedy, gdy będzie to potrzebne przy rozwiązywaniu problemów, a nazwę hosta należy sprawdzić bezpośrednio przez systemd-resolved.

W dokumentacji Systemd zaznaczono, że pamięć podręczna jest zwykle opróżniana automatycznie po zmianie konfiguracji sieci, więc wielokrotne ręczne opróżnianie pamięci podręcznej nie powinno być podstawowym rozwiązaniem.

9. Przeczytaj dziennik programu rozwiązującego błąd, jeśli błąd nadal występuje

Jeśli resolvectl statuswydaje się to rozsądne, ale zapytania nadal przekraczają limit czasu, sprawdź dziennik programu rozwiązującego problemy lokalne:

journalctl -u systemd-resolved -b --no-pager
journalctl -u systemd-resolved -b --no-pager | tail -n 50
Terminal pokazujący ostatnie komunikaty dziennika rozwiązane przez systemd dotyczące zdegradowanego serwera DNS i wyboru zapasowego serwera DNS.
Dziennik rozwiązany przez systemd może ujawnić awarie serwerów nadrzędnych, obniżoną jakość obsługi protokołów i zachowanie awaryjne.

Sprawdź, czy nie występują powtarzające się przekroczenia limitu czasu serwera, zmiany serwera zapasowego, błędy walidacji DNSSEC lub komunikaty wskazujące na ograniczone funkcje protokołu. Serwer resolwerowy może działać normalnie, podczas gdy jego skonfigurowany serwer nadrzędny jest niedostępny przez zaporę sieciową, sieć VPN, zasady routingu lub listę kontroli dostępu (ACL).

10. Sprawdź pełną ścieżkę wyszukiwania

Nie zatrzymuj się po jednym udanym resolvectlzapytaniu. Sprawdź ścieżkę używaną przez normalne aplikacje:

getent ahosts debian.org
resolvectl query debian.org
sudo apt update
Terminal weryfikuje DNS za pomocą getent i resolvectl, a następnie przeprowadza pomyślną aktualizację Debian apt.
Na koniec przetestuj zarówno ścieżkę rozwiązywania problemów systemowych, jak i aplikację, która pierwotnie nie działała, np. apt.

getentjest przydatny, ponieważ wyszukiwanie nazw hostów w glibc podąża za hosts:linią w /etc/nsswitch.conf. Jeśli resolvectl querysię powiedzie, ale nie powiedzie, sprawdź konfigurację NSS. Podręcznik nss-resolvegetent Debiana opisuje opcjonalny moduł i zalecaną kolejność, która może kierować wyszukiwania nazw hostów w glibc przez systemd-resolved, zachowując jednocześnie mechanizmy awaryjne.libnss-resolve

Typowe objawy i najczęstsze miejsca, w których należy szukać

ObjawPrawdopodobny obszarNastępne sprawdzenie
Łączność IP działa, ale wszystkie nazwy hostów zawodząSerwer DNS, usługa resolvera lub plik resolv.confresolvectl statusIls -l /etc/resolv.conf
resolvectl querydziała; normalne aplikacje zawodząŚcieżka NSS lub resolvera specyficzna dla aplikacjigetent ahostsI/etc/nsswitch.conf
DNS ulega awarii po ponownym uruchomieniu lub połączeniuKonfiguracja należąca do menedżera sieciNetworkManager lub profil systemd-networkd
Nazwy publiczne działają, nazwy wewnętrzne zawodząPodział DNS, VPN, routing domenSerwery DNS per-link i Domains=wresolvectl status
Tylko jedna aplikacja nie działaAplikacja, kontener, serwer proxy lub niestandardowy resolverPorównaj tę aplikację z getentiresolvectl query

Zalecana kolejność naprawy

  1. Sprawdź, czy istnieje podstawowa łączność sieciowa i domyślna trasa.
  2. Sprawdź, czy systemd-resolvedfaktycznie zamierzasz zarządzać usługą DNS na tym hoście.
  3. Sprawdź systemd-resolvedstan usługi i resolvectl status.
  4. /etc/resolv.confPrzed zmianą sprawdź własność i tryb dowiązania symbolicznego.
  5. Jeżeli tryb szczątkowy jest zamierzony, przywróć stub-resolv.confłącze.
  6. Napraw upstream DNS u aktualnego właściciela: NetworkManager, systemd-networkd, DHCP, VPN lub globalnie rozwiązana konfiguracja.
  7. Pamięć podręczną należy opróżnić dopiero po poprawieniu konfiguracji.
  8. Sprawdź za pomocą resolvectl, getent, i aplikacji, która pierwotnie uległa awarii.

Kluczową zasadą jest własność: /etc/resolv.confsystemd-resolved i menedżer sieci są częściami jednego łańcucha resolverów. Trwała poprawka zmienia DNS na poziomie, który jest jej właścicielem, zamiast wielokrotnie zastępować ostatecznie wygenerowany plik.

Zostaw komentarz

Jak bezpiecznie odzyskać utracone partycje i dane z dysku twardego

Jak bezpiecznie odzyskać utracone partycje i dane z dysku twardego

Dowiedz się, jak odzyskać utracone partycje i pliki za pomocą TestDisk i PhotoRec. Zabezpiecz dysk źródłowy, przeskanuj go bezpiecznie i zapisz odzyskane dane na innym dysku.

Jak skanować kody QR na komputerze stacjonarnym z systemem Linux

Jak skanować kody QR na komputerze stacjonarnym z systemem Linux

Skanuj kody QR w systemie Linux za pomocą CoBang, używając kamery internetowej lub pliku obrazu. Zobacz opcje instalacji, kroki konfiguracji i poprawki dotyczące dostępu do kamery Flatpak.

Jak zmienić ustawienia kamery internetowej w systemie Linux za pomocą Cameractrls

Jak zmienić ustawienia kamery internetowej w systemie Linux za pomocą Cameractrls

Zmień ustawienia kamery internetowej w systemie Linux za pomocą narzędzia Cameractrls: dostosuj ekspozycję, kolor, redukcję migotania i inne obsługiwane elementy sterujące, a następnie sprawdź zgodne tryby wideo.

Jak zainstalować PhpStorm na Linuksie: Toolbox, Tar.gz, Snap i AUR

Jak zainstalować PhpStorm na Linuksie: Toolbox, Tar.gz, Snap i AUR

Zainstaluj PhpStorm na Linuksie za pomocą JetBrains Toolbox lub samodzielnego archiwum tar.gz, a także opcji Snap i Arch AUR. Java jest już dołączona.

Jak wyciąć obraz w systemie Linux za pomocą programu GIMP

Jak wyciąć obraz w systemie Linux za pomocą programu GIMP

Usuń tło zdjęcia w systemie Linux za pomocą programu GIMP: narysuj obiekt, usuń wybrane tło, zachowaj przezroczystość i wyeksportuj plik PNG, który można ponownie wykorzystać.

Jak wykonać kopię zapasową płyty CD-ROM w postaci obrazu ISO w systemie Linux

Jak wykonać kopię zapasową płyty CD-ROM w postaci obrazu ISO w systemie Linux

Utwórz obraz ISO płyty CD-ROM w systemie Linux za pomocą GNOME Disks lub dd. Zidentyfikuj napęd optyczny, monitoruj kopiowanie, zweryfikuj obraz i dowiedz się, kiedy uszkodzona płyta lub płyta audio wymaga użycia innego narzędzia.

Jak skonfigurować dwa panele w środowisku XFCE 4

Jak skonfigurować dwa panele w środowisku XFCE 4

Utwórz oddzielny panel XFCE 4 dla każdego wyświetlacza, przypisz drugi panel do odpowiedniego wyjścia, określ jego położenie i rozmiar, a następnie dodaj potrzebne elementy uruchamiające i statusu.

Jak zainstalować Cisco Packet Tracer w systemie Linux

Jak zainstalować Cisco Packet Tracer w systemie Linux

Pobierz Cisco Packet Tracer 9.0.1 dla systemu Ubuntu 64-bit, zainstaluj pakiet DEB za pomocą APT, zaakceptuj licencję w terminalu i zaloguj się, aby rozpocząć laboratorium.

Pobierz FlightGear za darmo: Oficjalny przewodnik instalacji

Pobierz FlightGear za darmo: Oficjalny przewodnik instalacji

Pobierz FlightGear za darmo z oficjalnej strony. Porównaj pakiety dla systemów Windows, macOS i Linux, zainstaluj pliki danych i rozpocznij swój pierwszy lot.

OKSampler: darmowy, prosty sampler muzyczny do rytmów klawiszowych

OKSampler: darmowy, prosty sampler muzyczny do rytmów klawiszowych

OKSampler mapuje klipy MP3 na klawisze klawiatury i umożliwia zapętlanie dźwięku. Dowiedz się, co robi ten starszy, darmowy program, gdzie kończą się jego stare funkcje i co sprawdzić przed pobraniem.