如何识别两台服务器之间的交叉连接和交换机连接 NIC

网络工程 转变 以太网
2022-02-18 22:41:46

我有两个 openbsd 服务器,每个服务器有 6 个 NIC 卡。

>lspci | grep -i ether
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
01:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
04:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
04:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)

其中,第一个上的一个网卡和第二个上的两个网卡已拔下,其余网卡除外一个通过开关连接。server1 上的最后一个网卡通过交叉电缆直接连接到第二个服务器。

如何确定哪个接口是直接连接到另一台服务器的接口,而不是通过交换机?我尝试了arping和ping并分析tcpdump,希望连接到交换机的那些会显示交换机的mac-id,但一切都显示了机器的nic mac-id。

4个回答

简短的回答:你不能。

交换机不会修改以太网帧,因此直接从服务器发送的帧与通过交换机的帧之间没有区别。

您正在寻找的流行语是MDI-X

在 Linux 系统上,您可以使用ethtool它来检索此类信息(可能并非每个 NIC 都支持它):

# ethtool eth0
Settings for eth0:
  Speed: 100Mb/s
  Duplex: Full
  ...
  MDI-X: off

我不确定ethtoolOpenBSD 的等价物是什么,或者它是否可用。对不起,如果没有。但理论上,您可以从接口状态中检索此类信息,但不能从流量中检索。

你有几个选择:

选项 1记录直连服务器的 NIC 的 IP 和 MAC 地址(您称之为“其他”服务器)。从您的原始服务器 ping 该 IP 地址并使用arp命令检查“其他”服务器的 MAC 地址出现在哪个接口上。

选项 2通过交换机生成流量,例如 ping 您知道通过交换机端口连接的网络上的多个服务器。运行arp,如果一个端口有多个 MAC 地址,则该接口连接到一个交换机端口(多个 MAC 地址是赠品)。

选项 3.检查您的服务器的路由表。您应该能够看到直接连接的服务器的路由,以及它的去向,例如

netstat -rn

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.10.1.2        0.0.0.0         255.255.255.255 UH        0 0          0 eth0
10.10.2.0        10.8.0.2        255.255.255.0   UG        0 0          0 eth1
60.60.60.0      0.0.0.0         255.255.255.0   U         0 0          0 eth2
10.254.254.0     0.0.0.0         255.255.0.0     U         0 0          0 eth3
0.0.0.0         60.60.60.1      0.0.0.0         UG        0 0          0 eth0

所有这些都取决于一些细节,例如这些接口中的任何一个是否使用绑定/绑定,或某种级别的聚合,服务器是否具有桥接接口等。

以太网交换机通常使用称为透明桥接的东西工作 - 强调透明,这意味着它们通常对终端主机有些不可见(除了 STP/CDP 之类的东西)。所以永远不要期望在主机的 ARP 表中看到交换机 MAC 地址!

我希望你觉得这些有用:-)

虽然您无法直接判断哪些接口连接到交换机以及哪些接口直接连接两个服务器,但可能有一些方法可以间接地做到这一点。即,查找通常由交换机而不是服务器产生的流量类型。

除非您将服务器配置为参与 STP(即,通常仅在您使用交换机/网桥桥接或运行虚拟化时才需要考虑),否则它们不会像运行 STP 的交换机那样发送 BPDU。

您可以使用 tcpdump 捕获这些帧(如果存在)(替换适当的接口):

tcpdump -nn -v -i eth0 -c 1 'stp'

如果您的服务器正在使用 STP 或者您的交换机没有,那么您可以查看其他选项。

如果它们是 Cisco 交换机,默认情况下它们将使用称为 CDP(Cisco 发现协议)的进程。这通常在某些环境中被禁用,因此您可能需要考虑启用它进行测试。其他一些供应商也支持 CDP,但默认情况下可能会禁用它。您可以使用 tcpdump 捕获这些内容,如下所示:

tcpdump -nn -v -i eth0 -c 1 'ether[20:2] == 0x2000'

CDP 的标准版本是 LLDP(链路层发现协议)。如果供应商的开关支持它,他们可能默认打开它,而其他人则关闭它。这是捕获此流量的 tcpdump 命令:

tcpdump -nn -v -i eth0 -c 1 'ether proto 0x88cc'

可能还有其他选择,但这些是我希望从商业环境中的转变中看到的好机会。