Вы можете использовать macvlan для создания нескольких виртуальных интерфейсов с разными MAC-адресами.
ip link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ip link add link eth0 address 00:22:22:22:22:22 eth0.2 type macvlan
Теоретически это должно быть все, что вам нужно, хотя в какой-то момент что-то сломалось в ядре, и это заставило бы его использовать один MAC для всего. Я не уверен, каков статус этого; надеюсь, это исправлено.
Если нет, вы можете использовать arptables для перезаписи MAC-адресов на выходе на основе выходного интерфейса или на входе на основе IP-адреса назначения:
arptables -A OUT -o eth0.1 --arhln 06 -j mangle --mangle-hw-s 00:11:11:11:11:11
arptables -A OUT -o eth0.2 --arhln 06 -j mangle --mangle-hw-s 00:22:22:22:22:22
arptables -A IN -d 192.168.1.1 --arhln 06 -j mangle --mangle-hw-d 00:11:11:11:11:11
arptables -A IN -d 192.168.1.2 --arhln 06 -j mangle --mangle-hw-d 00:22:22:22:22:22
К сожалению arptables также довольно глючит в моем опыте.
Причина, по которой ваш мост и интерфейс TAP используют один и тот же MAC-адрес, заключается в том, что у моста нет MAC, пока он не привязан к интерфейсу. Если вы создадите мост с BRCTL и выполните «brctl show», вы обнаружите, что мост имеет пустые порты (без привязки к нему интерфейса). При связывании TAP0 с br0, естественно, он будет отображаться как тот же MAC. Я создал тестовый мост, чтобы проиллюстрировать.
# brctl addbr testbr0
Я создал три тестовых TAPS. Вывод из "brctl showmacs testbr0".
Как вы можете видеть, каждый порт моста имеет уникальный MAC-адрес, и мост должен показывать свой MAC в качестве первого привязанного интерфейса. Если вы соедините физический сетевой интерфейс, мост Ethernet унаследует свой MAC-адрес и переместит все виртуальные интерфейсы вниз. Пример привязки eth0 к тестовому мосту.
Использование "brctl show" снова;
интерфейсы TAP переместились на один, хотя eth0 все еще находится на PORT 4. У вас все еще есть уникальные MAC-адреса. Если мост Ethernet связан с интерфейсом исходного маршрута, у вас нет выбора в использовании IP-адреса или DHCP. Для чего стоит, если вы соедините интерфейс исходного маршрута, вы увидите «нелокальный» MAC-адрес. Это MAC-адрес маршрутизатора следующего перехода. Я знаю в RedHat, есть возможность указать исходный IP, используя IFCONFIG. Мой первый вариант - обратиться к справочнику по командам IP, так как я думаю, что вы можете указать исходный IP. Я никогда не пробовал это.
источник
Попробуйте создать
tap
устройства или любые другие виртуальные устройства Ethernet с необходимыми MAC-адресами и IP-адресами, а затем подключите их к одному мосту с помощью eth0.источник
Похоже, вы можете использовать vconfig для создания нескольких адресов vlan в одной физической сети Ethernet, каждый из которых имеет разные mac-адреса.
источник