如何通过反向 SSH 隧道连接到同一子网中主机的其他 IP?

如何通过反向 SSH 隧道连接到同一子网中主机的其他 IP?

情况:Macbook 的 IP 为 192.168.1.6(在家)。Linux VM 的 IP 为 10.0.2.15,因为它在“共享网络”模式下作为 VM 客户机运行。从客户机开始,无论使用什么网络,Mac 始终具有固定 IP 10.0.2.2。要通过 SSH 访问 VM,我使用Linux VM,因此我可以使用命令 ssh 进入端口 2023 的本地主机来访问 VM 。但是,当我想从本地 192.168.1.x 网络中的另一台机器(例如 Raspberry Pi 或手机)通过 ssh 进入 VM 时,我尝试通过 访问它,但它显示“连接被拒绝”。它不是 VM 中的防火墙,否则我无法从 Mac 连接。并且 Mac 上的防火墙允许 SSH 连接到它(大概是通过非标准端口,如 2023),后者被转发到 VM Linux。当我通过反向隧道转发 Linux VM 的 80 和 443 端口时,也会发生同样的情况。看来 -D FORWARDED:HOSTIP:ORIGINAL 仅在我连接到确切的 HOSTIP(在本例中为 localhost)时才有效,而室内 IP 地址(如 192.168.1.6)则被拒绝。ssh -fN -D 2023:localhost:22 [email protected]ssh -p 2023 vmuser@localhostssh -p 2023 [email protected]

我究竟做错了什么 ?

答案1

实际上,当您使用命令“ssh -fN -D 2023:localhost:22[电子邮件保护]“您已经看到端点是“localhost(ssh 服务器本身)”...

当您成功 ssh 到 SSH 服务器后,您实际上可以使用命令 netstat -n -l -p | grep 2023 检查端口“2023”,您应该看到如下内容:

TCP 0 0 127.0.0.1:2023

这就是为什么同一子网中的其他服务器无法连接到它,因为它在本地绑定为 127.0.0.1 。但由于“SSH 反向隧道”始终是回到本地主机的隧道,因此我认为没有解决方案。

答案2

首先,假设您的隧道命令是ssh -fN -R 2023:...而不是ssh -fN -D 2023:...

现在,要允许远程主机连接,您需要在 中指定 bind_address ssh -R,最简单的方法是使用 ,*这意味着所有地址。此外,出于安全原因,默认情况下,sshd 会阻止监听除环回之外的其他接口,因此您需要将选项设置为GatewayPorts(在 Linux 中,这是在 中,我假设在 Mac 中也是一样)。yessshd_config/etc/ssh/sshd_config

总结一下:

  • 添加GatewayPorts yes到您的 (macbook)/etc/ssh/sshd_config
  • 重新启动 ssh 服务器。
  • 用以下命令替换您的隧道命令:ssh -fN -R *:2023:localhost:22 [email protected]

(我没有尝试过,但*应该按照手册页操作。如果不行,请尝试0.0.0.0192.168.1.6,尽管最后一个会阻止您使用 进行本地连接localhost)。

答案3

我最初的问题中确实指的是 -R,而不是 -D。确实有效,GatewayPorts yes在 Mac 上设置/etc/ssh/sshd_config成功了。确实,文件夹与 Linux 上的相同。

相关内容