作为Linux管理员,您已经安装了一个带有6个NIC eth0到eth5的新Linux盒子.
eth0接口配置正确,所有其他接口当前处于up状态,但没有IP地址.网络人员只需将四根电缆连接到此盒子即可.两条LAN电缆用于将盒子连接到生产网络,两条用于将盒子连接到专用网络.您只知道eth0已连接到生产网络.但是您不知道哪个其他NIC连接到同一个交换机,因为有不同的服务器代和/或网络人员使用错误的NIC进行连接.
手头的任务
由于此设置是您的基础架构的典型设置,因此您希望自动配置绑定接口.现在您的任务是检测哪些NIC根本没有连接,哪些NIC链接到同一个交换机,以便它们可以绑定.您只能访问Linux机器,无法查询交换机.
思路
检测链接状态很简单:
ethtool $device | grep 'Link detected' | cut -d ':' -f 2
但是如何匹配连接到同一交换机的设备?
在HP-UX中,有一个名为linkloop [1]的工具.缺少官方的Linux工具(虽然有一个旧的SourceForce项目).
我已经想到的可能的解决方案是:
>使用tcpdump监听所有接口.制作并发送ICMP(广播)数据包.看到该数据包的接口需要连接到同一个交换机. – >需要提供可能用于此的简单工具的建议.我想使用普通的shell命令或Python来编写脚本.
>尝试通过一些简单的协议(HTTP?)与外部盒子通话,看看是否有响应. – >容易出错并且依赖于外部盒子.
您是否有进一步的想法或建议如何解决此任务?
提前感谢您的所有评论!
解决方法
您可以使用tcpdump查看以下信息(替换相应的接口):
tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000'
基于标准的CDP版本是LLDP(链路层发现协议).一些供应商默认启用此功能,其他供应商关闭,因此您的里程会有所不同. Linux有一些LLDP实现,但是如果你想要类似于上面的东西,你可以使用它(在Cisco交换机上设置LLDP并测试下面的内容,这与上面的更一致):
tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether proto 0x88cc'
除此之外,我会说您提供的选项1的修改可能有效,但是,您可以尝试普通的ICMP(不是ARP表中的主机)并捕获ARP数据包,而不是发送广播ICMP.如果ARP请求发送到eth0并且您在eth1和eth3上收到它,那么您知道它们在同一VLAN上.最简单的命令如下:
tcpdump -i eth0 arp