如何通过不同的接口路由TCP / IP响应?

问题描述

| 我有两台机器,每台机器都有两个有效的网络接口,一个以太网接口
eth0
和一个tun / tap接口
gr0
。目标是使用接口“ 1”在计算机A上启动TCP连接,但随后使计算机B的响应(ACK等)通过以太网接口“ 0”返回。因此,机器A在ѭ1上发出SYN,而机器B在自己的ѭ1上接收SYN,然后通过then0ѭ发回它的SYN / ACK。 tun / tap设备是GNU Radio无线链接,我们只希望响应通过以太网来。 最简单的方法是什么?我需要对TCP / IP进行更多的研究,但是最初我想让源欺骗的输出数据包告诉接收者对欺骗的地址做出响应(应该将其路由到“ 0”)。这将涉及将来自tun / tap接口的IP通过“ 1”进行路由,而将其他流量留给“ 0”。 我们正在使用Linux,并且Python解决方案会更可取。 感谢您的光临!     

解决方法

您可以在每个系统上的“ 10”接口中添加一个附加地址,并将这些新地址用作TCP连接端点。然后,您可以使用静态路由来指示每台计算机到达另一台计算机的“ 10”地址所采用的路径。 例如:
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。     ,您可能想启用火星数据包
net.ipv4.conf.all.log_martians
的日志记录,并在受影响的接口上禁用反向路径筛选
net.ipv4.conf.<interface>.rp_filter
。 该sysctl vars可通过/15ѭ实用程序和/或
/proc
文件系统访问。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...