Я пытаюсь написать программу для имитации некоторых виртуальных сетевых интерфейсов. Моя программа работает на Linux PC, обозначаемый , подключенный к маршрутизатору, обозначаемый R и имеет один физический сетевой интерфейс eth0
с адресом IPv4, скажем, 192.168.1.2
. Моя программа может получать несколько разных адресов IPv4 от маршрутизатора через DHCP, скажем, 192.168.1.3
, 192.168.1.4
, ... (Я сделал эту часть, создав виртуальный MAC-адрес). Что мне нужно делать дальше, что, когда другой физический компьютер, обозначенный B, который также подключен к маршрутизатору R, пытается связаться с одним из адресов IPv4, полученных моей программой (а не один назначается физический интерфейс, eth0
, из ), скажем, 192.168.1.3
он должен появиться в в что 192.168.1.3
является «реальным» сетевым интерфейсом. Например, если B пинг 192.168.1.3
, он должен быть в состоянии получить ответ от 192.168.1.3
(даже думал, что пакет на самом деле проходят через «s физического интерфейса сети eht0
). Кроме того, моя программа должна иметь возможность извлекать IP-пакет на виртуальном интерфейсе, где принимается весь пакет.Как реализовать интерфейс виртуальной сети
Другими словами, что моя программа хочет выполнить, это как «Бридж-сеть» на виртуальных машинах, таких как VirutalBox или VMWare Player.
Может кто-нибудь, пожалуйста, скажите, с чего мне следует начать? Должен ли я использовать TAP? Существуют ли какие-либо существующие библиотеки, которые я мог бы использовать? Или я должен просто создать сокет уровня ссылки для своей цели? (Я прочитал «Datalink Access» в Unix Network Programming Ричарда Стивенса, но информация не достаточно подробно.) Спасибо, Том
Hi joe, спасибо вам ответ. Мне нужно обрабатывать пакеты программно, то есть мне нужно создать сокет и связать его с каждым виртуальным интерфейсом. Если я использую subinterface, смогу ли я это сделать? – user2616158
Да. абсолютно. Работа с виртуальным интерфейсом в точности соответствует работе с обычным интерфейсом. С точки зрения ядра они выглядят одинаково. Вы можете получить ifindex subinterface и связать с ним. – joe