首页 > 代码库 > 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
,点击高级
,显示高级设置,如下图:
点击端口转发
按钮打开端口转发规则列表,可以添加或删除规则。
规则中一些术语的解释:
主机:物理主机系统。
子系统:Virtualbox虚拟出来的系统。
主机端口:物理主机系统的端口,将此端口转发到子系统端口。
子系统端口:虚拟机子系统的端口。
下面以添加SSH连接规则为例。
点击右边的绿色加号按钮,规则列表中就会添加一条规则。更改其名称为ssh
(这个名称可以随便写的)。协议选择TCP
。主机IP
和子系统IP
留空不用填写。主机端口
填写2222
,也可以更改为其它端口,只要不与其它端口冲突即可,物理主机SSH连接虚拟机时将使用此端口。子系统端口
填写22
,因为SSH连接默认是使用22端口的,所以这个是不能随意填写的,例如最常用的像http协议的话默认是80端口,而ftp协议默认是21端口。填写完毕,点击确定
按钮保存设置。
打开Linux虚拟机,安装SSH服务并开启,关闭防火墙。在物理主机Windows系统里就可以使用Putty或者SecureCRT等软件连接Linux虚拟机了,SSH地址写localhost
或127.0.0.1
,端口填写刚才在Virtualbox设置端口转发规则中的主机端口
,上例中是使用了2222
。如果没有连接成功,请检查Linux虚拟机是否已经安装并开启SSH服务,并要关闭防火墙。
我在Linux虚拟机里安装了Apache和VSFTP,设置Virtualbox端口转发规则如下图所示。在物理主机Windows中,通过localhost:8008
或127.0.0.1:8008
可以访问web网页,通过localhost:2121
或127.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 连接