我已经在 Lubuntu 15.10 主机上安装了 VirtualBox 5.0.14,并以 Lubuntu 14.04.5 LTS 作为客户操作系统创建了一个虚拟机。
我想在 VirtualBox 中设置一个仅主机网络适配器,以便我可以从主机系统上运行的 Web 浏览器访问在客户操作系统内运行的 Apache Web 服务器。
到目前为止,我已经创建了一个仅主机适配器vboxnet0
,我可以从主机操作系统成功 ping 通它。但是,我无法使用 Web 浏览器或任何其他方式访问端口 80。
我该怎么做才能找到问题的原因并正确配置?
虚拟机网络设置
VirtualBoxvboxnet0
设置
客内测试结果
启动虚拟机并启动 Apache(使用)后,我可以在客户操作系统内使用 Firefoxsudo service apache2 start
访问测试页面,没有任何问题。http://localhost/
相应的 Apache VirtualHost 定义为<VirtualHost *:80>
,/etc/apache2/sites-enabled/000-default.conf
所以我不明白为什么它不能从任何主机访问。
此外,sshd 和 MySQL 服务器正在客户机上运行。我可以通过 ssh 连接到本地主机,nmap 显示所有相关端口均已打开(22、80、3306)。
主机上的测试结果
在主机操作系统上,vboxnet0
显示如下并可 ping 通:
% ifconfig vboxnet0
vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00
inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:192 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:16176 (16.1 KB)
% ping 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.023 ms
但是,所有端口都无法访问:
% nmap 192.168.10.10 -p 22,80,3306
Starting Nmap 6.47 ( http://nmap.org ) at 2016-08-20 21:29 CEST
Nmap scan report for 192.168.10.10
Host is up (0.000027s latency).
PORT STATE SERVICE
22/tcp closed ssh
80/tcp closed http
3306/tcp closed mysql
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
尝试匹配 IP 地址
根据@MarkoPolo 的评论:
尽管192.168.10.10
可以从主机操作系统 ping 通,但我无法从客户操作系统访问该 IP 地址。
实际上,客户操作系统有一个来自 DHCP 范围内的 IP 地址vboxnet0
:
eth1 Link encap:Ethernet HWaddr 08:00:27:0d:b4:6a
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe0d:b46a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1180 (1.1 KB) TX bytes:1422 (1.4 KB)
192.168.56.101
无法从主机操作系统访问该 IP 地址,即无法 ping 通,无法使用 Web 浏览器进行访问。
我尝试使用将 的 IP 地址更新eth1
为。然后,可以从客户操作系统访问 Apache ,但是,仍然无法从主机操作系统进行访问(ping 除外)。192.168.10.10
ifconfig
http://192.168.10.10
答案1
简短的回答。
根据我对 VirtualBox 默认网络设置的了解,您使用的主机连接192.168.10.10
位于错误的子网上,并且在错误的区域进行了调整以使其正常工作。
在主机操作系统上设置主机专用适配器时,IPv4 地址应为192.168.56.1
。然后 — 设置完成后 — 在客户操作系统上将接口设置eth1
为使用类似 的 IP 地址192.168.56.10
。
较长的答案。
使用 VirtualBox 时,内部伪软件路由器设置为在192.168.56.x
IP 地址范围内工作。DHCP 服务器范围(您不应在其上设置静态 IP 地址)应在 到 的范围内192.168.56.101
,192.168.56.254
而要设置静态 IP 地址,您需要在192.168.56.2
到之间设置 IP 地址192.168.56.100
。因此,我建议您的客户操作系统配置(Lubuntu 14.04.5 LTS)使用诸如 的 IP 地址192.168.56.10
。
但不要192.168.56.10
像设置的那样在“适配器”区域中设置该值。相反,请按如下方式调整适配器设置;请参阅下面的 Mac OS X 屏幕截图以供参考:
- IPv4 地址:
192.168.56.1
- IPv4 网络掩码:
255.255.255.0
- IPv6 地址:[留空]
- IPv6 网络掩码长度:
0
然后在您的客户操作系统 (Lubuntu 14.04.5 LTS) 上,我觉得您的eth1
设置是 DHCP 设置并且地址为有点奇怪192.168.56.101
。我在第二个适配器上也使用 Ubuntu 14.04.5 和非常相似的仅主机连接进行 Apache 开发,我的设置分解如下:
eth0
其 IP 地址为10.0.2.15
。eth1
其 IP 地址为192.168.56.10
。
我的设置/etc/network/interfaces
如下:
auto eth1
iface eth1 inet static
address 192.168.56.10
netmask 255.255.255.0
因此,请仔细检查主机连接上的 IP 地址,并仔细检查网络接口配置。
答案2
使用 VirtualBox 的仅主机网络的目的
在您的示例中,您尝试在 VirtualBox 中设置一个仅由一台客户机和主机组成的仅主机网络。
但请记住,仅主机网络被设计成可以容纳多台客户机。仅主机网络可以与他人交流和主机但不是与外界:
Outside world <--> NIC <--> Host <--> vboxnet0 <--> virtual NIC <--> Guest OS
--- -------- -----------
(virtual NIC <--> Guest OS #2)
...
(virtual NIC <--> Guest OS #n)
区分主机和客户机 IP 地址
您的假设是那192.168.10.10
将是客户操作系统的 IP 地址,因为它出现vboxnet0
在主机上。
192.168.10.10
这个假设是不正确的——事实上,主持人机器!假设你的仅主机网络,那么所有用户都可以使用该 IP 地址访问主机操作系统。
vboxnet0
充当主机和客户机之间的网关。您可以轻松验证这一点:如果您在主机上打开任何端口(例如使用nc
),您应该能够从客户机操作系统访问该端口192.168.10.10
。
客户机的实际 IP 地址是 — 如您上面所述 —192.168.56.101
取自 VirtualBoxvboxnet0
设置中的 DHCP 配置。这是预期结果。您应该能够192.168.56.101
从主机访问客户机操作系统。
(请注意,这是多台来宾机器发挥作用的地方:如果您为 分配更多来宾机器vboxnet0
, 也将从指定的 DHCP 范围中获取 IP 地址。您也可以选择分配静态 IP 地址,但请记住,它们必须与主机的 IP 地址位于同一子网中,即 的地址vboxnet0
。)
可能的原因及解决方法
您的客户机应该可以通过 访问192.168.56.101
,但您描述的却不行。VirtualBox 配置看起来不错。您更有可能遇到路由/子网问题(这可能与主机上的其他网络接口有关)。
尝试将主机与客户机放在同一子网中,通过如下方式更改 VirtualBox 的设置:
使用 检查主机上的路由表。现在应该存在由 VirtualBox 创建的到/ via 的route
路由。192.168.56.0
255.255.255.0
vboxnet0
您现在应该能够通过 从主机访问客户的 Apache http://192.168.56.101
,并且——如果需要——通过 从客户机访问主机192.168.56.1
。