我想要使用两个接口,一个用于数据包接收,另一个用于数据包传输。
通常,当接收到一个数据包时,接收该数据包的接口就是本地机器将回复该数据包的接口。
但是,我希望将具有特定 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。