不能访问虚拟机里面的WEB服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不能访问虚拟机里面的WEB服务器相关的知识,希望对你有一定的参考价值。

我在单位内网的一台搁置的服务器(Windows2008R2,IP地址我设置为192.168.51.5)上面建立虚拟机(vmware workstation 10),虚拟机里面装的是windows2003,建立了一个WEB服务器,IP地址192.168.51.240。
现在出现一个情况,我从虚拟机里面或者2008这台服务器能够访问现有的物理WEB服务器(192.168.51.2)和其它计算机。但是从局域网里面其它的计算机访问这台虚拟机的WEB网站就不行,也PING不通,只能够访问和远程桌面连接到2008服务器。从2008服务器能够访问到虚拟机的WEB网站,但是提示网页有错误,但是在虚拟机本机里面访问就完全正常。
请问各位,如果在不改变虚拟机WEB服务器IP的情况下,如何才能实现内网的其它计算机能够正常访问到虚拟机的WEB服务器?

检查下虚拟机设置中网络适配器的模式是否为桥接
如果是桥接,检查虚拟机系统中防火墙设置,测试时可以暂时关闭防火墙,以便确定是否是防火墙阻止了正常的访问。追问

在2008服务器里面把防火墙关了的,虚拟机的2003默认没有开启防火墙的,但是我2008服务器和虚拟机里面都安装有瑞星杀毒软件网络版。

追答

同理关闭下,再试。
也可以设置局域网放行(白名单),允许ping(ICMP)

参考技术A 楼主你这个思维不好给你解释啊!
1:虚拟机采用nat联网:
虚拟机和物理机ip一样,连接时ip为127.0.0.1(代表本地ip),端口自己指定
2:虚拟机采用桥接:
虚拟机和物理机是局域网关系,打开cmd,输入ipconfig查看各自内网ip地址,然后连接
如果楼主没用路由器的话,用桥接应该是连接不了的!
参考技术B 设置虚拟机的网络适配器为桥接模式 1 在主机里.单击 开始→运行,在出现的... 2 在出现的窗口中输入“ipconfig”查看... 3 在虚拟机中,单击开始→控制面板

一次解决虚拟机内的服务不能访问经历


一次解决虚拟机内的服务不能访问经历

问题是这样的,在virtualbox中安装了centos系统,然后部署了一个自己的服务,在虚拟机内通过“127*”地址和“192*”地址都能正常访问,但是虚拟机外访问被拒绝

 

虚拟机内

[[email protected] dsp]# curl http://192.168.199.184:7050/debug/pprof/heap
heap profile: 141: 4782544 [1677: 16456768] @ heap/1048576
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 524288 [1: 524288] @ 0x5493e6 0x54185e 0x4014b5 0x4323d0 0x462b61
3: 26112 [3: 26112] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
27: 19008 [27: 19008] @ 0x40c424 0x5279a1 0x542846 0x4014b5 0x4323d0 0x462b61
1: 17664 [1: 17664] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
7: 16128 [12: 27648] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
21: 14784 [21: 14784] @ 0x40c424 0x5279a1 0x5427cf 0x4014b5 0x4323d0 0x462b61
3: 13824 [4: 18432] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61

 

 

虚拟机外

? dsp curl http://192.168.199.184:7050/debug/pprof/heap
curl: (7) Failed to connect to 192.168.199.184 port 7050: Connection refused
? dsp
? dsp

 

于是乎,检查网络端口监听是正常;7050端口确实监听正常,并且所有网络地址都监听了

[[email protected] dsp]# netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 
tcp6 0 0 :::7050 :::* LISTEN 
tcp6 0 0 :::6379 :::* LISTEN 
tcp6 0 0 :::10383 :::* LISTEN 
tcp6 0 0 :::7089 :::* LISTEN 
tcp6 0 0 :::22 :::* LISTEN 
tcp6 0 0 ::1:25 :::* LISTEN 
tcp6 0 0 :::8000 :::* LISTEN 
[[email protected] dsp]# 
[[email protected] dsp]#

 

 

到这里,开始怀疑是不是防火墙拒绝了访问,于是通过iptables查看防火墙规虑规则
-L|--list [CHAIN [RULENUM]] //列出指定链或所有链中指定规则或所有规则
-v|--verbose (x3) //查看规则列表时,显示更详细的信息
pkts 是被接受/拒绝的包的数量,

这里,第5条规则拒绝了75个包,现在问题已经明确了。需要去修改iptable的过滤规则

[[email protected] dsp]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
1646 119K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 84 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 
7 445 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
75 17712 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3306
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8088
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:7050
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:10383
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:7089
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8000

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination 
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 1609 packets, 175K bytes)
pkts bytes target prot opt in out source destination

 

 


iptables中的规则如下,

[[email protected] dsp]# 
[[email protected] dsp]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#
COMMIT
[[email protected] dsp]#

 


大致意思是
1.只要是封包状态为 RELATED,ESTABLISHED 就予以接受
2.只要封包协议是 icmp 类型的,就予以放行
3.网络接口是lo的,无论任何来源 (0.0.0.0/0) 且要去任何目标的封包,不论任何封包格式 (prot 为 all),通通都接受
4.只要是传给 port 22 的主动式联机 tcp 封包就接受
5.全部的封包信息通通拒绝,并且发送一条host prohibited的消息给被拒绝的主机。


iptables的规则是按照顺序逐个拿来匹配数据包的,匹配成功则去执行相应的动作(accept/reject),如果一个数据包不能被前4个匹配到,那么一定会在第5个规则的时候匹配成功,按照第5个规则数据会被拒绝掉

回到本次问题中,我们的7050端口被执行了第5条规则。要解决此问题,我们只需要在第5个规则之前增加一条规则即可
-A INPUT -p tcp -m state --state NEW -m tcp --dport 7050 -j ACCEPT

 

[[email protected] dsp]# 
[[email protected] dsp]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 7050 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#
COMMIT
[[email protected] dsp]#

 

然后
systemctl restart iptables


问题解决:

? dsp curl http://192.168.199.184:7050/debug/pprof/heap
heap profile: 141: 4782544 [1682: 16457312] @ heap/1048576
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 1376256 [1: 1376256] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x5427cf 0x4014b5 0x4323d0 0x462b61
1: 688128 [1: 688128] @ 0x40e542 0x40d3f2 0x52859e 0x542846 0x4014b5 0x4323d0 0x462b61
1: 524288 [1: 524288] @ 0x5493e6 0x54185e 0x4014b5 0x4323d0 0x462b61
3: 26112 [3: 26112] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5 0x4323d0 0x462b61
27: 19008 [27: 19008] @ 0x40c424 0x5279a1 0x542846 0x4014b5 0x4323d0 0x462b61
1: 17664 [1: 17664] @ 0x40e542 0x40d3f2 0x549c50 0x54185e 0x4014b5

 


参考资料
http://cn.linux.vbird.org/linux_server/0250simple_firewall.php
http://www.cnblogs.com/pixy/p/5156739.html
https://wiki.archlinux.org/index.php/Iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
http://0x1.im/blog/server/use-linux-ubuntu-iptables.html

 

以上是关于不能访问虚拟机里面的WEB服务器的主要内容,如果未能解决你的问题,请参考以下文章

host不能访问虚拟机内web service中踩到的坑--2017年5月3日

vmware虚拟机不能访问外网,该如何设置

CentOS----宿主机无法访问虚拟机中的web服务解决方案

一次解决虚拟机内的服务不能访问经历

局域网中的机器不能访问桥接模式的VMWARE虚拟机。

虚拟机不能访问https://www.python.org/