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


20

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

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

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

Відповіді:


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

На жаль аргументації також є досить баггі в моєму досвіді.


1
Вибачте за некрополь, але щодо "в якийсь момент щось зламалося в ядрі, і це призведе до того, що він використовуватиме один MAC для всього", це може бути не помилка: мені довелося встановити налаштування ядра "net.ipv4.conf .all.arp_ignore "до 1, щоб правильно працювати. Можливо, знадобляться й інші перетворювачі ARP; щоб отримати більше пояснень, прочитайте це та це .
MoonSweep

4

Причина, через яку ваш міст і інтерфейс TAP мають однакову MAC-адресу, полягає в тому, що міст не має MAC, поки не пов'язаний з інтерфейсом. Якщо ви створите міст з BRCTL і зробите "brctl show", ви знайдете, що міст має порожні порти. (До нього не пов'язаний інтерфейс). Я створив тестовий міст, для ілюстрації.

# brctl addbr testbr0

[root @ stooge тощо] # brctl показати testbr0
Інтерфейси з підтримкою мосту Bridge ID ID STP
testbr0 8000.000000000000 ні

Я створив три тестові ТАПИ. Вихід з "brctl showmacs testbr0".

[root @ stooge тощо] # brctl showmacs testbr0
port no mac addr не є локальним? таймер старіння
  1 86: 51: b6: 95: 0e: b6 так 0,00
  2 86: 58: 63: c6: d4: e7 так 0,00
  3 8а: a7: fa: 17: c5: 12 так 0,00

Як бачите, кожен порт мосту має унікальну MAC-адресу, і міст повинен показувати свій MAC, як перший пов'язаний інтерфейс. Якщо ви з'єднаєте фізичний мережевий інтерфейс, міст Ethernet успадкує свою MAC-адресу та перемістить всі віртуальні інтерфейси вниз. Приклад зв'язування eth0, з тестовим мостом.

[root @ stooge тощо] # brctl showmacs testbr0
port no mac addr не є локальним? таймер старіння
  4 AA: BB: CC: DD: EE: FF так 0,00
  1 86: 51: b6: 95: 0e: b6 так 0,00
  2 86: 58: 63: c6: d4: e7 так 0,00
  3 8а: a7: fa: 17: c5: 12 так 0,00

Використання "brctl show" знову;

[root @ stooge тощо] # шоу Brctl
Інтерфейси з підтримкою мосту Bridge ID ID 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.


Я вже спробував це, і це не працює. Якщо я використовую br0 (eth0, tap0, tap1). Мені потрібно встановити IP на br0, щоб працювати в мережі. Без IP (ifconfig br0 0.0.0.0 up) мережа не працює. Тому коли я встановлюю IP на br0 та tap0. (від win-pc) Я можу пінг обох IP, але після arp -а кожен з них має однаковий MAC.
grapefruyt

0

Схоже, ви можете використовувати vconfig для створення декількох адрес vlan на одній фізичній мережі, кожна з яких має різні mac адреси.


Трафік з усіх IP-адрес повинен бути без тегів
gelraen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.