通过交换机连接 2x10G 的实验室设置中出现错误的 ARP 条目

通过交换机连接 2x10G 的实验室设置中出现错误的 ARP 条目

我有两个盒子通过 10G 交换机连接:

  • 1 个“发送方”盒,带有 1x 端口静态地址 10.0.1.1
  • 1 个“接收器”盒,带有 2 个端口静态地址 10.0.1.2 和 10.0.1.3

我的目标是从“发送方”框将 UDP 数据包分别发送到“接收方”框上的两个端口中的任一个。

我很难理解为什么发送方盒上的 ARP 会看到接收方盒上的两个接口具有相同的 MAC 地址但不同的 IP 地址。

sender$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.1.2                 ether   00:0f:53:9a:44:b1   C                     enp0s25
10.0.1.3                 ether   00:0f:53:9a:44:b1   C                     enp0s25

您可以在接收器上看到,MAC地址分别以b0和b1结尾。

receiver$ ifconfig
...
enp74s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.1.2  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::20f:53ff:fe9a:44b0  prefixlen 64  scopeid 0x20<link>
        ether 00:0f:53:9a:44:b0  txqueuelen 1000  (Ethernet)
        RX packets 43970  bytes 3337154 (3.3 MB)
        RX errors 0  dropped 6  overruns 0  frame 0
        TX packets 217  bytes 36639 (36.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 145

enp74s0f1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.1.3  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::20f:53ff:fe9a:44b1  prefixlen 64  scopeid 0x20<link>
        ether 00:0f:53:9a:44:b1  txqueuelen 1000  (Ethernet)
        RX packets 43632  bytes 3205973 (3.2 MB)
        RX errors 0  dropped 6  overruns 0  frame 0
        TX packets 1375  bytes 249294 (249.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 151

在接收方,有两个几乎相同的 ARP 条目,只是接口不同。这实际上看起来是“正确的”,因为我可以通过两个本地端口到达发送方的同一网络接口。

receiver$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.1.1                 ether   f0:de:f1:80:b4:7a   C                     enp74s0f1
10.0.1.1                 ether   f0:de:f1:80:b4:7a   C                     enp74s0f0

也许我选择实例化同一子网上的所有接口是个问题?我该如何实现明确定位接收器端口的目标?

我的接收端的 netplan 就像

network:
  version: 2
  renderer: networkd
  ethernets:
    enp69s0:
      dhcp4: true
      match:
        macaddress: 18:c0:4d:8b:49:a3
    enp74s0f0:
      addresses:
        - 10.0.1.2/24
      dhcp4: no
      match:
        macaddress: 00:0f:53:9a:44:b0
    enp74s0f1:
      addresses:
        - 10.0.1.3/24
      dhcp4: no
      match:
        macaddress: 00:0f:53:9a:44:b1

谢谢你!

答案1

解决这个问题的一个非常简单的方法是使用 ARP 过滤器。它的作用是过滤掉与本地接口不匹配的 ARP 数据包。在这种情况下,只有相应的接口会响应 ARP 请求,而不会代表同一张卡上的孪生接口响应 ARP 请求,而这正是导致问题的原因。

/etc/sysctl.d/<something>.conf 如果您愿意,请将这些行添加到或/etc/sysctl.conf本身:

net.ipv4.conf.<iface>.arp_ignore = 1
net.ipv4.conf.<iface>.arp_announce = 2

其中<iface>是接口名称或all用于应用于框中的所有接口。

完整文档位于此处:

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html#2_6_arp_announce

相关内容