Маршрутизация трафика POSTMAN из Windows в WSL2

Вопрос или проблема

Я использую Ubuntu 20.04 на Windows Subsystem for Linux. У меня запущен VPN внутри Ubuntu для доступа к API на удаленной системе.

Этот VPN работает только с клиентским приложением для Linux. Я хочу попробовать API, используя Postman в Windows, но это находится “вне” WSL2 и VPN-сети.

Поскольку я не могу установить VPN в Windows и Postman не работает под Linux/WSLg, как я могу перенаправить трафик запроса от Postman в Windows в WSL2?

Я думаю, что, вероятно, отвечу на ваш вопрос дважды. Этот ответ является ортогональным. Другой, когда я разберусь (или если кто-то другой разберется), адресует фактический сетевой вопрос.

Но для этого ответа я хотел бы предположить, что вам может не понадобиться Postman в Ubuntu/WSL2, если ваш API основан на REST. Ваши нужды могут быть удовлетворены (и потенциально лучше обслужены) в Ubuntu с помощью реальных инструментов Linux.

Раньше я использовал Postman, но с тех пор, как начал использовать WSL, я лично не видел в нем необходимости. Это не значит, что ваш случай использования может быть другим или что вам может просто нравиться Postman, так как вы с ним уже знакомы. В этом нет ничего плохого, и мы все равно попробуем придумать ответ на это.

Но возможно вам стоит рассмотреть:

  • HTTPie для REST-операций, которые взаимодействуют с вашим API. Это гораздо более богатая альтернатива curl или wget.
  • jq — стандартный и мощный инструмент для разбора данных JSON.
  • Nushell для разбора JSON и многих других типов структурированных данных. Высоко рекомендую — недавно использовал его несколько раз для работы с API Stack Exchange, и я не уверен, что мне когда-либо снова понадобится jq.

Однако, если ваш API основан на GraphQL, то я не уверен, что могу предложить лучшую альтернативу, чем Postman, в данный момент. Altair выглядит многообещающе, но его, как правило, устанавливают на Linux как Snap (что не работает хорошо под WSL2).

Я обычно предпочитаю использовать ssh для туннелирования/перенаправления трафика в таких ситуациях. Поскольку вы ответили в комментариях, что можете подключаться из WSL в Windows, пока VPN активно, самый простой способ сделать это — настроить сервер OpenSSH в Windows.

Полные инструкции можно найти здесь, но обычно это просто вопрос (из админского PowerShell):

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

Давайте предположим для следующей команды, что:

  • Ваш сервер API — 10.0.0.5 (доступен только через VPN)
  • Ваш API работает на порту 8000 на удаленном сервере
  • Вы хотите, чтобы API был доступен на порту 80 в Postman
  • Ваше имя пользователя в Windows — heydude101

С учетом этого, в Ubuntu/WSL2 (предположим, Bash), выполните следующую команду:

ssh -R 80:10.0.0.5:8000 heydude101@$(hostname).local

Войдите с паролем от Windows.

  • `$(hostname).local найдет правильный адрес для сервера SSH в Windows, используя mDNS, как я более подробно объясняю в этом ответе.

  • -R настраивает удаленное перенаправление, чтобы сервер OpenSSH в Windows начал перенаправление соединений:

    • с localhost:80
    • через Ubuntu
    • к удаленному серверу API

Теперь подключение Postman к localhost:80 должно позволить вам получить доступ к API.

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

Ответ или решение

Маршрутизация трафика POSTMAN с Windows на WSL2

Для эффективного тестирования REST API на удаленной системе через VPN-клиент, работающий исключительно на Linux, вы столкнулись с проблемой: Postman, установленный на Windows, находится "вне" сети VPN и не может подключиться к API. Это требует решения, которое позволит направить трафик Postman на WSL2, где работает ваш VPN.

Введение в проблему

Вы используете Ubuntu 20.04 на Windows Subsystem for Linux (WSL2) и разместили клиент VPN в этом окружении, поскольку он поддерживается только для Linux. Однако, вы хотите тестировать API с помощью Postman, который установлен на Windows. Основная сложность заключается в том, что Postman не функционирует внутри Linux/WSLg, а VPN недоступен снаружи WSL2.

Возможные пути решения

1. Использование SSH-туннелирования

Одним из наиболее простых и надежных способов решения данной проблемы является использование SSH для туннелирования и переадресации трафика:

  • Установка OpenSSH на Windows: На Windows потребуется настроить сервер OpenSSH, чтобы создать туннель. Вы можете сделать это, выполнив команды в PowerShell от имени администратора:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
}
  • Создание SSH-туннеля из WSL2: Предполагая, что сервер API доступен только через VPN по адресу 10.0.0.5 и работает на порту 8000, выполните следующую команду в WSL2:
ssh -R 80:10.0.0.5:8000 ваш_пользователь_на_Windows@$(hostname).local

Эта команда создаст удаленное перенаправление, позволяющее направлять все запросы на localhost:80 в Postman через Ubuntu на удаленный сервер API.

  • Настройка файла hosts на Windows: Если API требует определенное имя хоста, можно настроить файл hosts на Windows, добавив строку с картой этого имени хоста на 127.0.0.1.

2. Рассмотрите альтернативы Postman

Пока решение выше обеспечит доступ к API с помощью Postman, стоит рассмотреть возможность использования CLI-инструментов для REST API, которые могут быть более гибкими и интегрируются прямо в вашу WSL2-установку:

  • HTTPie: Простой и удобный инструмент, превосходящий curl в плане юзабилити.
  • jq: Незаменимое средство для обработки JSON-данных.
  • Nushell: Мощная альтернатива для работы с JSON и другими структурированными данными.

Эти инструменты предоставляют возможности, которые могут сделать работу с API в Linux проще и эффективнее. Однако, если Postman остается предпочтительным инструментом, решение через SSH-туннелирование является самым подходящим.

Заключение

Сводя воедино все вышеописанное, можно сказать, что эффективное использование SSH-туннелирования позволит направить трафик из Postman на WSL2, обеспечив тем самым доступ к API через VPN. В то же время, использование CLI-инструментов может стать более рациональным подходом, в зависимости от сложности задач и предпочтений пользователя. Важно учитывать как технологические возможности, так и собственные предпочтения при выборе инструмента.

Оцените материал
Добавить комментарий

Капча загружается...