[ 分享 ] Virtualbox Host-Only 连接主机与 NAT 端口转发连接主机

因为最近想折腾一些服务器的东西,所以先拿虚拟机操练。虚拟机无害,而且比起在本机上操练更加有实际的感觉。

但是首先解决虚拟机与宿主机连接的问题。这样不仅让虚拟机看上去真的就像实在网络上服务器一样,而且方便测试效果。

网上教程很多但是说的比较模糊,也很少有具体操作,所以决定具体写一下操作步骤和大家分享一下:-)

我这里向大家介绍 Host-Only 与 NAT 这两种模式。为什么没有桥接呢?因为桥接我没有成功过。。。。桥接会有种种要求,有时候不容易成功,特别像在学校的那种网络往往对 IP 地址限制比较严格而且连接上网可能还要认证网卡的 MAC 地址之类。总之种种限制,很不方便。好吧好吧,总的原因还是我不会。。。。也不知道是 IP 限制造成的还是我没有配置对。

下面进入正题。我们先讲容易的。

1.NAT 端口转发连接宿主机
这个是最容易的。虚拟机默认安装好就是以 NAT 的方式连接网络的。这时候的虚拟机可以上网无需任何额外的配置。但是主机和虚拟机之间不能连通,因为 IP 地址不再同一个网段。

这时候如果想要让主机访问虚拟机就要借助端口转发。比如说本来你要用 ssh 通过虚拟机的 22 端口 (ssh 默认的端口) 来访问虚拟机的。比如这样:

ssh < 你的虚拟机里的帐号名>@< 你的虚拟机 IP 或者域名> -p 22

可惜这样不行,因为 IP 地址的问题你没有办法访问这样直接访问虚拟机。

现在你可以把这个端口转发到你的宿主机上的某个端口 (比如 2222),而你通过宿主机来访问宿主机上的端口肯定是没有问题的。像这样:

ssh < 你虚拟机里的帐号名>@127.0.0.1:2222

当然是不行的。。。。

我当时也是习惯性的就用「:」来指定端口了,ssh 不能这样,要这样才可以:

ssh < 你虚拟机里的帐号名>@127.0.0.1 -p 2222

现在来说怎么配置,其实很简单,如图:


首先选中你要设置的虚拟机,然后选择网络这一项。一般默认就会有一个使用 NAT 模式的网卡,然后点击高级 – 端口转发(如上图左半边)。就会出来上图右半边的窗口。填写也很容易。虚拟机的 IP 地址可以去虚拟机里使用 ifconfig 查看,一般默认的都是 10.0.2.15。要转发的端口在这里是 22, 本地的 IP 地址直接写 127.0.0.1 就好了。端口可以随便写,一般 ssh 就写 2222 ,容易辨认一点。其他的也可以,不过之前最好查看一下端口是否被占用像这样:
lsof -i:2222
完了以后你就可以通过 ssh 访问虚拟机了。当然前提是你虚拟机里 ssh 服务和防火墙都设置好了。

PS:通过 ssh 访问虚拟机的好处是不用设置共享剪切板什么乱七八糟的东西的很多命令就可以复制粘贴。。。。

再举一个实用一点的栗子好了。比如我按照 wiki 里的操作搭建了一个 LAMP 服务器。我可以通过端口转发来在宿主机的浏览器上访问虚拟机上创建的服务器。所有的都和上面的一样。只是端口变了,http 使用的端口是 80,我把他转发到 8080。大家也可以看上图。完了我只要在浏览器的地址栏里面输入 127.0.0.1:2020/phpMyAdmin 就能访问 phpMyAdmin 了。

再再举个特殊一点的栗子。比如按照 苏姐的教程搭建了一个 OBS 服务器 ]([ 教学 ]Open Build Service 运维从入门到精通 -- 架设篇) 。这里也和上面的一样,只是访问要注意一点小不同。就是 OBS 的网页是使用 https 的,端口是 443。比如我把他转发到 8000,那么通过宿主机浏览器访问的时候就要这样子 127.0.0.1:8000 。不加 https:// 会出错的哦。

2.Host-Only 模式访问宿主机
一般情况下 NAT 就够用的。但是很多时候要写那么多端口转发真的很烦,而且问题是有时候一些服务不知道端口,还要找。完了还要在宿主机上找一个空闲的端口。所以这时候我们可以使用 Host-Only 的方式来连接网络。

注意,Host-Only 模式虽然号称最灵活,但是在不配置的情况下是不能连接外部网络的。也就是只可以宿主机和虚拟机连接。本文只涉及宿主机和虚拟机构建一个小的局域网。

在使用 Host-Only 模式的情况下我们首先要构建一个虚拟网卡。这个很简单,直接在 Virtualbox 里弄就可以了。管理 – 全局设置 – 网络,如下图:


一般这样就好了,你不用去管 IP 地址,他默认会选择 192.168.56.1。这是一个保留 IP 地址,可以随便用,一般的 192.158 开头的都可以随便用。然后你在宿主机上 ifconfig 应该就可以个看到这个网卡的存在。大概是这样的。

如果没有可能是因为没有激活,你可以使用 ip link 查看。然后 ip link set vboxnet0 up。这次再运行 ifcongfig 应该就可以看见了。

然后打开虚拟机。重点来了,我们要配置虚拟机里的网络。我们直接使用 YaST 神器。选择网络设置可以看到下图这个地方:


用 Tab 移动到 Edit 那里,回车后写入 IP 地址。注意,我们虚拟网卡的地址是 192.168.56.1, 我们要保证虚拟机里网卡的网段和宿主机虚拟网卡的网段一样,但不能设置成一样。 比如我们可以设置成 192.168.56.2 这个样子。完了我们要设置网关:


注意这个 网关的 IP 要和虚拟网卡的 IP 一样 。后面的 Device 要选择正确,有时候这里会找不到你网卡的名称,可能是因为之前网卡没有激活。那么你在用 YaST 设置好网卡 IP 后先保存一次,然后再打开 YaST 设置网关。这样应该就可以找到设备的名称了。

好了现在你就可以通过 192.168.56.2 来访问你的虚拟机了。还是上面的栗子,你可以通过 192.168.56.2/phpMyAdmin 直接访问 phpMyAdmin 了。不需要再指定端口了:-)

PS:注意一定要设置好防火墙哦,不然配置好了也无法访问的。在 YaST 里可以非常方便设置,如果是 http 服务只要在允许服务里添加 http 就好了。而 ssh 则需要自己定义规则。我比较偷懒就把 22 端口开放给所有 IP 地址。

1赞