强制在一个接口上接收帧的响应并在另一个接口上传输

强制在一个接口上接收帧的响应并在另一个接口上传输

我想要使​​用两个接口,一个用于数据包接收,另一个用于数据包传输。

通常,当接收到一个数据包时,接收该数据包的接口就是本地机器将回复该数据包的接口。

但是,我希望将具有特定 MAC 地址的数据包发送到 tap 接口,应用程序使用该接口通过无线链路发送数据包。

换句话说,数据包在铜链路上组合,但数据包通过无线电链路回复。

想象一下卫星下行链路,但想象一下地面上行链路。

我已使用桥接 iproute2 桥接应用程序尝试强制与 MAC 地址和无线电链路使用的分接头关联。使用以下命令:

bridge fdb add 00:04:f9:02:01:00 dev tap0

Checking...
# bridge fdb| grep 2:01:00
00:04:f9:02:01:00 dev tap0 self permanent

但是,当我从与该 MAC 地址关联的系统执行 ping 操作时:

# bridge fdb| grep 2:01:00
00:04:f9:02:01:00 dev eth2 master br-radio0 
00:04:f9:02:01:00 dev tap0 self permanent

结果似乎是使用了eth2而不是tap0。

我使用了 eatables 并用 MAC 地址标记数据包:

ebtables -A OUTPUT -d 00:04:f9:02:01:00 -j mark --set-mark 4

and using 'ip':

ip rule add fwmark 4 table 1
ip route add 10.15.84.218 dev tap0 table 1

强制系统的 IP 地址使用 tap0 来路由数据包。

我也考虑过使用接口绑定,但是它似乎不再适合分割路径以分离输入和输出接口。

我还遇到过多链路 PPP,我依稀记得它允许将多条 DSL 线路绑定在一起,也许这就是我记得分割路径这个想法的地方。

过去,我编写了自己的隧道代码,然后根据需要进行拆分或合并。这一次,我尝试使用标准工具和功能,这样我就不必编写/重新编译代码,也许只需根据操作系统/标准工具的变化进行脚本调整。

Linux 版本:4.4.123。以及类似最新版本的 iprouter/ebtables。

相关内容