如何在同一主机上运行的两个 VirtualBox 虚拟机之间进行通信

如何在同一主机上运行的两个 VirtualBox 虚拟机之间进行通信

我在运行于主机 Windows 7 上的 VirtualBox 实例上运行了两个 RHEL/CentOS VM 实例。问题是,当我执行VBoxManage list vms -l | more并随后执行时VBoxManage guestproperty get <uuid> "/VirtualBox/GuestInfo/Net/0/V4/IP",我可以看到两个 VM 的 IP 相同。我已intnet使用网络 --> 适配器 2 --> PCnet-FAST III(内部网络,“intnet”)为两个 VM 设置了内部网络,我的理解是 eth0 可能是 VM 的私有网络接口。但它们的 IP 都显示为 10.0.2.15。有没有办法我可以访问两个虚拟机的私有虚拟机网络中不同的 IP?

注意:通过 Putty SSH 客户端访问时,我也只能访问单个 VM 实例。并且它始终连接到代理 127.0.0.1:2222。因此我无法区分 VM。我需要单独的实例访问,以便在客户端-服务器架构中的不同实例上运行服务器和客户端代码。请参阅我的其他帖子如何配置 putty 以使用同一主机通过 ssh 连接到多个虚拟机详细解释了这个问题。

在此处输入图片描述

我附加了在主机上执行的 VBoxManage 命令行输出。我正在运行 1.3_2 和 1.3_3 沙箱,但两者的 IP 相同,如下图粗体所示:

C:\Program Files\Oracle\VirtualBox>VBoxManage list vms
"Hortonworks Sandbox 1.3" {4914b5c7-1395-47f5-80ef-8fbec8cadbd4}
"Hortonworks Sandbox 1.3_1" {f103f5d2-f949-4d67-a81e-c63ddc5335dc}
"Hortonworks Sandbox 1.3_2" {fc2b9f50-bf4a-4a5d-8189-22d62c7e1d67}
"Hortonworks Sandbox 1.3_3" {5976fff1-7a0d-4eca-bedf-7756f7076dbd}
C:\Program Files\Oracle\VirtualBox>VBoxManage guestproperty get fc2b9f50-bf4a-4a
5d-8189-22d62c7e1d67 "/VirtualBox/GuestInfo/Net/0/V4/IP"
**Value: 10.0.2.15**

C:\Program Files\Oracle\VirtualBox>VBoxManage guestproperty get 5976fff1-7a0d-4e
ca-bedf-7756f7076dbd "/VirtualBox/GuestInfo/Net/0/V4/IP"
**Value: 10.0.2.15**

在 VM 沙箱 1.3_2 上,我运行以下命令来获取 eth0 的本地 IP,如下所示:

[hue@sandbox ~]$ arp -an
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
[hue@sandbox ~]$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.2.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 10.0.2.2 0.0.0.0 UG 0 0 0 eth0

有什么想法可以让我找到不同沙箱的不同 IP?

我看到了类似的帖子如何在虚拟机箱中实现虚拟机间的网络连接?其中提到使用 dhcpserver 来解析客户虚拟机的 IP。但它要求提供以下选项:--ip 注意:我尝试运行 VBoxManage dhcpserver,但它要求提供以下选项:--ip--netmask

C:\Program Files\Oracle\VirtualBox>VBoxManage dhcpserver add --netname intnet --
netmask 10.0.2.*
Oracle VM VirtualBox Command Line Management Interface Version 4.3.0
(C) 2005-2013 Oracle Corporation
All rights reserved.

Usage:

VBoxManage dhcpserver       add|modify --netname <network_name> |
                                       --ifname <hostonly_if_name>
                            [--ip <ip_address>
                            --netmask <network_mask>
                            --lowerip <lower_ip>
                            --upperip <upper_ip>]
                            [--enable | --disable]

VBoxManage dhcpserver       remove --netname <network_name> |
                                   --ifname <hostonly_if_name>


Syntax error: You need to specify --ip option 

尝试启用 dhcpserver 时,它已经存在:

C:\Program Files\Oracle\VirtualBox>VBoxManage dhcpserver add --netname intnet --
ip 10.0.2.15 --netmask 255.255.255.0 --lowerip 10.0.2.101 --upperip 10.0.2.254 -
-enable
VBoxManage.exe: error: DHCP server already exists

route -n和的输出sudo ss -lntp如下:(根据 MariusMatiae 的要求)

