连接局域网下的虚拟机,在网上找到的做法通常是:在VMware配置端口转发 最近了解隧道技术,突发奇想:能不能使用SSH隧道连接局域网下的虚拟机呢? 在网上找到的相关资料不多,经过自己摸索,终于实现了 使用SSH隧道连接局域网下的虚拟机,主要有两种方式可以实现 1: 本地端口转发; 2: 动态端口转发

首先,假设网络图如下,A和B在同一局域网下,我们的目的是: 实现 A 连接到 C 的SSH服务

方法一 : 本地端口转发

大体思路: 在A下创建 A --> C 的SSH隧道,就可以访问A下的指定端口,通过隧道转发,访问到C的22端口了 具体实现如下 :

1#B安装SSH服务

参考文章 https://www.cnblogs.com/sparkdev/p/10166061.html

  • 这是非常关键的一步(作为小白,我刚开始就异想天开,直接就想通过A连接到C,直到多次尝试失败并且想通了)

  • 我的电脑 B 的系统是windows10 1909,自带了OpenSSH Server软件;如果版本是wondows10 1809以下或wondows7的同学,可以网上搜索windows怎么安装openSSH服务

(1) Win10打开 设置(Win + I) ==> 应用 ==> 应用和功能 ==> 可选功能 => 添加功能 => OpenSSH服务器(点击安装)

(2) 打开 任务管理器(Shift + Ctrl + Esc) ==> 任务 ==> 左下角点击"打开服务"; 找到两个OpenSSH服务,右键开启

(3) 打开 控制面板 ==> 系统和安全 ==> Windows Defender 防火墙 ==> 启用或关闭windows defender防火墙;选择关闭防火墙; (或者在入站规则添加允许22端口)

到此, B已经配置完成

2#A建立 A --> C 的隧道

  • 本人使用的是PuTTY的工具, 使用其他工具或PowerShell也是可以的

  • 首先保证 C 关闭iptablesnftables防火墙 (或配置允许22端口)

  • 通过"中间人" B ; 在 A 电脑上使用PuTTY建立起与 C 的SSH隧道 (本地端口转发)

在 A 上配置(基于文章开头假设的网络图) :

  • 点击open,会出现登录,注意:这里登录的是 B 电脑,也就是要输入B的windows的用户名和密码;

  • 到这里,你已经建立起 A --> C 的隧道了, 注意: 请不要关闭PuTTY窗口, 否则隧道会被关闭

PuTTY如上设置,相当于使用命令 ssh -CfNg -L 127.0.0.1:6666:192.168.2.2:22 192.168.1.107

3#A通过隧道连接 C 电脑

  • 终于到最后一步了, 很简单, 在 A 电脑开启新的PuTTY窗口, 请求 A 本地的 刚才自定义的 6666端口就可以啦

  • 恭喜你, 成功通过SSH隧道连接到 C ;因为隧道是 A --> C 的且加密的, B 不会监听到流量

方法二 : 动态端口转发

大体思路: 在A下创建 A --> B 的SSH隧道,把 B 作为代理(Proxy), 就可以实现 : A 使用SOCKS5协议通过 B 来访问到 C 的22端口 具体实现如下 :

1#B安装SSH服务

(在 方法一 中有具体实现, 略)

2#A建立 A --> B 的隧道

  • 本人使用的是PuTTY的工具, 使用其他工具或PowerShell也是可以的

  • 在 A 电脑上使用PuTTY建立起与 B 的SSH隧道 (动态端口转发)

在 A 上配置(基于文章开头假设的网络图) :

  • 点击open,会出现登录,注意:这里登录的是 B 电脑,也就是要输入B的windows的用户名和密码;

  • 到这里,你已经建立起 A --> B 的隧道了, 注意: 请不要关闭PuTTY窗口, 否则隧道会被关闭

PuTTY如上设置,相当于使用命令 ssh -CfNg -D 127.0.0.1:6666 192.168.1.107

3#A通过代理连接 C 电脑

  • 终于到最后一步了, 很简单, 在 A 电脑上开启新的PuTTY窗口, 设置 A 本地的 刚才自定义的 6666端口为代理端口, 请求 C 就可以啦

方法三 : VMware配置端口转发

这是一个比较普遍的做法, 在网上也容易找到相关文章 大体思路: 在VMware上配置 监听父windows的端口X,把A端口转发到VMware下的虚拟机端口Y, 局域网的电脑只有访问windows的端口X就相当于访问虚拟机的端口Y啦, 是不是很容易 具体实现如下 :

1#B配置VMware

2#B配置防火墙

  • 打开 控制面板 ==> 系统和安全 ==> Windows Defender 防火墙 ==> 启用或关闭windows defender防火墙;选择关闭防火墙; (或者在 入站规则 添加允许 上一步自定义的6666端口)

3#A通过 B 连接 C 电脑

  • 终于到最后一步了, 很简单, 在 A 电脑直接用PuTTY请求 B 的 6666端口, 就可以登录 C 啦

… 以上

相关