Сначала выберите режим сети
WSL2 по умолчанию работает через NAT, и дистрибутив не разделяет петлевой адрес Windows. Поэтому 127.0.0.1 внутри WSL до клиента не достучится никогда. Именно на этом спотыкается большинство попыток.
Свежие сборки Windows 11 поддерживают зеркальный режим: добавьте networkingMode=mirrored в секцию wsl2 файла .wslconfig в папке пользователя, перезапустите WSL — и 127.0.0.1 заработает напрямую. Это самый простой путь. Если остаётесь на NAT, нужен адрес хоста Windows в подсети WSL, и обязательно включите разрешение локальной сети, иначе ядро слушает только петлевой адрес.
Первый подозреваемый — брандмауэр
При включении доступа из локальной сети Windows один раз спросит про брандмауэр. Если запрос закрыли, все дальнейшие шаги будут молча проваливаться.
Четыре шага до соединения
- 1
Включите разрешение локальной сети
Включите его в настройках Clash. В первый раз Windows спросит про доступ через брандмауэр — разрешите хотя бы для частных сетей.
- 2
Найдите адрес хоста в режиме NAT
Внутри WSL выполните ip route show default: третье поле и есть адрес хоста Windows, его нужно подставить в https_proxy. Адрес может меняться при каждом перезапуске WSL, поэтому читайте его динамически в .bashrc, а не прописывайте жёстко.
- 3
Настройки прокси в Docker Desktop
В разделе Resources и далее Proxies укажите http://host.docker.internal с вашим портом. Учтите, что это влияет только на скачивание образов и сборку: программы внутри контейнеров эти настройки не затрагивают.
- 4
Внутри контейнера
Передайте HTTPS_PROXY и HTTP_PROXY через -e в docker run либо задайте значения по умолчанию в секции proxies файла .docker/config.json в папке пользователя. Заодно добавьте localhost и внутренние реестры в noProxy.
Проверяйте обе стороны отдельно
В WSL выполните curl к ipinfo.io/ip и убедитесь, что возвращается адрес узла. Со стороны Docker запустите одноразовый контейнер с curl по тому же адресу. Работающий WSL не означает работающие контейнеры, поэтому проверять нужно независимо.
- Настройки для зеркального режима и NAT не взаимозаменяемы: со сменой режима меняется и адрес
- Правки .wslconfig применяются только после wsl --shutdown
- Локальные реестры добавьте в noProxy, иначе скачивание станет медленнее
Частые вопросы
У меня включён TUN. WSL всё равно нужно настраивать?
Зависит от режима сети. При зеркальном режиме перехват обычно работает. При NAT трафик WSL идёт через виртуальный коммутатор Hyper-V и может полностью миновать адаптер TUN, поэтому переменные окружения остаются надёжным вариантом.
Вчера работало, сегодня нет.
Проверьте, не изменился ли адрес хоста. В режиме NAT он может меняться при каждом перезапуске WSL, и жёстко прописанное значение устаревает. Читайте его при старте оболочки.