Что такое tap интерфейс
Перейти к содержимому

Что такое tap интерфейс

  • автор:

Виртуальный сетевой интерфейс в linux. TAP vs TUN

Читатели, не нуждающиеся в теоретическом изложении концепции виртуальных сетевый интерфейсов Linux, могут сразу перейти к настройке по ссылкам:

  • #Создаем интерфейс типа tun с помощью ip
  • #Создаем интерфейс типа tap с помощью ip
  • #Создаем интерфейс типа dummy с помощью ip
  • #Создаем интерфейс типа tun с помощью systemd-networkd
  • #Создаем интерфейс типа tap с помощью systemd-networkd
  • #Создаем интерфейс типа dummy с помощью systemd-networkd

Создавать сетевые интерфейсы в linux нам позволяют различные модули ядра. Но там, где для реальных железных сетевых карт эти модули ядра, или как их еще называют — драйверы, обеспечивают прием данных от стека TCP/IP и их формирование уже в виде электрического сигнала на сетевой карте, драйверы виртуальных сетевых интерфейсов (loopback) могут лишь, приняв эти данные, отдать их какому-нибудь приложению для дальнейшей обработки. Такая функциональность может быть востребована, если на вашем сервере установлены программы, использующие стек TCP/IP для обмена данными и, понятно, не нуждающиеся в выводе этих данных в реальную сеть. Пример: веб-сайт на drupal связывается с базой данных, установленной на этом же сервере:

Другим распростаренным примером использования виртуальных сетевых интерфейсов (loopback) в linux может быть их использование для целей построения виртуальных частных сетей — VPN. Вы наверняка слышали о таких технологиях как OpenVPN, GRE, WireGuard и т.д. Каждый из этих демонов создает виртуальный сетевой интерфейс который служит для прозрачной маршрутизации данных между узлами, находящимися на удалении друг от друга и не имеющих возможности прямого взаимодействия. Рассмотрим общую сетевую топологию на примере OpenVPN:

От используемого драйвера зависит тип интерфейса, его скорость, допустимый размер MTU и т. д. Совсем даже не обязательно, что загружать драйвер в ядро вам придется самостоятельно. Скорее всего, создавая интерфейс нужного типа, система сама подберет и загрузит требуемый драйвер. Вам лишь останется сконфигурировать уже работающий loopback интерфейс. В данной статье мы рассмотрим 3 возможных на конец 2016 года типа виртуальных интерфейсов в linux: tun, tap и dummy. Отличие интерфейсов tun и tap заключается в том, что tap старается больше походить на реальный сетевой интерфейс, а именно он позволяет себе принимать и отправлять ARP запросы, обладает MAC адресом и может являться одним из интерфейсов сетевого моста, так как он обладает полной поддержкой ethernet — протокола канального уровня (уровень 2). Интерфейс tun этой поддержки лишен, поэтому он может принимать и отправлять только IP пакеты и никак не ethernet кадры. Он не обладает MAC-адресом и не может быть добавлен в бридж. Зато он более легкий и быстрый за счет отсутствия дополнительной инкапсуляции и прекрасно подходит для тестирования сетевого стека или построения виртуальных частных сетей (VPN). Виртуальный интерфейс типа dummy очень похож на tap, разница лишь в том, что он реализуется другим модулем ядра.

Создаем виртуальный интерфейс в linux вручную

Создавать и удалять интерфейсы, назначать IP и MAC адреса, изменять MTU и многое другое нам помогает утилита ip. Пользоваться ip удобно и легко, но помните, что произведенные изменения будут потеряны после перезагрузки компьютера. Используйте ip в целях тестирования.

Создаем интерфейс типа tun

ip tuntap add dev tun0 mode tun
ip address add 192.168.99.1/30 dev tun0
ip address show tun0
2: tun0: mtu 1500 qdisc noop state DOWN group default qlen 500
link/none
inet 192.168.99.1/30 scope global tun0
valid_lft forever preferred_lft forever

Как видим у нас теперь есть виртуальный интерфейс с именем «tun0», у него есть IP-адрес, и ни слова о MAC-адресе — всё, как мы и рассчитывали. Его уже можно пинговать, и на нем уже можно запускать слушающие сервисы. Но что будет, если мы попытаемся добавить этот интерфейс в бридж?

ip link set dev tun0 master br0
RTNETLINK answers: Invalid argument

