Назад | Перейти на главную страницу

Создание и соединение виртуальных сетевых интерфейсов в Linux

У меня есть инструмент, который воспроизводит трафик из файла .pcap, и другой инструмент, который интерпретирует этот трафик. В целях тестирования мне нужно воспроизвести трафик с одного интерфейса и передать его на другой. Очевидно, я мог бы просто подключить перекрестный кабель между двумя моими сетевыми адаптерами, но, конечно, есть лучший способ сделать это из Linux? Я пробовал использовать интерфейс loopback (проигрывать трафик из lo, интерпретировать трафик из lo), но это не сработало.

Есть ли способ создать виртуальные интерфейсы, а затем соединить два виртуальных интерфейса? В идеале я мог бы проигрывать трафик на «virt-eth1», а другой мой инструмент слушал бы «virt-eth2». Когда трафик отправляется на virt-eth1, он должен передаваться по мосту и поступать на virt-eth2. То, что происходит оттуда, не имеет значения.

Я думаю, что вам нужно использовать здесь интерфейсы TUN / TAP. Установите tunctl (пакет для CentOS), после чего можете приступить к созданию виртуальных сетевых интерфейсов:

tunctl -t tap0
ifconfig tap0 up

Больше информации здесь: http://backreference.org/2010/03/26/tuntap-interface-tutorial/

Интерфейсы Tun / Tap - это функция, предлагаемая Linux (и, возможно, другими UNIX-подобными операционными системами), которая может создавать сети в пользовательском пространстве, то есть позволять программам пользовательского пространства видеть необработанный сетевой трафик (на уровне Ethernet или IP) и делать все, что они нравится с этим. В этом документе делается попытка объяснить, как интерфейсы tun / tap работают в Linux, с некоторыми примерами кода, демонстрирующими их использование.

Насколько я помню, при использовании интерфейса обратной петли он не работает должным образом с библиотеками PCAP, потому что на самом деле это не «настоящий» интерфейс (или, конечно, система не воспринимает его как реальный). У него даже нет MAC-адреса, если вы запустите на нем ifconfig. Но интерфейсы TUN / TAP работают, и для того, что вы пытаетесь сделать, это может быть просто решение, которое вы ищете (создание дополнительных виртуальных машин и т. Д. Не требуется).

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