Использование Dev Proxy с WSL

На первый взгляд
Цель: Использование прокси-сервера разработки с подсистемой Windows для Linux (WSL)
Время: 15 минут
Предварительные требования:Настройка прокси-сервера разработки, установленного WSL

При разработке приложений в WSL (подсистема Windows для Linux) вы можете использовать прокси-сервер разработки: запуск приложения на узле Windows или в WSL. Оба подхода имеют свои преимущества в зависимости от рабочего процесса разработки.

Самый простой подход — установить и запустить прокси-сервер разработки в Windows. При использовании автоматического прокси-сервера WSL и зеркального сетевого режима WSL использует системный прокси-сервер Windows, поэтому трафик приложений, работающих в WSL, перехватывается Dev Proxy без настройки прокси-сервера в WSL.

Настроить сеть WSL

Прокси-сервер разработки регистрируется в качестве системного прокси-сервера Windows по адресу localhost (127.0.0.1:8000 по умолчанию). Чтобы приложения в WSL использовали этот прокси-сервер, включите следующие параметры в разделе [wsl2] файла конфигурации WSL, расположенного по адресу %UserProfile%\.wslconfig в Windows:

[wsl2]
networkingMode=mirrored
autoProxy=true
Setting Description
networkingMode=mirrored Зеркально отражает сетевые интерфейсы Windows в Linux, что позволяет приложениям в WSL с помощью 127.0.0.1 подключаться к серверам, работающим в Windows, например к Dev Proxy. Требуется Windows 11 версии 22H2 или более поздней версии. Значение по умолчанию — nat.
autoProxy=true Делает так, чтобы WSL использовал параметры HTTP-прокси Windows, чтобы прокси-сервер, настроенный в Windows, автоматически устанавливался в WSL. Доступно на Windows 11. Включено по умолчанию.

После изменения .wslconfig файла перезапустите WSL, чтобы изменения вступили в силу:

wsl --shutdown

Замечание

В сетевом режиме NAT по умолчанию приложения в WSL не могут подключаться к Dev Proxy в Windows с помощью 127.0.0.1. Если вы не можете использовать зеркальный сетевой режим, запустите Dev Proxy в WSL. Дополнительные сведения см. в разделе Вариант 2: Использование прокси-сервера разработки в WSL.

Дополнительные сведения см. в разделе Доступ к сетевым приложениям с помощью WSL и Настройка дополнительных параметров в WSL.

Настройка прокси-сервера разработки в Windows

  1. Установите прокси-сервер разработки в Windows с помощью winget или ручной установки.

  2. Запуск прокси-сервера разработки:

    devproxy
    
  3. При появлении запроса доверяйте сертификату.

Использование прокси-сервера разработки из WSL

При запуске Dev Proxy в качестве системного прокси-сервера Windows (поведение по умолчанию), если вы настроили сеть WSL, приложения в WSL автоматически перенаправляют свой трафик через него.

Запустите ваше приложение в WSL как обычно. Dev Proxy перехватывает HTTPS-запросы, сделанные приложениями, которые учитывают параметры прокси-сервера.

Это важно

Перезапустите WSL после запуска или остановки Dev Proxy (прокси для разработки)

WSL считывает параметры прокси-сервера Windows при запуске. Если вы запускаете прокси-сервер разработки после того, как WSL уже запущен, или при остановке и перезапуске прокси-сервера разработки необходимо перезапустить WSL, чтобы изменения вступили в силу:

wsl --shutdown

Затем запустите новый сеанс WSL.

Доверие к сертификату в WSL

Чтобы прокси-сервер разработки перехватил трафик HTTPS, приложения в WSL должны доверять сертификату прокси-сервера разработки. Вы можете скопировать сертификат из Windows или экспортировать его с помощью API прокси-сервера разработки.

Вариант A. Копирование сертификата из Windows

  1. В WSL скопируйте сертификат из Windows:

    cp "/mnt/c/Users/<your-username>/AppData/Local/Programs/Dev Proxy/rootCert.pfx" ~/
    
  2. Экспорт и установка сертификата:

    # Export the certificate
    openssl pkcs12 -in ~/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:""
    # Install the certificate
    sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/
    # Update certificates
    sudo update-ca-certificates
    

Вариант B. Использование API прокси-сервера разработки

ДЛЯ API прокси-сервера разработки требуется маркер носителя. Пока Dev Proxy работает в Windows, получите маркер, выполнив команду api token в терминале Windows:

devproxy api token

Затем в WSL скачайте и установите сертификат. Замените <token> на маркер, который вы получили:

# Download the certificate from Dev Proxy API
curl -H "Authorization: Bearer <token>" -o dev-proxy-ca.crt "http://127.0.0.1:8897/proxy/rootCertificate?format=crt"
# Install the certificate
sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/
# Update certificates
sudo update-ca-certificates

Замечание

