ARP 擒贼记

注意!本文涉及标题党

之前一直在做的一个 reverse proxy,在 RHEL 上用了 nginx 。基本功能是根据 cookie 做 load balance 和特定网页内容的替换。功能上是没有问题了吧,性能的话我觉得能满足公司需要,虽然看上去不是太好。

这个小项目一直是不顺利的,主要原因就是 nginx 得不到认可。基本上和每一个人说我用了什么的时候,都要先介绍 nginx。Net Craft 给的报告是不难看,好歹也算第四大应用广泛的 Web Server 了。前三是 Apache、IIS 和 GFE。Apache 做 reverse proxy 太慢,IIS 我不会用(也不知能不能做 reverse proxy),GFE 是人家的私人珍藏…… 那么用 nginx 还是有些道理的吧。

昨天,正当梁生还在质疑 nginx seems too young to be proven 的时候,我们的 server 开始变得不稳定。基本上就是好一阵坏一阵,不能用的时候错误很奇怪,不是连不到而是 connection refused。不但网页看不到,连 ssh 都连不到。连上的 ssh 也会在几分钟内断开。起先是以为网线接触不良,但是看 message.log 没有看到 eth0 down 的迹象。于是只好带着疑问下班,哦,我真不愿意看到这种情况啊。梁生会不会得意的笑,哈,我说你这 server 不行吧,too young~

我知道这个问题和 nginx 是无关的,应该是网络问题。硬件是不大会有问题的,我一直以为这还是软件的问题。不知道为啥,遇到诡异的局域网问题,我就会自然的想到 ARP。百度上搜 ARP 的结果是恐怖的,Google 上要好些,曾几何时 ARP 劫持在中国大陆的泛滥,让很多人以为这是一个病毒的名字。我是觉得处处防范的企业内部出现病毒是不大可能的,而且现在的故障不像是 ARP 劫持,倒像是……哦,谁偷了我的 IP 啊~~

Keats 给我的信息是很有用的,就是不断地 ping 那个 IP,TTL 值竟然会变,一会儿 64 一会儿 128,64的时候能连上,128就connection refused。于是问题变得清晰起来,这分明是两台机器嘛,RHEL5 的默认 TTL 是 64 的,返回 128 估计就是给某台 Windows XP 抢了 IP。于是乎,arp -a 蹲点蹲了一阵,终于让我揪出了抢我 IP 的 MAC Address~ 交给 Keats,剩下的事情,就不是我们 Team 的啦,Technical Team 的同事们加油啊,你们有什么妙招根据 MAC 地址把那台机器的主人找出来吗……