linux 中的 Tap 设备未正确传递 ARP/IP 数据包?

Tap device in linux not properly passing ARP/IP packets?

好像还有一些人和我有类似的问题,但我觉得他们的问题特别具体。我想我可能 运行 陷入了一个普遍的问题。

我在 Linux 中有一个连接到另一个网络的 TAP 设备(在 C 中创建),我希望我的计算机能够通过这个 TAP 设备与另一个网络通信。

我可以清楚地看到使用wireshark 传入的arp 数据包,但我的内核不会响应它们。我已经尝试配置网桥并设置网桥的 IP 地址,但无济于事。我也试过桥接到物理硬件,出于某种原因,Linux 似乎没有将数据传递给另一个网卡。

如果我设置了静态 ARP 路由,这个 Linux 框似乎不会响应对其上设备的 ping 命令。

# ifconfig tap0 up
# brctl addbr br0
# brctl addif br0 tap0
# brctl addif br0 eth9
# ifconfig br0 up

我可以尝试将 br0、eth9 或 tap0 设置为 IP,但 none 回复 ping 或 arps。就算我毁了那座桥,也没有什么。

我感觉我想要的是一个"pretend"界面。喜欢 "this is a fake ethernet card" 并讨论它。我觉得用 tap 应该可以做到。

类似问题:

Linux TUN/TAP: Unable to read data back from TAP devices

Why aren't ARP or ICMPv6 packets processed by a Linux TAP device

很遗憾,这与 tap/tun 设备在 Linux 中的工作方式无关。事实上,这个机制会起作用。

问题在于我使用 "send" 和 "recv" 与原始点击设备通信。 Wireshark 无法区分,但 Linux OS 将拒绝使用来自套接字的数据。

用这个人的例子:http://www.cis.syr.edu/~wedu/seed/Labs/VPN/files/simpletun.c