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

несколько MAC-адресов на одном физическом сетевом интерфейсе (linux)

Простой вопрос: как настроить несколько MAC-адресов на одном физическом сетевом интерфейсе (Linux)?

Зачем? Мой интернет-провайдер проверяет ip <-> mac на GW, и я хотел бы маршрутизировать трафик через мой "linuxbox", а затем пересылать его с другим исходным ip.

Не проверяя ip <-> mac, я буду использовать eth0, eth0: 0, но в этой ситуации мне нужен уникальный MAC-адрес для каждого IP.

Вы можете использовать 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

[root@stooge etc]# brctl show testbr0
bridge name bridge id       STP enabled interfaces
testbr0     8000.000000000000   no

Я создал три тестовых ОТВОДА. Вывод команды "brctl showmacs testbr0".

[root@stooge etc]# brctl showmacs testbr0
port no mac addr        is local?   ageing timer
  1 86:51:b6:95:0e:b6   yes        0.00
  2 86:58:63:c6:d4:e7   yes        0.00
  3 8a:a7:fa:17:c5:12   yes        0.00

Как видите, каждый порт моста имеет уникальный MAC-адрес, и мост должен отображать свой MAC-адрес в качестве первого привязанного интерфейса. Если вы подключили физический сетевой интерфейс, мост Ethernet унаследует его MAC-адрес и переместит все виртуальные интерфейсы вниз. Пример связывания eth0 с тестовым мостом.

[root@stooge etc]# brctl showmacs testbr0
port no mac addr        is local?   ageing timer
  4 AA:BB:CC:DD:EE:FF   yes        0.00
  1 86:51:b6:95:0e:b6   yes        0.00
  2 86:58:63:c6:d4:e7   yes        0.00
  3 8a:a7:fa:17:c5:12   yes        0.00

Снова используя "brctl show";

[root@stooge etc]# brctl show
bridge name     bridge id               STP enabled     interfaces
testbr0         8000.00aabbccddee       no              eth0
                                                        tap00
                                                        tap01
                                                        tap02 

интерфейсы TAP переместились на один ниже, хотя eth0 все еще находится на PORT 4. У вас все еще есть уникальные MAC-адреса. Если мост Ethernet привязан к интерфейсу исходного маршрута, у вас нет выбора в использовании IP-адреса или DHCP. Как бы то ни было, если вы соедините интерфейс исходного маршрута, вы покажете «нелокальный» MAC-адрес. Это MAC-адрес маршрутизатора следующего перехода. Я знаю, что в RedHat есть возможность указать IP-адрес источника с помощью IFCONFIG. Мой первый вариант - обратиться к справочнику по IP-командам, поскольку я думаю, вы можете указать исходный IP-адрес. Никогда не пробовал.

Попробуй создать tap устройства или любые другие виртуальные устройства Ethernet с необходимыми MAC-адресами и IP-адресами, а затем подключите их к одному мосту с помощью eth0.

Похоже, вы сможете использовать vconfig для создания нескольких адресов vlan в одной физической сети Ethernet, каждый с разными MAC-адресами.