我有以下设置:
- 本地网络上的一台计算机连接到另一个网络上的 VPN,我们将其称为机器 A
- 本地网络上的一台机器可以访问机器 A,但无法访问 VPN。我们将其称为机器 B。
现在,如果我想从机器 B 访问 VPN 内的主机,我当然可以进行 ssh 转发或链式 ssh 调用(例如ssh machine-a ssh machine-vpn
),但这只能给我有限的访问权限(即使用该-L
选项在 SSH 隧道中指定的端口数)。有没有办法使用 SSH 创建某种“虚拟主机”,这样 SSH 中与该虚拟主机的任何连接都将转发到 VPN 内的目标主机,而不管端口是什么?换个方式提出这个问题:
从机器 A:
ssh -L 16000:machine-vpn:22 machine-a #creating the initial tunnel to the SSH port on machine-vpn
#now ssh -p 16000 localhost does an SSH to the machine behind the vpn
#create the Virtual Host somehow using SSH, call the virtual host vhost
ssh vhost #this will ssh to the machine behind the vpn, using ssh tunnel
ftp vhost #this will ftp to the machine behind the vpn, using ssh tunnel
#etc.
有什么办法可以做这样的事吗?
答案1
SSH 还支持动态转发。通过指定动态端口,ssh 客户端将创建一个 SOCKS5 代理,然后您可以使用它来转发所有流量并使其离开远程主机。
ssh -D2000 machine-a
您可以配置大多数程序(浏览器和 ftp 等)以使用 socks 代理。在此示例中,您需要做的就是将 localhost:2000 指向为 SOCKS 代理。
答案2
查看最新版本的 OpenSSH 中的Tunnel
和选项。TunnelDevice