在 Tap 设备上侦听通过文件描述符写入的数据包

在 Tap 设备上侦听通过文件描述符写入的数据包

我在完全理解如何使用点击设备时遇到问题。

我创建了一个 Tap 设备并将其启动并运行。用户空间程序打开其文件描述符并接收发送到设备的以太网帧。 Tap 设备获取 IP 地址和网络掩码 10.254.0.1/24。
到目前为止,效果很好。我做了一个echo "test" | netcat -uq0 10.254.0.2 12345,程序接收数据包并通过另一种通信方法将其转发到另一台机器。

但相反的方法根本不起作用:
用户空间程序将有效的以太网帧写入 Tap 设备的文件描述符。但anetcat -ul 12345没有收到任何东西。与 相同socat。我还尝试创建一个桥并向其添加分接设备,但这也不起作用。

我很困惑,因为如果我用 Wireshark 监控 Tap 设备,我可以看到每个数据包,并且每个数据包都是正确的。命令的
计数器随着用户空间程序写入 Tap 设备的每一帧而增加。 ARP 被禁用,因为现在只处理 IP 数据包。tx packets: XYifconfig
ip link set dev tap0 arp off

您可以将我的设置想象如下:

         host1              (some channel)               host2
netcat --> tap0 --> prog   --------------->    prog  -->  tap0  -->  netcat
<=============== works ========================================>| does not work

您知道我如何在 Tap 设备的“另一端”接收数据包吗?或者我可以在哪里进一步阅读?

编辑2:删除了编辑。 (错误的测试得出错误的结论。校验和有问题。现在数据包有效,但也没有收到。)

答案1

一些进一步的调查netstat -s帮助我找到了原因:反向路径过滤器丢弃了我的数据包。 (到现在我还没完全明白为什么......)

将分接头设备上的过滤器设置为宽松模式使其工作:

sudo sysctl -w net.ipv4.conf.tap0.rp_filter=2

(通过将其设置为0did来禁用它不是为我工作。)

相关内容