我在 Windows Subsystem for Linux 下运行 Ubuntu 20.04。我在 Ubuntu 内部运行 VPN 来访问远程系统上的 API。
此 VPN 仅适用于 Linux 客户端应用。我想在 Windows 中使用 Postman 尝试 API,但这在 WSL2 和 VPN 网络“之外”。
由于我无法在 Windows 中安装 VPN,并且 Postman 无法在 Linux/WSLg 下运行,我该如何将 Windows Postman 请求流量重新路由到 WSL2?
答案1
我想我可能会回答你的问题两次。这一次是正交答案。另一次,当我弄清楚(或者如果其他人弄清楚)时,将解决实际的网络问题。
但对于这个答案,我建议你可能不会真正需要如果您的 API 基于 REST,则可以使用 Ubuntu/WSL2 上的 Postman。使用实际的 Linux 工具,您的需求可能会在 Ubuntu 中得到满足(并且可能得到更好的满足)。
我以前用过 Postman,但自从使用 WSL 以来,我个人真的没有发现它的需求。这并不是说你的用例可能不同,或者你可能只是因为熟悉 Postman 而更喜欢它。这没什么不对,我们仍然会看看是否能找到答案。
但你可能会考虑:
- HTTPie用于与您的 API 交互的 REST 操作。它是
curl
或 的更丰富的替代方案wget
。 jq
——解析JSON数据的标准而强大的工具。- 努壳用于解析 JSON 和许多其他结构化数据类型。强烈推荐——我最近多次使用它来处理堆栈交换 API,而且我不确定我是否还会需要
jq
它。
但是,如果您的 API 是基于 GraphQL 的,那么我不确定目前是否能提供比 Postman 更好的替代方案。 牵牛星看起来很有希望,但它似乎通常作为 Snap 安装在 Linux 上(在 WSL2 下运行不佳)。
答案2
对于这种情况,我通常更喜欢使用ssh
隧道/转发流量。既然你在评论中回答说你可以连接从西弗吉尼亚海岸到在 VPN 处于活动状态时在 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)) {
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 端口上运行
- 您希望在 Postman 中通过端口 80 访问该 API
- 您的 Windows 用户名是
heydude101
完成后,在 Ubuntu/WSL2(假设是 Bash)中发出以下命令:
ssh -R 80:10.0.0.5:8000 heydude101@$(hostname).local
使用您的 Windows 密码登录。
`$(hostname).local 将使用 mDNS 找到 Windows SSH 服务器的正确地址,我将在这个答案。
设置
-R
远程转发,以便 Windows OpenSSH 服务器开始转发连接:- 从
localhost:80
- 通过 Ubuntu
- 到远程 API 服务器
- 从
所以现在,连接 Postmanlocalhost:80
应该允许您访问 API。
如果 API 服务器对特定主机名有要求,那么您可以在 Windows hosts 文件中进行设置。只需将主机名映射到,127.0.0.1
即可在本地解析。