如何从主机系统连接到来宾VM?


15

我有一个VM Web服务器设置,并且已经安装并启动了Apache。VM具有桥接网络接口,可以使用192.168.0.2从主机ping通。

但是,如果我在主机上的浏览器中键入相同的IP地址,那么我期望看到在VM上生成的默认apache页面,但是,我进入can't connect to 192.168.0.2了主机浏览器。

我显然错过了一些东西。有人知道我错过或做错了什么吗?

VM的输出 netstat -tnlp

tcp     0     0 0.0.0.0:22        0.0.0.0:*     LISTEN     950/sshd
tcp     0     0 127.0.0.1:25      0.0.0.0:*     LISTEN    1026/master
tcp     0     0 :::22                  :::*     LISTEN     904/sshd
tcp     0     0 ::1:25                 :::*     LISTEN     980/master

我认为网络活动/连通性看起来很粗糙。

                               在此处输入图片说明


如果仅看到:::80,则Apache仅在侦听IPv6连接。您是否尝试过检查Listen指令?
Lekensteyn 2014年

尝试添加-p标志以netstat验证您的Apache实际上正在侦听端口80,而不是其他服务。你可以curl localhost从客人那里跑吗?是什么grep -C3 -rni Listen /etc/httpd/节目?
Lekensteyn 2014年

请帮帮我,如果这些指示有效,请将其写为答案,因为您可以访问屏幕截图。这个问题的数量很大,我不认为它的解决方案已被准确地抓住。
slm

Answers:


14

问题#1-VM网络类型

共有三种联网模式:

  1. NAT
  2. 仅主机
  3. 桥接的

设置细节

什么时候使用每个?

  • #1:用于开发其他服务器上的Facebook / Web应用程序
  • #2:如果要构建自己的应用程序,并从VirtualBox主机(而不仅仅是访客VM)进行测试
  • #3:如果您要构建应用程序并从LAN上的其他系统进行测试

问题2-防火墙阻止?

根据您使用的发行版,防火墙可能会阻止Web浏览器访问Apache实例。鉴于您能够ping系统,但无法通过端口80(Apache正在监听的端口)访问它,这将很有意义。

暂时禁用它

在CentOS上,您可以使用此命令将其禁用。

$ /etc/init.d/iptables stop

检查Apache的监听

您还可以确认它正在此端口上侦听。

$ netstat -antp | grep :80 | head -1 | column -t
tcp  0  0  :::80  :::*  LISTEN  3790/httpd

确认防火墙关闭

可以确认防火墙是完全开放的。

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination      

如果这解决了您的问题,则可以永久添加一条规则,该规则允许通过TCP端口80进行通信。

为TCP端口80添加规则

$ /etc/init.d/iptables restart
$ iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ /etc/init.d/iptables save

注意:这将使规则在重新引导之间持续存在。

防火墙正在接受TCP端口80

打开端口80的系统如下所示:

$ iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:8834 
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

问题#3-Apache监听?

在以上问题中,我们看到Apache正在侦听,但有时配置错误,因此它仅侦听1个IP地址,或者侦听其他网络接口。该命令netstat可用于仔细检查以及查看Apache配置文件。

$ netstat -anpt | grep :80 | column -t
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  1750/httpd

这表明Apache正在所有接口(IP 0.0.0.0)上侦听。

我不会在这里重复@ Lekensteyn的答案,该答案涵盖了此特定问题。

参考文献


现在我完全感到困惑。我已经将虚拟机设置为桥接模式,可以从主机ping通虚拟机,但是即使虚拟机已安装并启动了Apache,也无法从主机上的Web浏览器获取相同的IP地址,我应该看到在it worked!apache的页面。
oshirowanen 2014年

@oshirowanen-感谢您在尝试解决问题时不灰心8-)。确保Apache在CentOS上运行/etc/init.d/httpd status,应显示正在运行。
slm

1
我在VM上停止了防火墙,现在在主机上使用Web浏览器访问VM的URL时可以看到默认的IP页面!
oshirowanen 2014年

1
@oshirowanen-哇!好的,所以整个问题只是防火墙,我将添加一条命令将该规则添加到您的防火墙中,也可以使用此命令将其永久化/sbin/service iptables save
slm

是! 我做了最少的CentOS安装,并且我不应该假定默认情况下禁用了防火墙...老实说,我什至没有想到防火墙。多谢您抽出宝贵时间提供协助。
oshirowanen 2014年

2

您的Apache安装可能已配置为仅在localhost上侦听。您可以通过在来宾中运行来验证这一点:

$ netstat -tnl | grep :80
Proto Recv-Q Send-Q Local Address      Foreign Address  State
tcp        0      0 0.0.0.0:80         0.0.0.0:*        LISTEN
tcp6       0      0 :::80              :::*             LISTEN

如果显示0.0.0.0:80,它将在所有接口上侦听。在您的情况下,我会期望127.0.0.1:80。要解决此问题,请编辑您的Apache配置(在中的某处/etc/httpd/conf/)并更改:

Listen 127.0.0.1:80

至:

Listen 80

您还可以nmap用来验证计算机上的可用服务。它应该看起来像:

$ nmap 192.168.0.2

Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-11 15:22 CET
Nmap scan report for localhost (192.168.0.2)
Host is up (0.0036s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.