Команда ip логичным образом выдала ошибку — нет никакого смысла добавлять в бридж интерфейс, не обладающий поддержкой ethernet.

Создаем интерфейс типа tap

ip tuntap add dev tap0 mode tap
ip address add 192.168.99.5/30 dev tap0
ip address show tap0
3: tap0: mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether d6:1c:67:cd:6f:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.99.5/30 scope global tap0
valid_lft forever preferred_lft forever

У нас теперь появился новый виртуальный интерфейс с именем «tap0», у него есть как IP-адрес, так и MAC-адреса. Его также можно пинговать, и на нем также можно запускать слушающие сервисы. Команда, добавляющая интерфейс в бридж уже не выдаст ошибку, потому что это интерфейс, обладающий поддержкой ethernet:

ip link set dev tap0 master br0

Создаем интерфейс типа dummy

ip link add dev dum0 type dummy
ip address add 192.168.99.9/30 dev dum0
ip address show dum0
4: dum0: mtu 1500 qdisc noop master br0 state DOWN group default qlen 1000
link/ether 1a:37:3b:0f:da:be brd ff:ff:ff:ff:ff:ff
inet 192.168.99.9/30 scope global dum0
valid_lft forever preferred_lft forever

Вы наверняка заметили, что команда для добавления интерфейса изменилась. Ничего необычного. Так написана утилита «ip». Ну и конечно, виртуальный интерфейс типа dummy можно легко добавить в бридж:

ip link set dev dum0 master br0

Создаем виртуальный интерфейс в linux с помощью systemd-networkd

В systemd-networkd за создание интерфейсов отвечают одни конфигурационные файлы, имеющие суффикс «.netdev», а за их настройку другие, имеющие суффикс «.network». Соответственно нам понадобиться в /etc/systemd/network создать по паре конфигурационных файлов для каждого из исследуемых типов интерфейсов

Создаем интерфейс типа tun

Создадим соответственно файлы tun0.netdev с содержимым:

[NetDev]
Name=tun0
Kind=tun

Создаем интерфейс типа tap

Создадим соответственно файлы tap0.netdev с содержимым:

[NetDev]
Name=tap0
Kind=tap

Создаем интерфейс типа dummy

Создадим соответственно файлы dum0.netdev с содержимым:

[NetDev]
Name=dum0
Kind=dummy

Стоит отметить, что если вы планируете маршрутизировать траффик через виртуальные интерфейсы ( а, используя их для цели создания виртуальных частных сетей (VPN), вы точно этого хотите), то в конфигурационный файл в секии «Network» следует добавить диррективу «IPForward=yes».

Что такое и для чего используются TUN/TAP на серверах

TUN и TAP являются виртуальными сетевыми драйверами ядра системы. Основное назначение драйверов TUN/TAP обеспечивает прием и передачу сетевых пакетов для программ и компонетов пользовательского пространства. Его можно рассматривать как простое устройство типа Point-to-Point, которое вместо классического приема пакетов с физического носителя получает их от программы пользовательского пространства и вместо отправки пакетов через физический носитель записывает их в программу пользовательского пространства.

Если иными словами, TUN/TAP будет создает виртуальный сетевой интерфейс на хосте с операционной системой семейства Linux. Созданный интерфейс будет функционирует так же, как и любой другой интерфейс, ему можно назначить IP-адрес, анализировать трафик, направить трафик на него и т. д. Когда трафик отправляется в его интерфейс, трафик будет сразу отправляеться в программу пользовательского пространства, а не в реальную сеть.

В отличие от обычных сетевых устройств в системе (физические устройства маршрутизируют пакеты по кабелям Ethernet), TUN/TAP — это полностью виртуальный интерфейс, который имитирует эти физические соединения в ядре операционной системы (часть операционной системы, которая всегда активна на вашем устройстве). памяти и имеет полный контроль над всем в системе).

Где используются TUN и TAP?

В основном TUN/TAP используется для VPN и прокси для предоставления более быстрой и безопасной передачи данных через сеть.

Преимущество TUN/TAP заключается в том, что приложения пользовательского пространства, такие как VPN-клиенты, могут взаимодействовать с этими устройствами, как если бы они были реальными. Это позволяет операционной системе вводить пакеты в обычный сетевой стек по мере необходимости, в результате чего данные передаются туда и обратно, как если бы использовались физические сетевые устройства.

