2011-05-25 47 views
7

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

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

我们正在使用Linux和Python解决方案将是可取的。

感谢您的期待!

+0

此外,识别内核对接收数据包做什么的好方法是什么?它丢弃它吗?发送到'/ dev/null'?是的,这可能是一个单独的问题。 – 2011-05-25 14:19:28

+0

'netstat -s'的输出可能让你知道内核对数据包做了什么(丢弃/传递/连接计数),尽管只在聚合级别上。使用'tcpdump'或'wireshark'来查看线路上发生了什么。 – 2011-05-25 14:30:13

+1

好吧,随着我的欺骗逼近,我看到收到的数据包,但没有响应产生。看起来好像内核由于某种原因默默丢弃数据包。 – 2011-05-25 14:37:00

回答

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 

然后结合1.1.1.1机器A和连接到2.2.2.2。

2

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

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