将传入数据包绑定到第一个接口,将传出数据包绑定到第二个接口?

将传入数据包绑定到第一个接口,将传出数据包绑定到第二个接口?

我有一台带有 2 个网络接口卡的 Linux 机器,我需要使用一个来接收数据包,另一个来接收传出的数据包。

当前情况

答案1

如果您接受在您的机器上使用单个 IP/前缀(我们将其命名为 XXXX/Y,网关为 GGGG),那么这可以轻松完成。

  • 将您的地址添加到eth0,但带有完整的前缀子网。

    例如ip addr add X.X.X.X/32 dev eth0

  • 不要在 eth1 上设置地址。如果有,请使用以下命令清除它ip -4 addr flush dev eth1

  • 通过添加子网和网关路由eth1

    ip route add X.X.X.X/Y dev eth1 ip route add default via G.G.G.G dev eth1

  • 如果在 Ubuntu 或其他默认启用反向路径过滤的 Linux 发行版上,请禁用它,因为它们假定并强制执行对称路由。

    sysctl -w net.ipv4.conf.eth0.rp_filter = 0 sysctl -w net.ipv4.conf.eth1.rp_filter = 0

  • 如果您的两个网络接口都连接到交换机,那么您将需要不回答 eth1 上的 ARP。由于我们将 IP 地址添加到了eth0,因此我们可以将 设置arp_ignoreeth11(仅回答eth1地址的 ARP)或 8(不回答任何内容)。

    sysctl -w net.ipv4.conf.eth1.arp_ignore = 8

一旦完成此配置,将只有一个流量以相反的顺序流动:如果内核从 收到 XXXX 的 ARP 请求eth0,那么它将使用 进行回复eth0

相关内容