【问题标题】:Linux sends a packet from a source IP of one interface but a source MAC of anotherLinux 从一个接口的源 IP 但另一个接口的源 MAC 发送数据包
【发布时间】:2015-01-22 11:52:20
【问题描述】:

我的 Linux (Debian) 服务器有 eth0 和 eth1,它们都在同一个子网上。 它从两个接口接收数据包,但它只从 eth0 回复。 发往 eth1 的数据包是从 eth0 回复的,回复有 eth0 的 src mac 和 eth1 的 src IP。 我通过在 Linux 服务器上运行 tcpdump 时向 eth1 发送 ping 来验证这一点。

这是一个问题,因为: 由于没有使用 eth1 的源 mac 发送数据包(初始 arp 除外),因此交换机会忘记 eth1 mac。那么,交换机接收到的每一个目的mac为eth1的包都是broadcasted across the network, flooding it,这让我们很难过。

我想要: 我的 Linux 服务器从 eth0 和 eth1 发送数据包。我认为最好的解决方案是,对于我们收到的每个数据包,我们都从同一个接口进行回复。另一种说法是,我想将每个接口绑定到它的 IP 和 MAC - 这样它就只会从这些地址发送数据包。

更多详情: 我的 Linux 服务器是一个 ISCSI 目标,它与一个 ESX 通信,它是一个 ISCSI 发起程序 - 通过 Cisco 交换机。交换机会在 5 分钟后忘记 MAC,而 ESX 可能会记住它们 20 分钟(如 herehere 所讨论的)。因此,当 ESX 记住 Linux 的 mac 时,ESX 会继续发送 ISCSI 请求,这会淹没网络,而我的服务器仅通过其中一个接口发送 ISCSI 回复。

【问题讨论】:

  • 您是否考虑过绑定接口? (或者如果您不关心吞吐量,请将两个 ips 分配给一个接口)
  • @thatotherguy,我希望我的客户能够选择 eth0 和 eth1 是否在同一个子网上。此外,我编写的解决方案(如果存在)将使我们的其余代码保持原样,这很好。仍然-bonding 是一个很好的方向,谢谢

标签: linux networking routing ping arp


【解决方案1】:

这不是您要求的,但如果您只是在执行此操作的盒子上设置了一个 cron 作业

ping -c 1 -I eth1 <address of eth1's default gateway>

每分钟,那么您将每分钟至少有一个数据包离开 eth1,上面有 eth1 的 MAC 地址。 -I 告诉 ping 绑定到特定接口,因此即使这是首选路由,它也不会使用 eth0。

【讨论】:

  • 谢谢,作为一种变通方法,我正在做类似的事情:我是 sending an arp 每分钟通过 cron。
猜你喜欢
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 2015-01-10
相关资源
最近更新 更多