Я пытаюсь узнать, как реализовать виртуальные интерфейсы с помощью драйвера Tap.
На данный момент я понимаю, что с помощью драйвера крана я могу создать виртуальный интерфейс, а затем подключить к нему программу пользовательского пространства для анализа данных, поступающих в это устройство.
А что, если я подключу коммутатор cisco к своему интерфейсу LAN с помощью канала TRUNK, перенаправлю все пакеты, поступающие в интерфейс LAN, на интерфейс виртуального крана, а затем в моей программе, прикрепленной к этому интерфейсу, сделаю некоторое кодирование для анализа тега vlan в пакет и разрешить пересылку только определенных vlan на интерфейс WAN?
Звучит ли это правдоподобно или в моем основном понимании есть изъян?
Обновление: теперь, когда я больше поиграл с ним, у меня есть еще несколько вопросов:
Итак, у меня создан интерфейс tun (tun0), который принимает пакеты. С этими пакетами я выполняю некоторую фильтрацию (разрешение / удаление) на основе «MAC-адреса SRC» в кадре Ethernet. Вопрос, как мне теперь отправить разрешенные пакеты на один из моих интерфейсов WAN (eth0)?
Это, безусловно, возможно, и это действительно возможно сделать с существующими модулями ядра сегодня:
LAN -> (модуль nic) -> (модуль dot1q) -> (модуль моста) -> (модуль dot1q) -> (модуль nic) -> WAN
Или:
eth0 -> eth0.10 -> br0 -> eth1.20 -> eth1
(берет все, что помечено как vlan 10 с eth0, повторно помечает его как vlan 20 и выталкивает из eth1, и наоборот. Дополнительный контроль доступа можно выполнить с помощью ebtables.)
Если вам не нужно менять теги, вы можете упростить до:
eth0 -> br0 -> eth1
И примените ebtables к br0.
Тем не менее, если ваше приложение может выполнять часть "eth0.10 -> br0 -> eth1.20" внутри, хотя для этого не потребуются устройства Tap, так как вы можете читать кадры с одного интерфейса, фильтровать и записывать в другой.