是否可以使用端口转发通过 AWS 实例路由往返于我的本地 PC 的所有流量?

是否可以使用端口转发通过 AWS 实例路由往返于我的本地 PC 的所有流量?

我正在尝试利用 PuTTY 的端口转发功能建立从我的家用电脑(在 Windows 11 上运行)到我已配置和设置的 AWS Lightsail 实例(在 Ubuntu LTS 20.04 上运行)的连接。这个想法是通过我的家用电脑使用实例可用的互联网连接 - 有点像使用代理服务器或 VPN 访问互联网。

假设以下参数:

  • AWS 实例的公网 IP 地址:x.x.x.x
  • AWS 实例的私有 IP 地址:Y.Y.Y.Y
  • SSH 端口:22
  • 6088我已经在账户级别和实例级别开放了端口
  • 我的本地电脑的公网IP地址(路由器IP):a.a.a.a
  • 我的本地电脑的私有 IP 地址:b.b.b.b

到目前为止,我的理论理解是,我应该使用 PuTTY 将远程 Lightsail 实例的端口 6088 进行远程端口转发到我家用电脑对应的本地端口 6088。

在将家用电脑的代理设置配置为 后,我一直尝试(未成功)从我的电脑访问远程互联网localhost:6088。我最初计划通过 VNC 客户端-服务器方案访问远程实例,但也无法使其工作。

经过一番 Google 搜索后,我了解到 AWS 还提供了专门用于设置 VPN 网络的实例,这些实例支持我正在考虑的那种用例。

有人能建议正确的方法吗?

答案1

  1. 您反向使用了转发模式。“远程”转发使服务器成为侦听器;将建立到服务器地址:端口的连接(可能在服务器内部的 localhost:6088,或者在其他主机的 serverip:6088)并转发到您的客户端系统。

    你想要做的是完全相反的,所以它会涉及到更像“本地”转发模式,其中 SSH客户是端口 6088 的监听器(与 AWS 服务器的防火墙规则无关)。

  2. “远程”和“本地”模式都是固定功能;也就是说,它们不允许应用指定要连接的位置 - 它们始终只转发到指定的目的地。例如,如果您有一个“本地”转发,其中本地端口为 6088,远程目的地为 google.com:443,那么每一个与 localhost:6088 的连接将被中继到 google.com:443 而不会中继到其他任何地方。

    (这也意味着,即使“本地”或“远程”曾是合适的模式,你不会使用端口代理人配置——您可以直接使用它,就像它是实际服务一样。)

    相反,您需要 PuTTY 中的第三种模式 - “动态”转发 - 它仍然与“本地”属于同一类别,但它使 PuTTY 充当 SOCKS 代理。使用端口 6088 上的“动态”转发,您可以将浏览器配置为使用 localhost:6088 作为 SOCKS 代理,并能够浏览 AWS 服务器。

  3. PuTTY 只能充当 SOCKS 代理,Firefox 和 Chrome 知道如何使用支持 SOCKS 的代理,但许多其他应用程序却不知道;支持“HTTP CONNECT”但不支持 SOCKS 的应用程序比较常见。

    由于 PuTTY 没有模拟该功能,你可能需要运行真实的AWS 服务器上的 HTTP 代理服务器(例如 Squid 或 Privoxy),然后使用“本地”转发通过 SSH 访问它。(或者可以做 Tor 所做的/曾经做过的事情,在本地运行 Privoxy/Polipo 并将其指向 PuTTY 的“动态”端口,然后转到“浏览器→HTTP→Privoxy→SOCKS→PuTTY→SSH→AWS”。)

  4. 以上所有内容都只能处理 TCP 流量;如果您需要使用 UDP(或者即使您想要ping代理),那么这两种代理类型都无法工作。

    在这种情况下,您需要在 PC 和 AWS 服务器之间设置整个 VPN 隧道。(SSH 无法在 Windows 上执行此操作,并且通常不太适合 Windows;相反,您可以使用 OpenVPN、Tailscale、WireGuard 或类似的东西。)您不需要为此目的使用特殊类型的服务器。

    (有些类型的服务器不适合设置 VPN,即某些提供商提供的极其便宜的“VPS”,它们只是伪装的 OpenVZ 容器,尽管这些 VPS 通常至少可以托管 OpenVPN。我不认为 AWS 有类似的东西;他们所有的 VPS 都是功能齐全的虚拟服务器。)

相关内容