[hue@sandbox ~]$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth0
[hue@sandbox ~]$ sudo ss -lntp
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      10                        *:8651                     *:*                                                                                              users:(("gmetad",1046,0))
LISTEN     0      128                       *:50060                    *:*                                                                                              users:(("java",2797,86))
LISTEN     0      10                        *:8652                     *:*                                                                                              users:(("gmetad",1046,1))
LISTEN     0      128               10.0.2.15:50030                    *:*                                                                                              users:(("java",2834,84))
LISTEN     0      128               127.0.0.1:34927                    *:*                                                                                              users:(("java",2797,70))
LISTEN     0      50                        *:10000                    *:*                                                                                              users:(("java",1690,130))
LISTEN     0      128                      :::80                      :::*                                                                                              users:(("httpd",1282,4),("httpd",1414,4),("httpd",1415,4),("httpd",1416,4),("htt                                                                                        pd",1417,4),("httpd",1418,4),("httpd",1419,4),("httpd",1420,4),("httpd",1421,4))
LISTEN     0      128        ::ffff:10.0.2.15:60020                   :::*                                                                                              users:(("java",3513,121))
LISTEN     0      128               10.0.2.15:8020                     *:*                                                                                              users:(("java",1886,76))
LISTEN     0      128               10.0.2.15:50070                    *:*                                                                                              users:(("java",1886,99))
LISTEN     0      128                      :::22                      :::*                                                                                              users:(("sshd",1191,4))
LISTEN     0      128                       *:22                       *:*                                                                                              users:(("sshd",1191,3))
LISTEN     0      100                      :::11000                   :::*                                                                                              users:(("java",2237,35))
LISTEN     0      128                      :::5432                    :::*                                                                                              users:(("postmaster",1550,4))
LISTEN     0      128                       *:5432                     *:*                                                                                              users:(("postmaster",1550,3))
LISTEN     0      128                       *:8888                     *:*                                                                                              users:(("python",1064,5),("python",5540,5))
LISTEN     0      1          ::ffff:127.0.0.1:11001                   :::*                                                                                              users:(("java",2237,39))
LISTEN     0      100               127.0.0.1:25                       *:*                                                                                              users:(("master",1272,12))
LISTEN     0      50                        *:50010                    *:*                                                                                              users:(("java",1884,75))
LISTEN     0      128                       *:50075                    *:*                                                                                              users:(("java",1884,76))
LISTEN     0      50                        *:9083                     *:*                                                                                              users:(("java",1797,125))
LISTEN     0      128               10.0.2.15:50300                    *:*                                                                                              users:(("java",2834,74))
LISTEN     0      50                        *:50111                    *:*                                                                                              users:(("java",3142,261))
LISTEN     0      50                        *:8000                     *:*                                                                                              users:(("python2.6",3770,3),("python2.6",3843,3),("python2.6",3843,22))
LISTEN     0      50                        *:8002                     *:*                                                                                              users:(("java",3772,136))
LISTEN     0      50                       :::2181                    :::*                                                                                              users:(("java",2197,52))
LISTEN     0      128               10.0.2.15:51111                    *:*                                                                                              users:(("java",2820,74))
LISTEN     0      50                       :::48231                   :::*                                                                                              users:(("java",2197,43))
LISTEN     0      128               127.0.0.1:199                      *:*                                                                                              users:(("snmpd",1179,8))
LISTEN     0      50                        *:9290                     *:*                                                                                              users:(("java",2834,88))
LISTEN     0      128                       *:8010                     *:*                                                                                              users:(("java",1884,81))
LISTEN     0      128               10.0.2.15:50090                    *:*                                                                                              users:(("java",1888,76))
LISTEN     0      50                        *:3306                     *:*                                                                                              users:(("mysqld",1460,10))

答案1

你有两种选择:

  1. 对两个虚拟机使用桥接连接。这样,它们都拥有 LAN 上的 IP,就像物理机器一样。
  2. 设置仅主机网络。这需要以下步骤:

    a) 文件 -> 首选项 -> 网络 -> 仅主机网络。

    b) 点击标志添加Plus

    c) 敲击螺丝刀 -> DHCP 服务器。检查Enable DHCP sever

    d) 根据需要填写掩码。合理的值为:服务器地址 192.168.56.254 服务器掩码 255.255.255.0 地址下限 192.168.56.100 地址上限 192.168.56.200

现在将您的虚拟机配置为在仅主机网络上至少有一个适配器。

启动您的虚拟机,现在您的主机具有 IP 192.168.56.1,并且各个虚拟机位于 192.168.56.100、192.168.56.101……您现在可以从一台机器 ping 和 sssh 和 vnc 到其他机器。

编辑:

根据您的路由表,如果您在两个虚拟机上都输入以下命令,解决方案 2 将起作用:

  sudo route delete default gw 10.0.2.2
  sudo route add default gw 192.168.56.1

答案2

在浏览了这里和其他地方一堆冗长的技术性答案后,我找到并遵循了以下说明这里,非常简单,运行完美,只有一个小问题。步骤如下:

  1. 关闭虚拟机电源后,在主 VB 窗口中转到文件 > 首选项 > 网络,然后单击 + 图标以添加网络(NatNetwork,但我认为可以更改名称)。
  2. 在您想要连接的每个虚拟机的网络设置中,将适配器 1 设置为 Nat 网络。
  3. 如果不起作用,请检查常见的问题,例如防火墙以及虚拟机计算机名称。这是困扰我一段时间的部分。完成上述步骤后,两个虚拟机具有不同的 IP,可以相互 ping 通,但它们的共享文件夹未显示在另一台虚拟机的网络上。两台虚拟机都具有相同的计算机名称,我认为这不会成为问题,尤其是因为我甚至无法通过 IP 访问另一台虚拟机,但一旦我将它们更改为不同的 IP,一切就开始正常工作了。

相关内容