Прошло много времени с тех пор, как был задан вопрос, но я подумал, что было бы неплохо опубликовать фактический ответ для дальнейшего использования.
Интерфейсы 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?
Файл устройства /dev/net/tun
используется только в качестве отправной точки для создания интерфейсов tap и tun утилитами пользовательского пространства, такими как iproute2
. В контексте этого вопроса нет необходимости заниматься им, так как ip tuntap
делает эту работу за нас.
Любые дополнительные файлы устройств /dev/net/tap0
не нужны и не должны создаваться для процессов, использующих интерфейсы касания.
person
chrk
schedule
06.02.2017