我正尝试从机器的用户空间向在 eth0 上监听的应用程序发送数据包,就好像它们来自远程机器一样。
我似乎找不到关于 TUN/TAP 设备与网络堆栈其余部分交互的确切方式的良好文档?如果数据包发往远程主机,它们是否会转发到 eth0?默认情况下,发往本地主机的数据包是否会转发到用户空间应用程序?相对于 Netfilter 堆栈,数据包在内核中的哪个阶段出现?
这种行为似乎没有得到很好的记录(http://openvpn.net/archive/openvpn-users/2005-05/msg00224.html,https://www.kernel.org/doc/Documentation/networking/tuntap.txt))。
答案1
tun tap 设备对内核来说是一样的,因为它无法分辨数据是来自连接到以太网接口的线路还是来自用户空间应用程序。写入数据时,它会转发到用户空间应用程序,而不是物理接口设备(例如 eth0)
数据包转发到的接口将照常基于路由表,您可以使用ip route
或查看路由表netstat -r
。这也适用于寻址到本地主机的数据包。
此外,TUN/TAP接口也可以作为路由表中出现的路由的接口。