Коснитесь интерфейсов и устройства /dev/net/tun, используя команду ip tuntap

Я использую ip tuntap для создания интерфейса касания, например:

$ sudo ip tuntap add mode tap tap0

После этого я настраиваю интерфейс и обращаюсь к нему с помощью обычных IP-команд. Затем я вижу свой интерфейс и адрес с помощью простого ifconfig.

Теперь учитель сказал мне, что, создав интерфейс tap (в данном случае с именем tap0), я найду узел /dev/net/tap0 и смогу писать или читать в нем. Однако я не могу найти его. У меня "просто" есть /dev/net/tun.

Должен ли я иметь дело с этим узлом tun, или у меня действительно должен быть узел tap0?


person C. Paul    schedule 25.03.2013    source источник


Ответы (2)


Прошло много времени с тех пор, как был задан вопрос, но я подумал, что было бы неплохо опубликовать фактический ответ для дальнейшего использования.

Интерфейсы 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
comment
Никаких дополнительных файлов устройства /dev/net/tap0 не требуется и не ожидается, что они будут созданы для процессов, использующих интерфейсы ответвлений. Почему? как бы я использовал устройство без файла устройства или файлового дескриптора? - person Void Star; 26.11.2018
comment
@VoidStar Это зависит. Как вы могли бы заметить, если бы вы на самом деле перешли по ссылке на исходный код ip tuntap в моем ответе, у вас действительно есть файловый дескриптор, если вы программно создаете интерфейс крана — это тот, который вы получаете, open(2) подключая устройство /dev/net/tun и используя для выполнения соответствующие ioctl(2) вызовы. Если вы не создаете его программно, вы можете думать об интерфейсе крана как о сетевом интерфейсе, как, например, eth0. Вам нужен файловый дескриптор для использования eth0? Как вы используете сетевой интерфейс? Вы можете подключить его к мосту, установить правила маршрутизации и т. д. и т. п. - person chrk; 26.11.2018
comment
Если я использую ip tuntap add, я не манипулирую напрямую ни /dev/net/tun, ни ioctl(2), поэтому я не совсем понимаю, какое это имеет значение. Ядро, кажется, знает об устройстве, но опять же, как программа пользовательского пространства получает к нему доступ? - person Void Star; 26.11.2018
comment
@VoidStar Любой другой процесс может использовать его точно так же, как он использует остальные сетевые интерфейсы на хосте. Назначьте адрес крановому интерфейсу, настройте его правильно, например. установить правила маршрутизации, правила iptables и т. д. и использовать их как всегда, например. с помощью сокетов. В непрограммном использовании интерфейса tap нет ничего особенного по сравнению с другими сетевыми интерфейсами на хосте. - person chrk; 26.11.2018
comment
@VoidStar Настройка сетевых интерфейсов, очевидно, выходит за рамки исходного вопроса здесь, но есть много ресурсов, которые вы можете найти об этом на этом сайте, в других блогах, статьях и форумах и, конечно же, на справочных страницах. Рассмотрите возможность публикации нового вопроса, если у вас действительно есть конкретный вопрос, как предполагают правила. - person chrk; 26.11.2018

вам нужно активировать эту ссылку с помощью команды

ip link set dev tap0 up

после этого вы можете использовать его.

person Aleksei Kurepin    schedule 06.06.2013
comment
это не сработало для меня, и я думаю, что нужно больше объяснений, почему это необходимо - person Void Star; 26.11.2018
comment
Привет. было бы хорошо, если бы вы описали свой корпус, ядро, модули и т. д. С 2013 года многое изменилось. Может быть, вы попытаетесь реализовать это на докере? - person Aleksei Kurepin; 04.12.2018