web-dev-qa-db-ja.com

異なるMACアドレスを持つ仮想インターフェイス

Linuxマシンで別々のMACアドレスを使用して2つの論理ネットワークインターフェイスを(1つの物理インターフェイスで)セットアップする方法を理解しようとしています。

私の最初の試みは、最初は機能しているように見えるmacvlanを使用することでした。

[root@localhost ~]# ip link add link enp0s3 name veth0 type macvlan
[root@localhost ~]# ip link set veth0 up 
[root@localhost ~]# dhclient veth0 
[root@localhost ~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.6  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe3b:d08b  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:3b:d0:8b  txqueuelen 1000  (Ethernet)
        RX packets 356  bytes 58787 (57.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 210  bytes 24203 (23.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2462:42ff:fecb:5090  prefixlen 64  scopeid 0x20<link>
        ether 26:62:42:cb:50:90  txqueuelen 0  (Ethernet)
        RX packets 83  bytes 9099 (8.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 34  bytes 3871 (3.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ただし、別のマシンからローカルネットワークをスキャンすると、両方のインターフェイス(192.168.1.6と192.168.1.11)が同じMACアドレス08:00:27:3b:d0:8bを持っていることが示されます。

これが可能であれば何かアイデアはありますか?この目的で使用できない場合、macvlanはどのように使用されますか?

ありがとう。

編集:

オテウスが提案したように、私は以前と同じ設定で試しました

sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2

これにより、インターフェイスは、明示的に送信されたarp要求にのみ応答するようになります。

私のセットアップでは、これにより、veth0にIPアドレスを割り当てるDHCP要求が失敗しました。 veth0に静的IPアドレスがあるため、ネットワーク内の他のホストからこのアドレスに到達できませんでした(arp/nmap/pingを試しました)。

私の(予備的な)結論は、同じサブネット上に異なるMACアドレスを持つ仮想インターフェイスを持つことは不可能であるということです。ただし、macvlanの正確な目的は何であり、ローカルマシン(仮想インターフェイスを設定した場所)に独自のMACアドレスを持つ仮想インターフェイスが表示されるのに、他のマシンからは表示されないのはなぜですか。

4
chwon

Dhclientがveth0にIPアドレスを割り当てることができたという事実は、個別のMACアドレスが意図したとおりに機能していることを示しています。どのように「ネットワークをスキャン」しましたか?より良いテストは次のようになります。2番目のホストからパケットをスニッフィングします(私は古い学校で、「tcpdump -e icmp」を使用します。次に、上記のホストから、各インターフェイスを介してpingを実行します(ping-これを実行できます) 、およびスニッフィングされたパケットのMACアドレスを確認します。

一方、仮想IPインターフェイスでARPパケットを処理するためのsysctl変数がいくつかあります。関連する投稿 こここのページ を指しており、トピックについて詳しく説明しています。このソリューションは、ネットワークスイッチと、直接接続された複数のMACを持つ1つのポートを処理する方法によって混乱する可能性があります。

1
Otheus