我有一个
- 本地计算机(NAT 后面)。
- 可公开访问且具有固定 IP 地址的中间服务器。
- 远程计算机(位于 NAT 后面,与本地计算机不同)。
我想通过本地计算机和使用 SOCKS/SSH 的中间服务器临时共享对本地网络上的网站的访问权限,以便远程计算机可以查看它。当远程计算机和本地计算机都是NAT 之后? 如果是,怎么办?
NAT - Static Public IP - NAT
Local Network <- Local Computer - Intermediate Server - Remote Computer
我知道我可以使用 ngrok 和类似的服务来做到这一点,但我想学习如何使用 SSH 和 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
和之间的远程端口转发必须存在。intermediate
the-remote
在此配置中,the-remote
充当端口 3456 上的 SOCKS5 代理,并通过将流量转发到其应在本地局域网中结束的位置 intermediate
。my-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
。