昨天公司部分电脑上网慢,不能连到邮箱服务器,
本来这类问题应该由我们部门负责infrastructure的同事解决的,但由于生产线的交换机上的VLAN都是我配置的,因此也参与排错,并最终亲手解决了此问题。

问题现象:故障电脑可以ping通部分服务器,但有些却不能ping通,但在同一个办公室有些电脑由此问题,有些却没有,只是有点慢,偶尔上不了类似google这样的外网。

排查过程:这个现象非常奇怪,网络还是有连接的,只是不能Ping某些服务器,而且这个现象只在部分电脑上发生。

开始怀疑是arp病毒
于是在故障电脑上用arp -a, 查看网关的mac地址,但是正确的,后经过测试,发现问题于电脑本身没有关系,而是和端口有关,换句话说,如果一个有问题的电脑接到另一个网络端口上,可能问题就消失了。

一下午都没有解决,回家后,查看了一篇网文,讲的是根据IP查找交换机端口。
http://ilexes.blog.51cto.com/705330/152210, 觉得这个方法很有意思。

第二天上午,想试试那台连不上的邮件服务器所在的端口。使用了博文中的方法,尽无意中发现了问题,原来网络中存在着环路,这种环路可以造成网络风暴,并会提供给客户段错误的mac端口,导致客户段无法联系主机。
我判断是最近有人布线时,错误的接了多余的网线,于是使用show cdp neighbor找到了这根多余线对应的端口,将这根多余的线拔掉后,问题解决。

现在详细描述一下排错的命令(简化了很多步骤和真实地址名称),供参考。

假设连接不上的服务器的IP是 10.21.78.8
使用:
show arp | include 10.21.78.8 (在arp列表里查找到这个IP对应的mac地址) 
显示出: 
Internet 10.21.78.8 0 001e.0bc2.9c36 ARPA Vlan301

现在用开始查它对应的端口:
再用: 
switch_1#show mac-address-table address 001e.0bc2.9c36
Mac Address Table
-------------------------------------------

Vlan Mac Address Type Ports
---- ----------- -------- -----
301 001e.0bc2.9c36 DYNAMIC Fa0/3
301 001e.0bc2.9c36 DYNAMIC Fa0/42
Total Mac Addresses for this criterion: 1

好问题找到了,一个服务器怎么会对应两个端口呢。
根据实际机房和交换机位置,可以判断fa0/3应该是真实的端口,fa0/42连的是另一个交换机,而且和这个服务器没有直接关系。
于是telnet 到fa0/42上的这个交换机上
继续定位
switch_2#show mac-address-table address 001e.0bc2.9c36
Mac Address Table
-------------------------------------------

Vlan Mac Address Type Ports
---- ----------- -------- -----
301 001e.0bc2.9c36 DYNAMIC Fa0/1
306 001e.0bc2.9c36 DYNAMIC Fa0/25
Total Mac Addresses for this criterion: 1

在用查找多余的路
swtich_2#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone

Device ID Local Intrfce Holdtme Capability Platform Port ID
switch_1 Fas 0/1 150 R S I WS-C3560- Fas 0/3
switch_1 Fas 0/25 156 R S I WS-C3560- Fas 0/42
....

可见这里有两条链路,造成环路,
switch1的 fa0/3到switch2的fa0/1是一条干道trunk,是我最初的正确配置
关键的错误在 swtich_1 fa0/42 到 switch_2 fa0/25这条路上,
通常cisco会用生成树协议自动解决环路问题,但这里的问题。
但正好 和属于不同的VLAN,这才是造成问题的原因。
生成树算法,以及PVSTP(每VLAN生成树)算法再这里都不适用。

现在拔掉这个线,去掉环路问题解决了。


附博文中提到的查找IP对应的交换机端口方法
http://ilexes.blog.51cto.com/705330/152210
作为网络管理员,在单位或者学校的局域网里,经常会遇见,知道IP却找不到它位置的事情 
比如内网里有一台设备中了arp欺骗病毒,整个内网访问internet速度明显下降,用软件抓包知道了中毒主机的IP地址,就需要找到它在哪里了,可以用以下的方法(针对思科交换机) 

通过IP地址查端口 
目标地址,例如192.168.3.48 
在主干交换机上ping 192.168.3.48 
确保能ping通 

使用: 
show arp | include 192.168.3.48 (在arp列表里查找到这个IP对应的mac地址) 
显示出: 
Internet 192.168.3.48 0 000d.874a.0c52 ARPA Vlan30 

得到所连接交换机接口的mac地址:000d.874a.0c52 

再用: 
show mac-address-table dynamic add 000d.874a.0c52 (在mac地址列表里找出mac来源端口) 
显示: 
Unicast Entries 
vlan mac address type protocols port 
-------+---------------+--------+---------------------+-------------------- 
30 000d.874a.0c52 dynamic ip FastEthernet4/12 

连接的是4/12端口,但是不能保证目标就是接在这个端口 
用: 
show cdp nei (查看跟这台交换机相链接的网络设备) 
看到: 
switch9 Fas 4/12 123 S I WS-C2950-2Fas 0/24 
这个端口连接的是交换机 
用: 
show cdp ent * (查看跟这台交换机链接设备的详细信息) 
得到该交换机的IP:192.168.3.214 
telnet到192.168.3.214 
重复上面动作,输入: 
show mac-address-table dynamic add 000d.874a.0c52 
显示: 
Mac Address Table 
------------------------------------------ 

Vlan Mac Address Type Ports 
---- ----------- ---- ----- 
30 000d.874a.0c52 DYNAMIC Fa0/2 
Total Mac Addresses for this criterion: 1 

看到接口为Fa0/2,而且只有一个动态的mac地址,说明就是这个接口了 
目标最后被确定接在一台2950的2口上 

这样目标IP与交换机链接的位置就找到了,管理员可以采取相应的措施,比如关闭端口来隔绝病毒机 


-------------------------------------------------------------------------------------------------------------------------------------------------- 


相反的,如果你去机房看到了某个服务器,链接在交换机的某个端口上,但是设备标签上没有任何信息,想知道服务器的IP,应该怎样做呢? 

看看下面的步骤: 

先去机房确定机器连接在交换机的哪个端口上,例如0/2口 
在那台交换机上用命令: 

show mac add 

显示出它的Mac Address Table 
从列表里找到0/2口对应有哪些mac地址 
例如: 

000d.874a.0c52 DYNAMIC Fa0/2 
0011.5be0.dd61 DYNAMIC Fa0/2 
0015.c510.12a3 DYNAMIC Fa0/2 


使用nmap软件 
输入例如:
nmap -oX maclist.xml -sP 192.168.3.1/24 
的命令 
创建含有IP地址和mac地址的列表 
在列表里搜索上面的三个mac地址就能找到相应的IP地址 

查询结果: 
000d.874a.0c52 DYNAMIC Fa0/2 192.168.3.48 
0011.5be0.dd61 DYNAMIC Fa0/2 192.168.3.84 / zhulei01.xxxx.com 
0015.c510.12a3 DYNAMIC Fa0/2 192.168.3.49 / zhounianou.xxxxcom 
另外在交换机上使用:show ip arp H.H.H 
也可以看出内网IP,但是不总管用 
以上方法不能查出外网IP,只使用于内网,所以在使用nmap这样的软件时,主机一定是要接在搜索网段里的,可以在交换机上用show vlan 看到目标服务器所在端口是在哪个网段里 


以上均是我平时工作总结出来的方法,经常会用到,不光是找中毒的机器,如果哪位同行有类似的经验希望也能共享一下~~~