Identische MAC-Adresse auf zwei verschiedenen VMs, aber ich habe Internetverbindung

8

Ich habe ein Netzwerk als solches eingerichtet: Richten Sie ein Nur-Host-Netzwerk auf VirtualBox ein. Der erste Adapter ist mit NAT konfiguriert, der zweite mit Nur-Host-Netzwerk

Host: Windows
Gast: CentOS VM1, CentOS VM2 (Klon von VM1)

Bei der Ausführung von ifconfig -a auf beiden VMs habe ich festgestellt, dass die MAC-Adressen genau gleich sind. Meine Frage ist, wie kann ich von VM1 zu VM2 pingen, wenn die MAC-Adressen identisch sind?

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
Benutzer
quelle
Sind Sie sicher, dass Sie VM1 wirklich von VM2 aus anpingen und nicht tatsächlich VM1 anpingen? Sie können zwei Computer mit derselben MAC-Adresse haben, jedoch nur, wenn sie sich auf unterschiedlichen Ethernet-Verbindungen befinden. Dies ist bei zwei VMs, die dieselbe Virtualisierungssoftware auf demselben Host verwenden, nicht der Fall.
Gilles 'SO - hör auf böse zu sein'
Warum ist dies als Duplikat geschlossen? Die Fragen sind nicht die gleichen.
Patrick
Haben Sie die eine VM auf die andere kopiert? In diesem Fall müssen Sie dies über "VirtualBox Manager" -> Einstellungen -> Adapter 1 -> Erweitert -> MAC-Adresse
Anthon
@ Gilles. Sie liegen falsch. Zwei VMs, die dieselbe Virtualisierungssoftware auf demselben Host verwenden, können unterschiedliche Ethernet-Verbindungen haben. Ein Beispiel finden Sie im VMware Workstation Virtual Network Editor.
fpmurphy
1
@khadija, beachte, dass du dadfailedin deiner ip -6 addrAusgabe siehst . Das bedeutet, dass Ihre Adresse die Erkennung doppelter Adressen nicht bestanden hat, sodass IPv6 auf dieser Schnittstelle nicht verwendet werden kann.
mpontillo

Antworten:

15

Dies ist eines der Dinge, die die Menschen überraschen, weil es gegen das verstößt, was ihnen beigebracht wurde.
2 Computer mit derselben Hardware-Mac-Adresse in derselben Broadcast-Domäne können problemlos miteinander kommunizieren, solange sie unterschiedliche IP-Adressen haben (und die Schaltanlage gut funktioniert).

Beginnen wir mit einem Testaufbau:

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

Beachten Sie also, dass beide Computer dieselbe MAC-Adresse, aber unterschiedliche IP-Adressen haben.

Versuchen wir mal zu pingen:

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

Der Remote-Host hat also geantwortet. Das ist komisch. Schauen wir uns den Nachbartisch an:

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

Das ist unser MAC!

Machen wir einen tcpdumpauf dem anderen Host, um zu sehen, dass er tatsächlich den Datenverkehr erhält:

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

Wie Sie sehen, funktioniert alles einwandfrei, obwohl der Datenverkehr dieselbe Quell- und Zielhardware-Mac-Adresse hat.

Der Grund dafür ist, dass die Suche nach MAC-Adressen sehr spät im Kommunikationsprozess erfolgt. Die Box hat bereits die Ziel-IP-Adresse und die Routing-Tabellen verwendet, um zu bestimmen, über welche Schnittstelle der Datenverkehr gesendet werden soll. Die Mac-Adresse, die dem Paket hinzugefügt wird, kommt nach dieser Entscheidung.

Ich sollte auch beachten, dass dies von der Schicht-2-Infrastruktur abhängt. Wie diese Maschinen verbunden sind und was sich zwischen ihnen befindet. Wenn Sie einen intelligenteren Schalter haben, funktioniert dies möglicherweise nicht. Es kann sein, dass dieses Paket durchkommt und es ablehnt.

Nun zum traditionellen Glauben, dass dies nicht funktioniert. Unter bestimmten Gesichtspunkten ist es wahr :-)
Das Problem tritt auf, wenn ein anderer Host im Netzwerk mit einem dieser Computer sprechen muss. Wenn der Datenverkehr ausgeht, leitet der Switch den Datenverkehr anhand der Ziel-Mac-Adresse weiter und sendet ihn nur an einen einzelnen Host.

