DNS w WSL ignoruje resolv.conf wskazuje, że automatyczna generacja tego pliku nadpisuje ręczne zmiany przy każdym starcie — trzeba wyłączyć tę funkcję w pliku /etc/wsl.conf.
Czym jest sytuacja, w której DNS w WSL ignoruje resolv.conf
Komunikat lub obserwacja, że DNS w WSL ignoruje resolv.conf, oznacza, że system Linux uruchomiony w Windows Subsystem for Linux nie korzysta z ręcznie wpisanych serwerów DNS albo po ponownym uruchomieniu środowiska przywraca wcześniejszą zawartość pliku. /etc/resolv.conf przechowuje adresy serwerów odpowiedzialnych za tłumaczenie nazw domenowych, na przykład zamianę example.com na adres IP. Jeżeli tłumaczenie nie działa, polecenia takie jak apt update, curl, git clone czy dostęp do witryn internetowych mogą kończyć się błędem rozpoznawania hosta, mimo że samo połączenie sieciowe w Windows działa prawidłowo.
W WSL zawartość /etc/resolv.conf może być tworzona automatycznie podczas startu dystrybucji. Mechanizm ten próbuje przekazać do środowiska Linux informacje o konfiguracji sieci wykrytej po stronie Windows, dlatego ręczna edycja pliku nie zawsze pozostaje trwała. Zmiana może działać tylko do zamknięcia bieżącej sesji, a po ponownym uruchomieniu WSL zostać zastąpiona nową wersją. Problem dotyczy więc nie tylko niepoprawnego adresu DNS, lecz także sposobu zarządzania tym plikiem.
Kontekst techniczny i porównanie dostępnych ustawień - DNS w WSL ignoruje resolv.conf
Standardowo WSL może samodzielnie generować /etc/resolv.conf. Jest to wygodne w typowej sieci domowej lub biurowej, ponieważ konfiguracja dostarczana przez Windows może zmieniać się wraz z przełączeniem sieci Wi-Fi, uruchomieniem tunelu VPN albo zmianą ustawień routera. Wadą takiego rozwiązania jest brak pełnej kontroli nad zawartością pliku. Wpisane ręcznie serwery nazw mogą zostać usunięte, a plik może otrzymać adres niedostępny z konkretnej dystrybucji WSL.
Trwałe ustawienie własnej konfiguracji wymaga zmiany sposobu działania automatycznej generacji. W pliku /etc/wsl.conf można wyłączyć tworzenie pliku resolwera przez sekcję:
[network]
generateResolvConf = false
Po zapisaniu ustawień należy opuścić dystrybucję i zatrzymać instancje WSL, aby konfiguracja została odczytana przy kolejnym uruchomieniu. Następnie można utworzyć własny /etc/resolv.conf i umieścić w nim adresy serwerów DNS właściwe dla używanej sieci. W razie korzystania z VPN lub firmowych domen wewnętrznych trzeba uwzględnić, że publiczny serwer DNS może nie znać nazw dostępnych wyłącznie w tej sieci. W takiej sytuacji bardziej odpowiedni będzie serwer DNS przekazany przez administratora albo rozwiązanie wykorzystujące lokalny resolver.
Warto odróżnić problem z generowaniem pliku od błędu samej usługi DNS. Pomocne jest sprawdzenie zawartości /etc/resolv.conf, test połączenia z wpisanym adresem IP oraz próba rozwiązania nazwy za pomocą narzędzia getent hosts lub dostępnego programu diagnostycznego. Jeżeli połączenie z adresem IP działa, lecz nazwa domenowa nie jest tłumaczona, podejrzenie powinno paść na konfigurację resolwera, reguły zapory, VPN albo nieosiągalny serwer DNS.
Typowe problemy i błędy konfiguracyjne - DNS w WSL ignoruje resolv.conf
Najczęściej spotykanym błędem jest edycja wyłącznie /etc/resolv.conf bez wyłączenia automatycznego generowania. Taka zmiana może dać krótkotrwały efekt, ale nie rozwiązuje przyczyny i po restarcie środowiska zostaje utracona. Innym problemem bywa niepoprawna nazwa opcji w /etc/wsl.conf, niewłaściwe wcięcie lub umieszczenie ustawienia poza sekcją [network]. Plik konfiguracyjny powinien mieć prawidłową składnię, ponieważ literówka może spowodować pominięcie ustawienia.
Do błędów prowadzi także pozostawienie starego pliku po wyłączeniu generowania. Jeżeli /etc/resolv.conf jest dowiązaniem symbolicznym wskazującym na automatycznie tworzony plik, samo dopisanie parametrów może nie przynieść oczekiwanego rezultatu. Należy sprawdzić, czy wskazany obiekt jest zwykłym plikiem, czy dowiązaniem, a następnie odtworzyć go zgodnie z przyjętą konfiguracją. Trzeba zachować ostrożność, ponieważ usunięcie pliku lub dowiązania bez przygotowania poprawnej wersji może całkowicie pozbawić środowisko rozwiązywania nazw.
DNS może przestać działać również po włączeniu VPN, zmianie sieci, aktualizacji WSL albo modyfikacji ustawień zapory. Serwer DNS widoczny z Windows nie zawsze jest dostępny z wirtualnej sieci używanej przez WSL. Zdarza się też, że odpowiedzi DNS są blokowane przez filtr sieciowy, a połączenie wymaga określonego interfejsu lub lokalnego przekierowania. Z tego powodu nie powinno się bez sprawdzenia kopiować przypadkowych adresów znalezionych w internecie. W pierwszej kolejności należy ustalić, czy problem dotyczy wszystkich domen, tylko nazw wewnętrznych, czy wyłącznie jednej dystrybucji.
Po zmianie ustawień warto zatrzymać WSL poleceniem wsl --shutdown, ponownie uruchomić dystrybucję i sprawdzić, czy zawartość /etc/resolv.conf pozostała zgodna z założeniami. Należy także zweryfikować, czy plik nie jest później modyfikowany przez skrypt startowy, menedżer sieci lub narzędzie używane do obsługi VPN. Sama obecność poprawnych wpisów nie przesądza jeszcze o działaniu DNS, dlatego potrzebny jest test rozpoznawania nazw oraz kontrola dostępności wskazanych serwerów.
W jakich sytuacjach warto zgłosić sprzęt do serwisu - DNS w WSL ignoruje resolv.conf
Zgłoszenie do serwisu jest uzasadnione, gdy problem powraca mimo poprawnej konfiguracji /etc/wsl.conf, występuje jednocześnie w kilku dystrybucjach albo pojawia się po każdej zmianie sieci lub połączenia VPN. Pomocy wymaga także sytuacja, w której nie można ustalić, czy źródłem usterki jest WSL, Windows, zapora, router czy firmowa infrastruktura DNS. Podczas diagnostyki sprawdza się między innymi stan sieci hosta, wersję WSL, dowiązania plików, reguły zapory, trasowanie oraz faktyczne odpowiedzi serwerów nazw.
W Warszawskim Pogotowiu Komputerowym 24/7 można przekazać urządzenie do sprawdzenia konfiguracji systemowej i problemów z dostępem do sieci; naprawy są z reguły realizowane w ciągu do 3 dni roboczych. Przed zgłoszeniem warto przygotować nazwę używanej dystrybucji, informację o korzystaniu z VPN, wynik polecenia cat /etc/resolv.conf oraz opis tego, czy internet działa poprawnie poza WSL. Takie dane ułatwiają rozdzielenie problemu z automatycznym tworzeniem konfiguracji od awarii połączenia, błędów zapory lub niedostępności właściwego serwera DNS.