![初始设置](https://linux22.com/image/609159/%E5%88%9D%E5%A7%8B%E8%AE%BE%E7%BD%AE.png)
初始设置
作为一名 Linux 管理员,您安装了一台全新的 Linux 机器,上面有 6 个 NIC,从 eth0 到 eth5。eth0 接口配置正确,所有其他接口当前都已启动,但没有 IP 地址。网络人员只是将四条电缆连接到此机器。两根 LAN 电缆用于将机器连接到生产网络,两根用于将机器连接到专用网络。您只知道 eth0 连接到生产网络。但您不知道哪个其他 NIC 连接到同一交换机,因为服务器的代数不同,或者网络人员使用了错误的 NIC 进行连接。
当前任务
由于此设置对于您的基础架构而言很典型,因此您需要自动配置绑定接口。现在,您需要检测哪些 NIC 根本没有连接,哪些 NIC 已链接到同一交换机,因此它们可能已绑定。您只能访问 Linux 机器,而无法查询交换机。
想法
检测链接状态很容易:
ethtool $device | grep 'Link detected' | cut -d ':' -f 2
但是,如何匹配连接到同一台交换机的设备呢?
在 HP-UX 中,有一个用于此目的的工具,称为链接环[1]. 缺少官方Linux工具(尽管有一个旧的SourceForce项目)。
我已经想到的可能的解决方案是:
使用 tcpdump 监听所有接口。制作并发送 ICMP(广播)数据包。看到该数据包的接口需要连接到同一交换机。-> 需要一些可用于此目的的简单工具的建议。我想使用普通的 shell 命令或 Python 来编写脚本。
尝试通过一些简单的协议(HTTP?)与外部盒子对话,看看是否有响应。-> 容易出错并且依赖于外部盒子。
您对如何解决这个任务还有其他想法或建议吗?
提前感谢您的所有评论!
答案1
交换机可能已经向您发送了您想要的信息。如果它们是 Cisco 交换机,则默认情况下它们将使用称为 CDP(Cisco 发现协议)的进程,该进程将为您提供有关所连接交换机的信息。
您可以使用 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 表中的主机),而不是发送广播 ICMP,并捕获 ARP 数据包。如果 ARP 请求从 eth0 发出,并且您在 eth1 和 eth3 上收到它,那么您就知道它们位于同一个 VLAN 上。最简单的命令如下:
tcpdump -i eth0 arp
答案2
如果交换机使用 LLDP 与您通信,您可能可以运行链路层发现协议并在那里找到更多信息。
答案3
答案4
为什么不直接下载并构建该linkloop
工具?它并没有那么老...
否则,我只会使用一些通过第 2 层广播的工具并验证您是否通过 tcpdump 接收它。
发送广播 ICMP 数据包很容易ping -b 192.168.1.255