我有以下设置,
机器 A(Windows 10 并连接到 ISP(X))和机器 B(Windows 10 并连接到 ISP(Y))。这两台机器(A 和 B)都没有任何直接连接。机器 A 可以访问机器 C(在云端运行 RHEL 的 Linux Box),同样,机器 B 也可以访问机器 C。
现在将机器 C 作为隧道,是否可以从机器 A 访问在机器 B(VirtualBox 内部)中运行的 Linux 机器(Ubuntu)?如果可以,我们该怎么做?我猜这可以通过反向 ssh 隧道实现,但不确定步骤。
为了给出更多的想法,设置如下所示
PUBLIC IP SSH (Putty) (Machine C)
Machine A Windows 10 (192.168.1.2) --> ISP(49.xxx.xxx.xxx) ---> (34.xxx.xx.xxx)
PUBLIC IP SSH (Putty) (Machine C)
Machine B Windows 10 (192.168.1.15) --> ISP(216.xxx.xxx.xxx) --->(34.xxx.xx.xxx)
Machine B Windows 10 (192.168.1.15) --> Virtual Box (192.168.1.100)
现在我想从机器 A 访问 192.168.1.100(ubuntu 机器),我该如何实现?只有一台机器(机器 C)可供机器 A 和机器 B 访问。有没有办法进行一些隧道传输并从机器 A 访问 192.168.1.100?
注意:我无法访问路由器来进行转发。因此我必须通过建立隧道来实现这一点。
答案1
应该可以。我可以提供 Linux 命令,您必须查找在 Windows 上使用的 SSH 客户端的等效配置。
从VM到B:
ssh -R localhost:2022:localhost:22 192.168.1.15
这会将 Ubuntu VM 上的端口 22(大概是 SSH)转发到 192.168.1.15 上的端口 2022。
从B到C:
ssh -R localhost:3022:localhost:2022 34.xxx.xx.xxx
这会将localhost:2022
(其本身是由 VM 中运行的上一个命令转发的)转发到 C 上的 3022。
从A到C:
ssh -L 4022:localhost:3022 34.xxx.xx.xxx
这会将localhost:3022
C 上的转发至 A 的 4022。
因此我们有一个转发链:
- 4022 上 A 至
- 3022 在 C 上
- 2022 年 B 至
- 虚拟机上 22
最后,关于 A:
ssh localhost:4022
这应该连接到虚拟机。
-L
位于LocalForward
ssh_config
-R
是RemoteForward
此链可以缩短。例如,根据所涉及的网络设置,您可以从 B 到 C 执行:
ssh -R :3022:192.168.1.15:22 34.xxx.xx.xxx
B 会直接将 C 上的 3022 转发到虚拟机上的 22。而在 A 上:
ssh 34.xxx.xx.xxx:3022