Идентичный MAC-адрес на двух разных виртуальных машинах, но у меня есть подключение к Интернету

Я настроил сеть как таковую: настройте сеть только для хоста на VirtualBox. Первый адаптер настроен на NAT, второй – с сетью только для хоста

HOST: Windows
ГОСТЕВАЯ: CentOS VM1, CentOS VM2 (клон VM1)

При выполнении ifconfig -a на обеих виртуальных машинах я заметил, что MAC-адреса точно такие же. Мой вопрос: как я могу выполнить ping от VM1 до VM2, учитывая, что MAC-адреса одинаковы?

VM1: eth0 Link encap:Ethernet HWaddr 08:00:27:AF:A3:28 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feaf:a328/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:27 errors:0 dropped:0 overruns:0 frame:0 TX packets:47 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10671 (10.4 KiB) TX bytes:5682 (5.5 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:C4:A8:B6 inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fec4:a8b6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:859 errors:0 dropped:0 overruns:0 frame:0 TX packets:41 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:114853 (112.1 KiB) TX bytes:4823 (4.7 KiB) ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::a00:27ff:feaf:a328/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::a00:27ff:fec4:a8b6/64 scope link valid_lft forever preferred_lft forever VM2: eth0 Link encap:Ethernet HWaddr 08:00:27:AF:A3:28 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feaf:a328/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:114 errors:0 dropped:0 overruns:0 frame:0 TX packets:151 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:41594 (40.6 KiB) TX bytes:13479 (13.1 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:C4:A8:B6 inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fec4:a8b6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1900 errors:0 dropped:0 overruns:0 frame:0 TX packets:78 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:259710 (253.6 KiB) TX bytes:9736 (9.5 KiB) ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::a00:27ff:feaf:a328/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000 inet6 fe80::a00:27ff:fec4:a8b6/64 scope link tentative dadfailed valid_lft forever preferred_lft forever 

2 Solutions collect form web for “Идентичный MAC-адрес на двух разных виртуальных машинах, но у меня есть подключение к Интернету”

Это одна из тех вещей, которые удивляют людей, потому что они противоречат тому, чему их научили.
2 машины с одним и тем же аппаратным MAC-адресом в одном широковещательном домене могут прекрасно разговаривать друг с другом, если у них разные IP-адреса (а коммутационная передача играет хорошо).

Давайте начнем с тестовой настройки:

 VM1 $ ip addr show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:3c:f9:ad brd ff:ff:ff:ff:ff:ff inet 169.254.0.2/24 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe3c:f9ad/64 scope link valid_lft forever preferred_lft forever 

 VM2 $ ip addr show dev enp0s8 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:3c:f9:ad brd ff:ff:ff:ff:ff:ff inet 169.254.0.3/24 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe3c:f9ad/64 scope link tentative dadfailed valid_lft forever preferred_lft forever 

Поэтому обратите внимание, как обе машины имеют один и тот же MAC-адрес, но разные IP-адреса.

Давайте попробуем выполнить pinging:

 VM1 $ ping -c 3 169.254.0.3 PING 169.254.0.3 (169.254.0.3) 56(84) bytes of data. 64 bytes from 169.254.0.3: icmp_seq=1 ttl=64 time=0.505 ms 64 bytes from 169.254.0.3: icmp_seq=2 ttl=64 time=0.646 ms 64 bytes from 169.254.0.3: icmp_seq=3 ttl=64 time=0.636 ms --- 169.254.0.3 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 0.505/0.595/0.646/0.070 ms 

Таким образом, удаленный хост ответил. Ну, это странно. Давайте посмотрим на таблицу соседей:

 VM1 $ ip neigh 169.254.0.3 dev enp0s8 lladdr 08:00:27:3c:f9:ad REACHABLE 10.0.2.2 dev enp0s3 lladdr 52:54:00:12:35:02 STALE 

Это наш MAC!

Давайте сделаем tcpdump на другом хосте, чтобы увидеть, что он фактически получает трафик:

 VM2 $ tcpdump -nn -e -i enp0s8 'host 169.254.0.2' 16:46:21.407188 08:00:27:3c:f9:ad > 08:00:27:3c:f9:ad, ethertype IPv4 (0x0800), length 98: 169.254.0.2 > 169.254.0.3: ICMP echo request, id 2681, seq 1, length 64 16:46:21.407243 08:00:27:3c:f9:ad > 08:00:27:3c:f9:ad, ethertype IPv4 (0x0800), length 98: 169.254.0.3 > 169.254.0.2: ICMP echo reply, id 2681, seq 1, length 64 16:46:22.406469 08:00:27:3c:f9:ad > 08:00:27:3c:f9:ad, ethertype IPv4 (0x0800), length 98: 169.254.0.2 > 169.254.0.3: ICMP echo request, id 2681, seq 2, length 64 16:46:22.406520 08:00:27:3c:f9:ad > 08:00:27:3c:f9:ad, ethertype IPv4 (0x0800), length 98: 169.254.0.3 > 169.254.0.2: ICMP echo reply, id 2681, seq 2, length 64 16:46:23.407467 08:00:27:3c:f9:ad > 08:00:27:3c:f9:ad, ethertype IPv4 (0x0800), length 98: 169.254.0.2 > 169.254.0.3: ICMP echo request, id 2681, seq 3, length 64 16:46:23.407517 08:00:27:3c:f9:ad > 08:00:27:3c:f9:ad, ethertype IPv4 (0x0800), length 98: 169.254.0.3 > 169.254.0.2: ICMP echo reply, id 2681, seq 3, length 64 

Итак, как вы можете видеть, хотя трафик имеет одинаковый исходный и целевой аппаратный MAC-адрес, все по-прежнему работает отлично.

Причиной этого является то, что поиск MAC-адресов приходит очень поздно в процессе связи. Ящик уже использовал IP-адрес назначения и таблицы маршрутизации, чтобы определить, на каком интерфейсе он будет отправлять трафик. MAC-адрес, который он добавляет в пакет, приходит после этого решения.

Следует также отметить, что это зависит от инфраструктуры уровня 2. Как эти машины связаны, и что между ними. Если у вас есть более интеллектуальный переключатель, это может не сработать. Он может видеть, как этот пакет проходит и отклоняет его.

Теперь, перейдя к традиционной вере, о том, что это не работает. Ну, это правда, с определенной точки зрения 🙂
Проблема возникает, когда другой хост в сети должен разговаривать с любой из этих машин. Когда трафик гаснет, коммутатор собирается маршрутизировать трафик по целевому MAC-адресу, и он отправит его только на один хост.

Существует несколько возможных причин, почему эта тестовая установка работает:

  1. Трафик передается на все порты или на все порты, которые соответствуют MAC.
  2. Коммутатор отбрасывает исходный порт в качестве опции при определении порта назначения.
  3. Коммутатор фактически является коммутатором уровня 3 и маршрутизируется на основе IP-адреса, а не MAC-адреса.

В некоторых случаях эффект дублирования MAC-адреса может быть тонким.

Коммутаторы распределяют трафик на хосты на основе адресов «увиденного MAC». Когда вы включаете компьютер и отправляет свой первый пакет в сети, ваш коммутатор войдет в свою таблицу MAC, чтобы «MAC-адрес X был отправлен из порта Y». И наоборот, в будущем, когда он видит одноадресный пакет, адресованный MAC-адресу X, он знает, чтобы отправить его в порт Y.

Поскольку ваша виртуальная машина находится только на одном физическом порту коммутатора, вам нужно настроить гипервизор (VirtualBox), чтобы отсылать пакеты, направленные на этот виртуальный MAC. В случае дубликата он, вероятно, просто отправляет его на оба виртуальных машины и позволяет сетевому стеку на каждой виртуальной машине сортировать его. (сетевой стек, скорее всего, увидит, что трафик был отправлен на его MAC-адрес, который не принадлежал к одному из его собственных IP-адресов, и тихо отбрасывает пакет.) Таким образом, вы можете себе представить, что это приведет к значительному количеству дополнительной работы для ОС, чтобы разбудить и обработать каждый пакет, тогда как если бы у вас были уникальные MAC-адреса, [виртуальное] оборудование или драйвер могли бы удалить пакет, предназначенный для другого хоста, перед отправкой его в стек.

В коммутируемой сети (в отличие от вашего примера виртуальной машины) дублирующий MAC-адрес приведет к путанице в том, куда отправлять трафик. Каждый пакет с хостом с дублирующимися MAC-адресами обычно приводит к тому, что коммутатор предполагает, что хост «перемещается» с одного порта на коммутатор на другой. Если оба хоста отправляют и получают трафик с одинаковой скоростью, вы ожидаете, что каждый хост потеряет 50% своего обратного трафика.

ARP и IPv4 могут не слишком беспокоиться о повторяющихся MAC-адресах, поэтому сетевая сеть IPv4 может работать должным образом. (хотя надежный стек или хост с дополнительными инструментами безопасности / сети могут рассматривать дублирующий MAC-адрес как красный флаг.) Кроме того, если вы используете DHCP, DHCP-сервер (без достаточного уникального идентификатора клиента) может назначить дублирующий IPv4-адрес, что может быть проблематичным.

С другой стороны, IPv6 основывает автоматически настроенные адреса на MAC-адресе . IPv6 также включает концепцию обнаружения дублированных адресов , что означает, что дублирующий MAC-адрес может вызвать следующие эффекты (согласно RFC 4862, раздел 5.4.5):

 - not send any IP packets from the interface, - silently drop any IP packets received on the interface, and - not forward any IP packets to the interface (when acting as a router or processing a packet with a Routing header). 
  • Предварительная версия
  • Печать MAC-адреса в файл
  • установить MAC-адрес в файле «интерфейсы» без настройки других параметров сети
  • Как отключить MAC-адрес после отключения?
  • Любой способ перечислить беспроводных клиентов в диапазоне
  • Может ли один ping сетевой адаптер MAC
  • Не удалось выполнить сценарий оболочки из правила «network» udev, чтобы изменить MAC-адрес
  • ethtool получить постоянный MAC-адрес возвращает все 0
  • Ошибка MAC OS X lion mac spoofing
  • Подключить текущий MAC-адрес к известному адресу, чтобы обмануть маршрутизатор и устройство регистрации
  • Как найти IP-адрес устройства, подключенного к той же сети, что и ПК на основе идентификатора MAC
  • Interesting Posts

    Сделать fetchmail оставить почту на сервере в течение определенного периода времени?

    Инструмент для автоматического извлечения суб-изображений, находящихся внутри изображения: суб-изображения, разделенные пробелами

    Номер истории Bash не начинается с 1?

    Есть ли способ увидеть документ `man` только для указанной опции команды

    Как указать, какие имена полей отображаются в списках?

    Почему find не принимает '-exec cp {} dir +'?

    Заменить текст быстро в очень большом файле

    DisplayPort и Intel HD вызывают зависание GPU

    Как я могу проверить, запущен ли процесс сценарием оболочки?

    Какая деятельность / программа препятствует отключению моего монитора?

    Новая версия OpenGL с помощью программного обеспечения?

    Как удалить tar-установленный Node.js из CentOS 7?

    Незначительное изменение команды для компиляции программы на C ++ вызывает ошибку

    Запуск git с более высоким распределением памяти

    Как установить источник APT по умолчанию

    Linux и Unix - лучшая ОС в мире.