Несмотря на то, что устройства Tun и Tap очень похожи, они предназначены для достижения разных целей в ядре. Клиенты VPN, которые предоставляют OpenVPN, в основном используют устройства TUN, поэтому этап установки клиента OpenVPN обычно включает установку драйвера TUN/TAP.

Устройства TUN и TAP используются клиентами VPN для установления туннеля. Без драйверов для этих виртуальных устройств данные, зашифрованные VPN-клиентом, не смогут перемещаться от клиента к сетевому стеку. В случае VPN TAP используется для передачи кадров Ethernet и для мостового соединения, а TUN используется для передачи IP-пакетов (маршрутизация). Стоит отметить, что устройства TUN/TAP используются только с некоторыми протоколами VPN (такими как OpenVPN и WireGuard).

TUN -интерфейсы

Устройства TUN (туннельные) работают на уровне 3, что означает, что данные (пакеты), которые вы получите от файлового дескриптора, будут основаны на IP. Данные, записываемые обратно на устройство, также должны быть в форме IP-пакета.

Они обычно используются VPN-клиентами для установления соединения между клиентом и сетевым стеком ОС. Это позволяет VPN шифровать ваши данные перед их пересылкой на VPN-сервер через туннель.

Поскольку TUN работает на третьем уровне сетевого стека, он работает исключительно с пакетами сетевых протоколов (пакеты IPv4 и IPv6). Более того, поскольку устройства TUN находятся на третьем уровне, их можно использовать только для маршрутизации (но не для моста).

TAP -интерфейсы

TAP (сетевой ответвитель) работает так же, как TUN, однако вместо того, чтобы иметь возможность только записывать и получать пакеты уровня 3 в или из файлового дескриптора, он может использовать необработанные пакеты Ethernet. Обычно вы увидите TAP-устройства, используемые виртуализацией KVM/Qemu, где TAP-устройство назначается виртуальному гостевому интерфейсу во время создания.

Преимущество устройств TAP заключается в том, что, несмотря на то, что они виртуальные, они работают и ведут себя так же, как настоящие сетевые адаптеры, и могут передавать любые сетевые протоколы (IPv4, IPv6, Netalk, IPX и т. д.) и кадры Ethernet.

Для работы устройств TAP и TUN в системе должны быть установлены драйверы/адаптеры. На VPS и VDS компании ГиперХост все конфигурации сделаны, и вы можете сразу же приступить к настройке и работе с VPN.

Dmitryz

TUN и TAP — виртуальные сетевые драйверы ядра системы. Они представляют собой программные сетевые устройства, которые отличаются от обычных аппаратных сетевых карт.

TAP эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet.

TUN (сетевой туннель) работает на сетевом уровне модели OSI, оперируя IP пакетами. TAP используется для создания сетевого моста, тогда как TUN для маршрутизации.

Пакет, посылаемый операционной системой через TUN/TAP устройство, обрабатывается программой, которая контролирует это устройство. Сама программа также может отправлять пакеты через TUN/TAP устройство. В таком случае TUN/TAP устройство доставляет (или «внедряет») такой пакет в сетевой стек операционной системы, эмулируя таким образом доставку пакета с внешнего устройства.

apt-get install uml-utilities

с помощью tunctl:

tunctl -t eth0

С помощью ip:

ip tuntap add dev eth0 mode tap Затем:
ifconfig eth0 192.168.8.8 up

Что такое TUN/TAP

В терминологии компьютерных сетей, TUN и TAP — виртуальные сетевые драйверы ядра системы. Они представляют собой программные сетевые устройства, которые отличаются от обычных аппаратных сетевых карт.

TAP эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. TUN (сетевой туннель) работает на сетевом уровне модели OSI, оперируя IP пакетами. TAP используется для создания сетевого моста, тогда как TUN для маршрутизации.

Пакет, посылаемый операционной системой через TUN/TAP устройство обрабатывается программой, которая контролирует это устройство. Получение данных происходит через специальный файловый дескриптор, таким образом программа просто считывает данные с файлового дескриптора. Сама программа также может отправлять пакеты через TUN/TAP устройство выполняя запись в тот же файловый дескриптор. В таком случае TUN/TAP устройство доставляет (или «внедряет») такой пакет в сетевой стек операционной системы, эмулируя тем самым доставку пакета с внешнего устройства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *