首页 > 代码库 > SSH连接使用NAT模式的Virtualbox虚拟机

SSH连接使用NAT模式的Virtualbox虚拟机

需求

在Virtualbox中虚拟安装了Linux服务器,Linux服务器提供Web服务。物理主机没有连接路由器或交换机等设备。现有如下需求:

  • 在物理主机Windows系统里通过SSH连接Linux服务器。

  • 可访问Linux提供的Web服务。

前言

在Windows下使用Virtualbox虚拟出一台Linux虚拟机,一般情况下,将Linux虚拟机的网络方式设置为桥接模式,这样Linux虚拟机就相当于独立与PC并行存在,两个系统处于同一局域网,可以相互ping通。但是前提是当前PC连接在路由器或者交换机。如果没有路由器或者交换机等设备使两个系统处于同一局域网,这两个系统就没办法简单地ping通了。

既然目前Linux虚拟机不能使用桥接模式,那就设置成NAT模式(网络地址转换NAT)了吧。NAT模式即虚拟机的网络是完全依赖于物理主机的的网络。在这种模式下,两个系统并不是处理同一局域网,不能简单地直接ping通。但是Virtualbox可以设置在NAT模式下的端口转发规则,通过设置规则使PC可以连接上Virtualbox里的虚拟机。

实践

打开Virtualbox,右击Linux虚拟机,选择设置选项。在设备面板中,选择网络,网卡1连接方式为网络地址转换NAT,点击高级,显示高级设置,如下图:

网络地址转换NAT高级设置

点击端口转发按钮打开端口转发规则列表,可以添加或删除规则。

规则中一些术语的解释:

  • 主机:物理主机系统。

  • 子系统:Virtualbox虚拟出来的系统。

  • 主机端口:物理主机系统的端口,将此端口转发到子系统端口。

  • 子系统端口:虚拟机子系统的端口。

下面以添加SSH连接规则为例。

点击右边的绿色加号按钮,规则列表中就会添加一条规则。更改其名称为ssh(这个名称可以随便写的)。协议选择TCP主机IP子系统IP留空不用填写。主机端口填写2222,也可以更改为其它端口,只要不与其它端口冲突即可,物理主机SSH连接虚拟机时将使用此端口。子系统端口填写22,因为SSH连接默认是使用22端口的,所以这个是不能随意填写的,例如最常用的像http协议的话默认是80端口,而ftp协议默认是21端口。填写完毕,点击确定按钮保存设置。

打开Linux虚拟机,安装SSH服务并开启,关闭防火墙。在物理主机Windows系统里就可以使用Putty或者SecureCRT等软件连接Linux虚拟机了,SSH地址写localhost127.0.0.1,端口填写刚才在Virtualbox设置端口转发规则中的主机端口,上例中是使用了2222。如果没有连接成功,请检查Linux虚拟机是否已经安装并开启SSH服务,并要关闭防火墙。

我在Linux虚拟机里安装了Apache和VSFTP,设置Virtualbox端口转发规则如下图所示。在物理主机Windows中,通过localhost:8008127.0.0.1:8008可以访问web网页,通过localhost:2121127.0.0.1:2121可以连接FTP。

端口转发规则

命令行

上面说的是直接在图形化界面设置端口转发规则的,还有一种是使用命令设置的。

打开CMD,定位到你的 VirtualBox 安装目录,例如 “C:\Program Files\Oracle\VirtualBox”。例如我的Linux虚拟机在Virtualbox中的名称为Ubuntu,要添加上例中SSH端口转发规则,则输入如下命令:

1
VBoxManage modifyvm "Ubuntu" --natpf1 "ssh,tcp,,2222,,22"

此命令解析如下:

1
VBoxManage modifyvm "Linux虚拟机名称" --natpf1 "规则名称,协议,主机IP,主机端口,子系统IP,子系统端口"

参考

  • VirtualBox 使用 NAT 方式网络的 SSH 连接