Для некоторых приложений может потребоваться дополнительная конфигурация для доверия к хранилищу системных сертификатов. Для Node.js приложений может потребоваться задать NODE_TLS_REJECT_UNAUTHORIZED=0 для целей разработки. Отключение проверки сертификата не рекомендуется для рабочего кода.

Вариант 2: Прокси-сервер для разработки внутри WSL

Если вы предпочитаете запускать прокси-сервер разработки полностью в WSL, установите его с помощью метода установки Linux и настройте прокси-сервер вручную.

Установка прокси-сервера разработки в WSL

Для извлечения Dev Proxy требуется unzip. Свежие дистрибутивы WSL, такие как Ubuntu, не включают его по умолчанию. Установите unzip:

sudo apt update
sudo apt install unzip

Установите прокси-сервер разработки с помощью скрипта установки:

bash -c "$(curl -sL https://aka.ms/devproxy/setup.sh)"

Настройка прокси-сервера вручную

Так как WSL не имеет графической настольной среды, Dev Proxy не может автоматически зарегистрироваться в качестве системного прокси-сервера. Настройте приложения для использования прокси-сервера вручную.

  1. Создайте файл конфигурации прокси-сервера для разработки с asSystemProxy заданным значением false:

    {
      "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
      "asSystemProxy": false,
      "plugins": [
        {
          "name": "RetryAfterPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
        },
        {
          "name": "GenericRandomErrorPlugin",
          "enabled": true,
          "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
          "configSection": "genericRandomErrorPlugin"
        }
      ],
      "urlsToWatch": [
        "https://jsonplaceholder.typicode.com/*"
      ],
      "genericRandomErrorPlugin": {
        "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/genericrandomerrorplugin.schema.json",
        "errorsFile": "devproxy-errors.json",
        "rate": 50
      },
      "logLevel": "information"
    }
    
  2. Запуск прокси-сервера разработки:

    devproxy
    
  3. Доверяйте сертификату:

    # Export Dev Proxy root certificate
    openssl pkcs12 -in ~/.config/dev-proxy/rootCert.pfx -clcerts -nokeys -out dev-proxy-ca.crt -passin pass:""
    # Install the certificate
    sudo cp dev-proxy-ca.crt /usr/local/share/ca-certificates/
    # Update certificates
    sudo update-ca-certificates
    
  4. Настройте приложение для использования прокси-сервера. HTTPS_PROXY Задайте переменную среды:

    export HTTPS_PROXY=http://127.0.0.1:8000
    

    Или укажите его при запуске приложения:

    HTTPS_PROXY=http://127.0.0.1:8000 node app.js
    

Подсказка

Дополнительные сведения о настройке прокси-сервера для приложений Node.js см. в разделе "Использование прокси-сервера разработки" с Node.js приложениями.

Сравнение подходов

Функция Узел Windows (вариант 1) Внутри WSL (вариант 2)
Сложность настройки Простота Умеренный
Requirements Windows 11 22H2 или более поздней версии, режим сети с зеркальным отображением WSL None
Управление сертификатами Однократное копирование из Windows Экспорт вручную
Конфигурация прокси-сервера Автоматически (WSL Auto Proxy) Вручную (HTTPS_PROXY)
Обязательный перезапуск WSL Да, при переключении прокси-сервера нет
Работает со всеми приложениями WSL Да Зависит от поддержки прокси приложения

В большинстве случаев запуск прокси-сервера разработки в Windows (вариант 1) является рекомендуемом подходом из-за простоты и автоматической настройки прокси-сервера.

Устранение неполадок

Запросы не перехватываются при использовании узла Windows

Если прокси-сервер разработки в Windows не перехватывает запросы из WSL:

  1. Убедитесь, что networkingMode=mirrored и autoProxy=true заданы в [wsl2] разделе файла .wslconfig . Дополнительные сведения см. в разделе Настройка сети WSL.

  2. Перезапустите WSL, чтобы обновить параметры прокси-сервера:

    wsl --shutdown
    
  3. Убедитесь, что прокси-сервер разработки запущен и зарегистрирован в качестве системного прокси-сервера.

  4. Убедитесь, что сертификат Dev Proxy доверенный в WSL.

unzip: команда не найдена

Если скрипт установки завершается ошибкой unzip: command not found , установите unzip и запустите скрипт установки еще раз:

sudo apt update
sudo apt install unzip

Ошибки сертификатов

Если вы видите ошибки сертификата:

  1. Убедитесь, что сертификат установлен в WSL, выполнив действия, описанные в разделе "Доверять сертификату в WSL".
  2. Для Node.js приложений может потребоваться настроить приложение для использования прокси-агента. См. раздел "Использование прокси-сервера разработки" с Node.js приложениями.

Проблемы с сетью WSL

WSL 2 использует виртуализированный сетевой адаптер. При возникновении проблем с сетью:

  1. Убедитесь, что брандмауэр Windows разрешает Dev Proxy.
  2. Попробуйте использовать localhost вместо 127.0.0.1 настройки прокси-адреса.