7

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

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

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

感谢您的关注!

4

2 回答 2

5

您可以向每个系统上的接口添加一个附加地址,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。

于 2011-05-25T14:40:20.447 回答
2

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

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

于 2011-05-25T21:33:44.523 回答