11

我正在使用ip tuntap创建一个点击界面,如下所示:

$ sudo ip tuntap add mode tap tap0

之后,我设置接口并使用通用 IP 命令对其进行寻址。然后我可以看到我的界面并用一个简单的ifconfig.

现在,一位老师告诉我,通过创建一个 tap 接口(在这种情况下命名为 tap0),我会找到一个/dev/net/tap0节点,并且我可以在其中写入或读取它。但是,我找不到它。我“只是”有一个/dev/net/tun.

我必须处理这个 tun 节点,还是我真的应该有一个 tap0 节点?

4

2 回答 2

22

自从提出这个问题以来已经有很长时间了,但我认为发布一个实际答案以供将来参考是个好主意。

Tap 接口和 tun 接口一样,是内核内 TUN/TAP 设备驱动程序提供的虚拟接口。该驱动程序最初提供的唯一接口是/dev/net/tun问题中提到的字符设备。

通过发出:

$ sudo ip tuntap add mode tap tap0

我们指示ip tuntap创建一个名为 的网络接口tap0,这是通过ioctl(2)对上述设备文件的正确调用/dev/net/tun来与底层 TUN/TAP 设备驱动程序对话来完成的,正如我们ip tuntap源代码中所看到的那样。

其中一个ioctl(2)调用(带有TUNSETIFF选项的调用,首先被调用)返回一个文件描述符,该文件描述符与新创建的虚拟接口相关联,并且可以由进程使用。


总结一下:

我必须处理这个 tun 节点,还是我真的应该有一个 tap0 节点?

设备文件仅用作创建 tap 和 tun 接口的/dev/net/tun起点,用户空间实用程序如iproute2. 在这个问题的背景下,没有必要像ip tuntap我们的工作那样处理它。

不需要或不希望为使用分接接口的进程创建任何额外的/dev/net/tap0设备文件。

于 2017-02-06T14:15:27.967 回答
5

you need to activate that link with command

ip link set dev tap0 up

after that you can use it.

于 2013-06-06T13:56:47.483 回答