如何将ARP数据包发送到不同的子网?

时间:2019-02-28 08:11:56

标签: linux routes subnet arp private-subnet

setup image
我有2对设置。
1. OpenSuse(A)和Opensuse(B)
2. OpenSuse(C)和Centos(D)

两个设置中都有3个接口,它们之间都内部连接。 即,第一对具有eth0,eth1,eth2,第二对具有eth0,eth1,eth2。 分配给接口的IP地址如下:

第一对

  • Opensuse eth0-172.28.215.10 / 24,eth1-20.1.121.2 / 24, eth2-30.1.121.2 / 24
  • Opensuse eth0-172.28.215.11 / 24,eth1-20.1.121.3 / 24, eth2-30.1.121.3 / 24

第二对

  • Opensuse eth0-172.28.215.20,eth1-21.1.121.2,eth2-31.1.121.2
  • Centos eth0-172.28.215.21,eth1-21.1.121.3,eth2-31.1.121.3

172.28.215.1是eth0的网关。 eth1和eth2没有网关。 AB和CD之间没有连接有关eth1和eth2的电缆,只有eth0。即eth1和eth2连接在A&B之间,但不连接在A&C或A&D之间 问题是

第一对(A&B):

20.1.121.2 --> 20.1.121.3 -- works fine
20.1.121.2 --> 30.1.121.3 -- works fine
30.1.121.2 --> 20.1.121.3 -- works fine
30.1.121.2 --> 30.1.121.3 -- works fine

和另一种方法也很好 此外,我还可以在不同子网之间发送ARP数据包。我不知道这是怎么发生的。可能是这样配置的arptables,我是arptables概念的新手。

与第二对(C&D)一样

21.1.121.2 --> 21.1.121.3 -- works fine
21.1.121.2 --> 31.1.121.3 -- doesn't work
31.1.121.2 --> 21.1.121.3 -- doesn't work
31.1.121.2 --> 31.1.121.3 -- works fine

未发送数据包的情况是在不同子网之间。 这是发生了什么(关于arp和路由):

21.1.121.2 -> 21.1.121.3 ==> arp request was sent from C and arp response came from D and the packet was sent perfectly on eth1.
21.1.121.2 -> 31.1.121.3 ==> arp request was sent from C and arp response never came from D so, the packet was not sent.

现在更有趣的是从D到C的数据包传输:

21.1.121.3 -> 21.1.121.2 ==> arp request was sent from D and arp response came from C and the packet was sent perfectly on eth1.
31.1.121.3 -> 21.1.121.2 ==> arp request was never sent from D. Instead the packet was sent on eth0.

仅供参考:我可以在tshark/tethereal数据包捕获中看到所有这些信息。在执行此操作之前,我清除了arp缓存。我决定基于mac地址发送和接收的数据包。我们发送的数据包是SIP数据包。
请让我知道是否需要更多信息。

现在的问题是,为什么会有这种区别?我该怎么做才能使第二对(主要在机器D上)作为第一对工作?

0 个答案:

没有答案