Просмотр внутри дистрибутива работает, а первое внутреннее имя хоста отказывает в тот момент, когда поднимается туннель. Рефлекс — добавить публичный резолвер, который возвращает интернет и делает корпоративное имя недоступным до конца дня. В WSL 2 /etc/resolv.conf — это сгенерированный вывод, а не конфигурация, и именно этот механизм стоит понять. Исправление — не резолвер получше, а владение файлом.

Файл генерируется, а не настраивается

WSL 2 записывает файл при запуске из тех адаптеров Windows, которые видит в этот момент, и печатает сверху комментарий, который это сообщает. Когда клиент VPN позже добавляет или перезаписывает адаптер, дистрибутив не обязательно что-то перегенерирует, и файл продолжает описывать сеть, которой больше нет.

Второй режим отказа тише: WSL может копировать серверы только из некоторых адаптеров. Если у физического адаптера уже есть резолвер IPv6, серверы IPv4, которые предоставляет адаптер VPN, могут быть отброшены вместо добавления, и файл выглядит полным, пропуская именно тот, который отвечает за внутренние имена.

Сравните вид из Windows с видом из Linux

Прочитайте обе стороны перед редактированием. Внутри дистрибутива посмотрите, что содержит файл и является ли он обычным файлом или ссылкой. В Windows перечислите резолвер для каждого адаптера, включая созданный VPN:

ls -l /etc/resolv.conf
cat /etc/resolv.conf
Get-DnsClientServerAddress -AddressFamily IPv4
Get-NetAdapter | Where-Object Status -eq 'Up'

Когда адаптер VPN показывает корпоративные серверы, а Linux — что-то другое, расхождение в генерации, а не в доступности. Сравните и список адаптеров, и адреса, потому что отсутствующий адаптер объясняет отсутствующий сервер. Это различие решает, чините ли вы WSL или брандмауэр, и общего у них нет ничего.

Отключите генерацию и напишите свой файл

Одна документированная настройка не даёт WSL перезаписывать файл, и она находится в /etc/wsl.conf. Добавьте в этот файл раздел сети:

[network]
generateResolvConf = false

Затем остановите дистрибутив из Windows командой wsl --shutdown и запустите снова. Если путь — символическая ссылка, а не обычный файл, удалите ссылку перед записью своего содержимого, потому что запись через ссылку может заново создать сгенерированную цель при следующем запуске. С этого момента файл ваш, и ничто его не перезаписывает.

nameserver 172.28.4.10
nameserver 172.28.4.11
search site.corp.example
options timeout:1 attempts:2 rotate

Без домена поиска неквалифицированное имя хоста дополняется публичным корнем и возвращается как «такого домена нет». timeout не даёт мёртвому первому серверу блокировать каждый запрос, attempts ограничивает, сколько попыток тратит запрос, а rotate распределяет повторы вместо того, чтобы всегда начинать сверху. Плата за это — файл больше не следует за VPN, адрес резолвера которого меняется между сеансами.

Разберитесь с перемещающимся резолвером, затем проверьте

Некоторые клиенты выдают резолвер, зависящий от сеанса, поэтому статический файл ломается при следующем подключении. Два подхода оправданны. Пишите файл из небольшого скрипта всякий раз, когда адрес меняется, или оставьте генерацию включённой и убедитесь, что адаптер, с которого WSL копирует, несёт корпоративный сервер. Второй не требует хука и отказывает всякий раз, когда генерация пропускает адаптер VPN; оба по-прежнему требуют сначала решить конфликт IPv6.

Windows применяет и свои собственные политики имён, например список поиска суффиксов или политику разрешения для отдельных доменов, и копирование адресов адаптеров эти правила не воспроизводит. Если имя разрешается в Windows и не разрешается в дистрибутиве с тем же сервером, сравните обработку суффиксов, прежде чем винить туннель.

Проверяйте именем, а не пакетом: getent hosts sensor-access0.corp.example проходит через стек резолвера, тогда как ping может успешно сработать по закэшированному или буквальному адресу. Затем повторите после отключения и повторного подключения, потому что настройка, которая работает один раз и перегенерируется при возобновлении, так и не была исправлена. Сохраните предыдущее содержимое и отметьте, какой компонент владеет путём на этой машине, чтобы следующее изменение начиналось с доказательств.

Похожие статьи