2つの異なる仮想マシンに同じMACアドレスがありますが、インターネットに接続されています。

2つの異なる仮想マシンに同じMACアドレスがありますが、インターネットに接続されています。

私は次のようにネットワークを設定しました。 VirtualBoxでのホスト専用ネットワーク設定。最初のアダプターは NAT で構成され、2 番目のアダプターはホスト専用のネットワーキングで構成されます。

ホスト:Windows
ゲスト:CentOS VM1、CentOS VM2(VM1のレプリカ)

両方の仮想マシンでifconfig -aを実行すると、MACアドレスが同じであることが確認されました。私の質問は、MACアドレスが同じ場合、VM1からVM2にどのようにpingできるかということです。

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

答え1

それは人々が学んだこととずれているので、人々を驚かせることの一つです。
同じブロードキャストドメインで同じハードウェアMACアドレスを持つ2台のシステムは、異なる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は異なります。

pingを試してみましょう:

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スイッチであり、MacアドレスではなくIPアドレスに基づいてルーティングされます。

答え2

場合によっては、重複したMACアドレスの影響が微妙な場合があります。

スイッチは、「表示されたMAC」アドレスに基づいてホストにトラフィックを分散します。コンピュータの電源を入れてネットワークの最初のパケットを送信すると、スイッチはMACテーブルに「ポートYのMACアドレスX」を記録します。代わりに、後でMACアドレスXでアドレス指定されたユニキャストパケットを検出すると、それをポートYに送信することがわかります。

仮想マシンは単一の物理スイッチポートにのみあるため、その仮想MACにパケットを送信する場所を決定することはハイパーバイザー(VirtualBox)によって異なります。重複している場合は、両方のVMに転送し、各VMのネットワークスタックにそれらを並べ替えることができます。 (ネットワークスタックは、自分のIPアドレスの1つではなくMACアドレスに送信されたトラフィックを表示し、自動的にパケットを破棄することができます。)したがって、OSが起動するなど、かなりの追加作業が発生すると想像できます。パケットあたりの処理が可能で、独自のMACアドレスがある場合、[仮想]ハードウェアまたはドライバは、他のホスト用のパケットをスタックに送信する前に破棄できます。

VM の例とは異なり、スイッチ ネットワークでは、MAC アドレスが重複している場合、スイッチがトラフィックを送信する場所を混同する可能性があります。冗長MACを持つホストから送信された各パケットは、通常、スイッチからホストがスイッチのあるポートから別のポートに「移動」したと推測します。両方のホストが同じ速度でトラフィックを送受信する場合、各ホストは戻りトラフィックの50%を失うと予想できます。

ARPとIPv4は重複したMACアドレスにあまり気にしないため、IPv4ネットワークはうまく機能します。 (強力なスタックまたは追加のセキュリティ/ネットワーキングツールを持つホストは重複したMACアドレスを危険信号と見なすことができます)。できます。これは問題を引き起こす可能性があります。

一方、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).

関連情報