我在CentOS6虚拟机上运行Tomcat 7服务器(桥接网络模式,我们会说IP是1.2.3.4
)并且正在尝试(并且无法)从主机访问它。我可以使用
test
(包含“Hello,world!”的文件)
# wget 1.2.3.4:8080/test/
......它很好。如果我从主机尝试相同的命令,它会失败(连接被拒绝),或者它连接然后吐出
Read error (Connection reset by peer) in headers.
Retrying.
它将尝试一次或两次,最后一次是“拒绝连接”。
当连接被拒绝时,访问日志中不会显示任何内容。当我收到读取错误时,请求显示在访问日志中,响应代码为200.我得到的响应间歇性地来回切换。
这是server.xml中8080的连接器:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Tomcat看到来自主机的任何请求这一事实让我非常确定它不是防火墙,但这里是VM的iptables文件:
# Generated by iptables-save v1.4.7 on Wed May 7 10:27:30 2014
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 1.2.3.0/24 -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed May 7 10:27:30 2014
是否存在我缺少的服务器配置,或可能导致响应不一致的内容?
答案 0 :(得分:0)
...and it comes down fine. If I try the same command from the host, either it fails
(connection refused), or it connects and then spits out a ...
它看起来像防火墙,iptables有这样的东西:允许几个数据包通过,即使它们被禁用(应该被过滤掉)
我建议在VM中使用tcpdump,真正的源ip用于请求 比如 tcpdump -n -i br0 port 8080
您的主机iptable规则或路由表可能会播放您的请求
答案 1 :(得分:0)
我无法找到问题的真正原因 - 我关闭了我的VM和主机,重新启动了两台,重新启动了Tomcat,然后能够从主机到达1.2.3.4:8080/test/
。 / p>
我确实将问题缩小到主机(我认为):我尝试启动一个不同的VM,并尝试从主机上尝试访问Tomcat服务器时的相同行为。但是,我的主机iptable规则似乎在重启后似乎没有改变。
更新:问题中描述的相同行为在第二天返回。我使用桥接网络适配器切换到eth0上的NAT和使用静态IP的eth1上的仅主机网络。一切都在顺利进行(没有进一步改变iptables)。