Текст и данные · Инструкция
Как отключить generateHosts в WSL и сохранить свой /etc/hosts
Если нужно понять, как отключить generateHosts в WSL, причина обычно одна: собственные записи в /etc/hosts исчезают.
Короткий ответ
Как отключить автогенерацию /etc/hosts в WSL через generateHosts=false, применить wsl.conf и не перепутать hosts с resolv.conf.
Что делает generateHosts в WSL и почему /etc/hosts меняется сам
В каждом дистрибутиве WSL файл /etc/hosts используется Linux-программами для статического сопоставления имён и IP-адресов. По умолчанию параметр generateHosts включён, поэтому WSL формирует этот файл при запуске дистрибутива. Из-за этого ручная правка может исчезнуть после перезапуска: проблема не в редакторе и не в правах root, а в том, что следующий старт снова генерирует содержимое. Если вам нужна постоянная собственная таблица хостов — например, для тестового стенда, локального домена или фиксированного адреса внутреннего сервиса — автоматическую генерацию можно отключить в /etc/wsl.conf. При этом вы берёте обслуживание /etc/hosts на себя: WSL больше не будет обновлять файл по своим правилам. Поэтому отключать generateHosts «на всякий случай» не стоит; это настройка для конкретной задачи, а не универсальное ускорение или исправление сети.
Совет: Сначала проверьте, действительно ли строка исчезает после перезапуска WSL. Если нет, generateHosts менять не требуется.
Как отключить автогенерацию /etc/hosts через wsl.conf
- Внутри нужного дистрибутива откройте /etc/wsl.conf с правами root, например sudo nano /etc/wsl.conf. Это конфигурация конкретного дистрибутива, в отличие от .wslconfig в профиле Windows, который задаёт глобальные параметры WSL 2. Если файл уже существует, не удаляйте другие секции.
- Добавьте секцию [network] и строку generateHosts=false. Если [network] уже есть, просто добавьте параметр в существующую секцию. Следите за названием: generateHosts пишется именно так; похожий generateResolvConf управляет другим файлом — /etc/resolv.conf — и не нужен для этой задачи.
- Сохраните файл и полностью остановите WSL из PowerShell командой wsl --shutdown. Microsoft отмечает, что изменения конфигурации применяются после остановки и нового запуска экземпляра. Затем снова откройте дистрибутив и проверьте cat /etc/hosts.
- После отключения генерации внесите необходимые постоянные строки в /etc/hosts вручную, сохраняя привычный формат «IP пробел имя». Для локальных тестов обычно достаточно 127.0.0.1 app.test. Не копируйте случайные записи из Windows hosts без понимания, зачем они нужны.
Важно: Не путайте /etc/wsl.conf и %UserProfile%\.wslconfig: generateHosts относится к wsl.conf внутри конкретного Linux-дистрибутива.
Что делать с текущим /etc/hosts после отключения генерации
Отключение generateHosts меняет поведение будущих запусков, но само по себе не проектирует для вас правильный файл. Просмотрите текущие строки и оставьте только те, назначение которых понятно. Базовые записи localhost должны оставаться корректными; пользовательские домены добавляйте отдельными строками. Если один и тот же тестовый домен должен открываться и из Windows-браузера, и из Linux-программы, одной записи только в WSL может быть недостаточно: Windows использует собственный hosts-файл и собственный механизм DNS. Это частая причина ситуации «curl в Ubuntu работает, а браузер Windows — нет». Обратная ситуация тоже возможна: запись, добавленная в Windows, не обязана автоматически появиться в Linux после того, как вы запретили WSL генерировать /etc/hosts. Рассматривайте два hosts-файла как разные источники, даже если раньше WSL связывал их поведение удобнее.
Совет: Для кросс-среды фиксируйте, где именно должно разрешаться имя: в Windows, в WSL или в обеих системах.
generateHosts и generateResolvConf — не одно и то же
- generateHosts. /etc/hosts. статические соответствия имя ↔ IP. true
- generateResolvConf. /etc/resolv.conf. список DNS-серверов для резолвинга. true
Почему после изменения hosts сайт всё равно может открываться по старому адресу
Даже правильный /etc/hosts не гарантирует мгновенное изменение поведения каждого приложения. Сначала убедитесь, что нужное имя разрешается внутри WSL командой getent hosts имя или другой системной проверкой. Если она показывает новое значение, а конкретная программа — старое, возможен собственный DNS-кэш приложения или постоянно работающий процесс, который прочитал адрес раньше. Перезапустите именно приложение или сервис. Если getent показывает не то, проверьте опечатки, порядок строк и то, что вы редактируете /etc/hosts в том дистрибутиве, где запускается команда. В среде с несколькими Ubuntu/Debian каждый дистрибутив имеет свой файл. Также не используйте /etc/hosts как замену DNS для большого списка динамических адресов: ручные записи быстро устаревают. Для нескольких стабильных локальных имён это удобно; для корпоративной инфраструктуры лучше исправлять DNS или соответствующий сервис обнаружения.
Предупреждение: Если задача связана с VPN/DNS, не отключайте generateHosts автоматически: hosts и DNS решают разные проблемы.
Как безопасно вернуть стандартное поведение
- Удалите строку generateHosts=false или измените её на true в секции [network] файла /etc/wsl.conf. Не трогайте несвязанные параметры, если они нужны дистрибутиву.
- В PowerShell выполните wsl --shutdown, затем запустите дистрибутив заново. Без полной остановки вы можете ошибочно решить, что настройка не работает.
- Проверьте /etc/hosts после старта и убедитесь, что WSL снова формирует его автоматически. Пользовательские строки, на которые вы рассчитывали, после этого нужно хранить и применять другим управляемым способом.
- Если изменение было попыткой починить доступ в интернет, верните generateHosts=true и диагностируйте DNS отдельно: /etc/resolv.conf, dnsTunneling, VPN и сетевой режим WSL относятся к другой части конфигурации.
Когда generateHosts=false действительно оправдан
Практический критерий простой: у вас должна быть конкретная постоянная запись, которую автоматическая генерация WSL перезаписывает, и вы готовы самостоятельно поддерживать весь /etc/hosts. Типичный пример — локальные домены для разработки, которые должны всегда указывать на 127.0.0.1 или фиксированный адрес тестового сервера внутри конкретного дистрибутива. Ещё один сценарий — воспроизводимая лабораторная среда, где файл управляется системой конфигурации и его содержимое должно быть детерминированным. Если же цель — «чтобы DNS работал стабильнее», «чтобы VPN видел сайты» или «чтобы интернет стал быстрее», этот параметр обычно не отвечает на исходную проблему. В таких случаях изменение hosts может лишь замаскировать один домен и оставить сеть сломанной. Хорошая настройка здесь минимальна: отключайте генерацию только тогда, когда можете сформулировать, какие строки должны пережить перезапуск и кто будет отвечать за их актуальность.
Что учитывать
В каждом дистрибутиве WSL файл /etc/hosts используется Linux-программами для статического сопоставления имён и IP-адресов. По умолчанию параметр generateHosts включён, поэтому WSL формирует этот файл при запуске дистрибутива. Из-за этого ручная правка может исчезнуть после перезапуска: проблема не в редакторе и не в правах root, а в том, что следующий старт снова генерирует содержимое. Если вам нужна постоянная собственная таблица хостов — например, для тестового стенда, локального домена или…
Источники и проверка
Фактическая часть сверена по первичным источникам (в т.ч. Advanced settings configuration in WSL). Пример и формулировки — редакция N1RO на 2026-09-21.