Es gibt einige mögliche Gründe, warum dieser Testaufbau funktioniert:

  1. Der Datenverkehr wird an alle Ports oder an alle Ports gesendet, mit denen der MAC übereinstimmt.
  2. Der Switch verwirft den Quellport als Option bei der Bestimmung des Zielports.
  3. Der Switch ist eigentlich ein Layer 3-Switch und basiert auf der IP-Adresse und nicht auf der Mac-Adresse.
Patrick
quelle
Interessante Erklärung! Vielen Dank für die Klarstellung.
Benutzer
5

Die Auswirkungen einer doppelten MAC-Adresse können in einigen Fällen subtil sein.

Switches verteilen den Datenverkehr basierend auf "gesehenen MAC" -Adressen an Hosts. Wenn Sie Ihren Computer einschalten und sein erstes Paket im Netzwerk senden, meldet Ihr Switch in seiner MAC-Tabelle an, dass "MAC-Adresse X von Port Y stammt". Umgekehrt weiß es in Zukunft, wenn es ein an die MAC-Adresse X adressiertes Unicast-Paket sieht, dass es es an Port Y senden muss.

Da sich Ihre VM nur an einem einzigen physischen Switch-Port befindet, muss Ihr Hypervisor (VirtualBox) festlegen, wohin die an diesen virtuellen MAC gerichteten Pakete gesendet werden sollen. Im Falle eines Duplikats wird es wahrscheinlich nur an beide VMs gesendet und vom Netzwerkstapel auf jeder VM sortiert. (Der Netzwerkstapel würde wahrscheinlich feststellen, dass Datenverkehr an seine MAC-Adresse gesendet wurde, die nicht zu einer seiner eigenen IP-Adressen gehört, und das Paket stillschweigend verwerfen.) Sie können sich also vorstellen, dass dies eine Menge zusätzlicher Arbeit verursachen würde, z Das Betriebssystem wacht jedes Paket auf und verarbeitet es. Wenn Sie jedoch eindeutige MAC-Adressen haben, kann die [virtuelle] Hardware oder der [virtuelle] Treiber das für den anderen Host bestimmte Paket verwerfen, bevor Sie es an den Stapel senden.

In einem Switched-Netzwerk (im Gegensatz zu Ihrem VM-Beispiel) würde eine doppelte MAC-Adresse dazu führen, dass ein Switch verwirrt darüber ist, wohin Datenverkehr gesendet werden soll. Jedes Paket, das ein Host mit einem doppelten MAC sendet, führt normalerweise dazu, dass der Switch vermutet, dass der Host von einem Port auf dem Switch zu einem anderen "verschoben" wurde. Wenn beide Hosts Datenverkehr mit derselben Rate senden und empfangen würden, würden Sie erwarten, dass jeder Host 50% seines Rückverkehrsverkehrs verliert.

ARP und IPv4 sind möglicherweise nicht zu besorgt über doppelte MAC-Adressen, sodass das IPv4-Netzwerk möglicherweise ordnungsgemäß funktioniert. (Obwohl ein robuster Stack oder ein Host mit zusätzlichen Sicherheits- / Netzwerk-Tools möglicherweise eine doppelte MAC-Adresse als rote Fahne betrachtet.) Wenn Sie DHCP verwenden, kann ein DHCP-Server (ohne eine ausreichend eindeutige Client-ID) eine zuweisen doppelte IPv4-Adresse, was problematisch sein könnte.

Andererseits basiert IPv6 automatisch konfigurierte Adressen auf der MAC-Adresse . IPv6 enthält auch das Konzept der Erkennung doppelter Adressen. Dies bedeutet, dass eine doppelte MAC-Adresse die folgenden Auswirkungen haben kann (gemäß RFC 4862, Abschnitt 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).
mpontillo
quelle
Es gibt Layer 3-Switches, deren Route auf IP und nicht auf MAC basiert.
Patrick
2
@Patrick Die Schicht - 3 - Switches ich auf noch MAC - Adressen verwenden gearbeitet habe auf Schicht 2. Wenn sie „Layer - 3 - Switch“ , sagen sie in der Regel bedeutet , dass die Vermittlungshardware weiß auch , wie man Routenverkehr auf Layer 3 (act als IP - Router ) Der geroutete Verkehr auf Schicht 3 wird anders behandelt als der geschaltete Verkehr auf Schicht 2. (Daher werden eingehende geroutete Pakete möglicherweise nicht durch Paketverlust beeinflusst, aber geschaltete Pakete der Schicht 2 im selben Netzwerk.) Aber über welchen bestimmten Switch sprechen Sie? ?
mpontillo