Linux服务器故障排查指南6:在本地测试远程主机
2013-03-27 51cto 编辑:轶名
在本地测试远程主机
到了这里,摆在我们面前的就有两种可能性:要么将故障范围缩小为网络问题,要么认定毛病出在主机自身。如果大家认定毛病出在主机自身,我们可以通过一系列操作检查端口80是否可用。
侦听端口测试
我们在web1上要做的第一件事就是测试端口80是否处于侦听状态。大家可以使用netstat -lnp命令来列出所有打开且处于侦听状态的端口。我们当然可以直接运行这条命令并从输出结果中筛选出自己想要的结论,但效率更高的方式则是利用grep指定显示端口80的侦听状态:
$ sudo netstat -lnp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 919/apache
第一列内容显示出端口所使用的传输协议。第二及第三列则显示接收及发送队列(这里两者都被设置为0)。现在我们要注意的是第四列,因为它列出了主机所侦听的本地地址。此处的0.0.0.0:80告诉我们该主机正侦听所有端口80流量中与其IP有关的数据。如果Apache只侦听web1的以太网地址,我们将在输出结果中看到10.1.2.5:80。
最后一列显示的是哪个进程令端口处于开放状态。这里我们看到是运行中的Apache正在进行侦听。如果大家在自己的netstat输出结果中没有看到这部分内容,则需要启动Apache服务器。
防火墙规则
如果进程正在运行且侦听端口80,那就说明可能是web1中某种形式的防火墙导致了问题的发生。利用iptables命令列出全部现有防火墙规则。如果我们的防火墙已被禁用,那么输出结果应如下所示:
$ sudo /sbin/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
请注意,默认政策被设置为ACCEPT。尽管规则本身没有问题,但防火墙仍然有可能默认弃用所有数据包。如果属于这类情况,大家会看到如下所示的输出内容:
$ sudo /sbin/iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
另一方面,如果某条防火墙规则阻断了端口80,那么输出结果则应如下所示:
$ sudo /sbin/iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 reject-with(
icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
在后一种情况下,我们显然需要修改防火墙规则,以允许服务器接收来自端口80的主机数据流量。