【问题标题】:How to route TCP/IP responses through a different interface?如何通过不同的接口路由 TCP/IP 响应?
【发布时间】:2011-09-01 19:11:55
【问题描述】:

我有两台机器,每台都有两个有效的网络接口,一个以太网接口eth0 和一个tun/tap 接口gr0。目标是使用接口gr0 在机器A 上启动TCP 连接,然后让机器B 的响应(ACK 等)通过以太网接口eth0 返回。因此,机器 A 在 gr0 上发送 SYN,机器 B 在自己的 gr0 上接收到 SYN,然后通过 eth0 将其 SYN/ACK 发回。 tun/tap 设备是一个 GNU Radio 无线链接,我们只希望通过以太网获得响应。

实现此目的最简单的方法是什么?我需要对 TCP/IP 进行更多研究,但我最初认为源欺骗传出数据包会告诉接收器响应欺骗地址(应该路由到eth0)。这将涉及从 tun/tap 接口通过gr0 路由 IP,并将其他流量留给eth0

我们使用的是 Linux,最好使用 Python 解决方案。

感谢收看!

【问题讨论】:

  • 另外,识别内核对收到的数据包做了什么的好方法是什么?它会丢弃它吗?发送给/dev/null?是的,这可能是一个单独的问题更好。
  • netstat -s 的输出可能让您了解内核如何处理数据包(丢弃/传递/连接计数),尽管仅在聚合级别。使用tcpdumpwireshark 查看线路上发生了什么。
  • 好吧,我的欺骗接近了,我看到收到的数据包,但没有生成响应。似乎内核出于某种原因默默地丢弃了数据包。
  • 我打赌你会发现像这样的非对称路由要么 (a) 不可能,要么 (b) 如此麻烦以至于不值得麻烦。我很想知道你为什么需要它。
  • 我认为你是对的,不值得麻烦。为了满足您的好奇心:我们正在测试一个 GNU Radio 程序,该程序通过无线电链路传输 IP 流量。我们目前遇到的问题是我们有许多重复的 ACK 和重传。有人向我们建议,通过以太网将响应路由回可以让我们进一步确定核心问题。虽然是一位知识渊博的网络人士提出了这个建议,但我认为他并没有完全考虑过执行此类路由所涉及的步骤。

标签: linux networking spoofing


【解决方案1】:

您可以向每个系统上的lo 接口添加一个附加地址,并将这些新地址用作 TCP 连接端点。然后,您可以使用静态路由来指导每台机器通过哪条路径到达另一台机器的lo 地址。

例如:

Machine A:
  ip addr add 1.1.1.1/32 dev lo
  ip route add 2.2.2.2/32 dev eth0 via <eth0 default gateway>

Machine B:
  ip addr add 2.2.2.2/32 dev lo
  ip route add 1.1.1.1/32 dev gr0

然后绑定到机器A上的1.1.1.1并连接到2.2.2.2。

【讨论】:

    【解决方案2】:

    您可能有兴趣启用记录火星数据包net.ipv4.conf.all.log_martians,并在受影响的接口上禁用反向路径过滤net.ipv4.conf.&lt;interface&gt;.rp_filter

    此 sysctl 变量可通过 sysctl 实用程序和/或 /proc 文件系统访问。

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 2020-12-15
      • 2021-11-25
      相关资源
      最近更新 更多