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

20

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

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

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

grapefruyt
источник

Ответы:

28

Вы можете использовать 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 также довольно глючит в моем опыте.

едок
источник
1
Извините за некропост, но что касается "в какой-то момент что-то сломалось в ядре, и это заставило бы его использовать один MAC для всего", это может не быть ошибкой: мне пришлось установить настраиваемое ядро ​​"net.ipv4.conf .all.arp_ignore "в 1, чтобы это работало правильно. Также могут понадобиться другие переменные ARP; для большего количества объяснений прочитайте это и это .
MoonSweep
4

Причина, по которой ваш мост и интерфейс TAP используют один и тот же MAC-адрес, заключается в том, что у моста нет MAC, пока он не привязан к интерфейсу. Если вы создадите мост с BRCTL и выполните «brctl show», вы обнаружите, что мост имеет пустые порты (без привязки к нему интерфейса). При связывании TAP0 с br0, естественно, он будет отображаться как тот же MAC. Я создал тестовый мост, чтобы проиллюстрировать.

# brctl addbr testbr0

[root @ stooge etc] # brctl show testbr0
имя моста идентификатор моста с поддержкой STP
testbr0 8000.000000000000 нет

Я создал три тестовых TAPS. Вывод из "brctl showmacs testbr0".

[root @ stooge и т. д.] # brctl showmacs testbr0
порт нет mac addr является локальным? таймер старения
  1 86: 51: b6: 95: 0e: b6 да 0,00
  2 86: 58: 63: с6: д4: д7 да 0,00
  3 8a: a7: fa: 17: c5: 12 да 0,00

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

[root @ stooge и т. д.] # brctl showmacs testbr0
порт нет mac addr является локальным? таймер старения
  4 AA: BB: CC: DD: EE: FF да 0,00
  1 86: 51: b6: 95: 0e: b6 да 0,00
  2 86: 58: 63: с6: д4: д7 да 0,00
  3 8a: a7: fa: 17: c5: 12 да 0,00

Использование "brctl show" снова;

[root @ stooge etc] # brctl show
имя моста идентификатор моста с поддержкой STP
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        TAP01
                                                        tap02 

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

Ларс Бейли
источник
3

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

gelraen
источник
Я уже пробовал, и это не работает. Если я использую br0 (eth0, tap0, tap1). Я должен установить IP на br0, чтобы заставить работать сеть. Без IP (ifconfig br0 0.0.0.0 up) сеть не работает. Поэтому, когда я устанавливаю IP на br0 и tap0. (из win-pc) Я могу пропинговать оба IP-адреса, но после arp -a у каждого из них одинаковый MAC-адрес.
грейпфрут
0

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

Фил Холленбек
источник
Трафик со всех IP-адресов должен быть без
тегов