本地计算机和远程计算机位于 NAT 后面。如何使用 SOCKS 使本地网络可访问?

本地计算机和远程计算机位于 NAT 后面。如何使用 SOCKS 使本地网络可访问?

我有一个

  • 本地计算机(NAT 后面)。
  • 可公开访问且具有固定 IP 地址的中间服务器。
  • 远程计算机(位于 NAT 后面,与本地计算机不同)。

我想通过本地计算机和使用 SOCKS/SSH 的中间服务器临时共享对本地网络上的网站的访问权限,以便远程计算机可以查看它。当远程计算机和本地计算机都是NAT 之后? 如果是,怎么办?

                      NAT       -   Static Public IP  - NAT
Local Network <- Local Computer - Intermediate Server - Remote Computer 

我知道我可以使用 ngrok 和类似的服务来做到这一点,但我想学习如何使用 SSH 和 SOCKS 自己做到这一点。

赏金:我将优先考虑带有示例代码和操作说明的答案。谢谢。

更新:我需要 SOCKS 进行动态端口转发。 多跳 SOCKS

答案1

如果您想要/需要动态端口转发,您可以尝试以下配置:

l-user :我的本地计算机上的用户
i-user :中间用户 中间
:中间主机的 ip 地址

在我的本地计算机上:

ssh -R 10022:localhost:22 i-user@intermediate

在遥控器上:

ssh -D 3456 -J i-user@intermediate -p 10022 l-user@localhost

在发起 连接之前,my-local-computer和之间的远程端口转发必须存在。intermediatethe-remote

在此配置中,the-remote充当端口 3456 上的 SOCKS5 代理,并通过将流量转发到其应在本地局域网中结束的位置 intermediatemy-local-comuter

答案2

假设:您的本地 Web 服务器在 IP 为 192.168.1.100 的单独主机上运行,
​​中间服务器在 IP 为 2.3.4.5 上运行

您的本地主机通过 ssh 连接到中间服务器并执行一些远程端口转发:

sudo ssh -R 10080:192.168.1.100:80 -R 10443:192.168.1.100:443 [email protected]

您的远程主机通过 ssh 连接到中间服务器并执行一些本地端口转发:

sudo ssh -L 80:localhost:10080 -L 443:localhost:10443 [email protected]

书面上:
本地计算机使用具有远程端口转发功能的 ssh 隧道“捕获”lo中间服务器接口上的端口 10080 和 10443。然后将两个远程端口转发到本地网络中的 WebServer (192.168.1.100) 的端口 80 和 443。
远程计算机使用其自己的 ssh 隧道“捕获”其自身接口上的端口 80 和 443 ,并将它们转发到中间服务器接口lo上的端口 10080 和 10443 。 因此,远程计算机上连接到内部端口 localhost:80 或 localhost:443 的任何应用程序都将被转发到中间服务器的内部端口 :10080 或 :10443,然后通过本地计算机转发到 Web 服务器的 LAN 接口上的端口 192.168.1.100:80 或 192.168.1.100:443。 lo

希望有所帮助。

编辑:重新设计了接口的 IP 地址lo

相关内容