1つの物理ネットワークインターフェイス上の複数のMACアドレス(Linux)


20

簡単な質問:1つの物理ネットワークインターフェイス(Linux)に複数のMACアドレスを設定するにはどうすればよいですか?

どうして?私のISPはGWでip <-> macをチェックしていますが、「linuxbox」を介してトラフィックをルーティングし、異なるソースIPで転送するのが好きです。

ip <-> macをチェックせずに、eth0、eth0:0を使用しますが、この状況では、IPごとに一意のMACアドレスが必要です。

回答:


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

理論上は必要なものはすべて必要ですが、ある時点でカーネルで何かが壊れて、すべてに1つのMACを使用することになります。私はその状況が何なのか分かりません。うまくいけば修正されます。

そうでない場合は、arptablesを使用して、出力インターフェイスに基づく出力または宛先IPに基づく入力でMACアドレスを書き換えることができます。

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

残念ながら、私の経験ではarptablesもかなりバグがあります。


1
necropostで申し訳ありませんが、「ある時点でカーネルで何かが壊れて、すべてに1つのMACが使用されるようになる」部分については、バグではない可能性があります。カーネルチューニング可能な「net.ipv4.conf .all.arp_ignore」を1に設定すると、これが正しく機能します。他のARP調整パラメータも必要になる場合があります。詳細については、こちらこちらをお読みください。
MoonSweep

4

ブリッジとTAPインターフェースが同じMACアドレスを共有する理由は、ブリッジがインターフェースにバインドされるまでMACを持たないためです。BRCTLを使用してブリッジを作成し、「brctl show」を実行すると、ブリッジに空のポートがあることがわかります。(インターフェイスがバインドされていない)TAP0をbr0にバインドすると、当然、同じMACとして表示されます。説明のために、テストブリッジを作成しました。

#brctl addbr testbr0

[root @ stoogeなど]#brctl show testbr0
ブリッジ名ブリッジID STP対応インターフェイス
testbr0 8000.000000000000いいえ

3つのテストTAPSを作成しました。「brctl showmacs testbr0」からの出力。

[root @ stoogeなど]#brctl showmacs testbr0
ポートno mac addrはローカルですか?エージングタイマー
  1 86:51:b6:95:0e:b6はい0.00
  2 86:58:63:c6:d4:e7はい0.00
  3 8a:a7:fa:17:c5:12はい0.00

ご覧のとおり、各ブリッジポートには一意のMACアドレスがあり、ブリッジは最初のインターフェイスとしてMACを表示する必要があります。物理ネットワークインターフェイスをブリッジする場合、イーサネットブリッジはそのMACアドレスを継承し、すべての仮想インターフェイスを下に移動します。eth0をテストブリッジにバインドする例。

[root @ stoogeなど]#brctl showmacs testbr0
ポート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 8a:a7:fa:17:c5:12はい0.00

「brctl show」を再度使用します。

[root @ stoogeなど]#brctl show
ブリッジ名ブリッジID STP対応インターフェイス
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

eth0はまだポート4にありますが、TAPインターフェースは1つ下に移動しています。一意のMACアドレスがまだあります。イーサネットブリッジがソースルートインターフェイスにバインドされている場合、IPアドレスまたはDHCPを使用する選択肢はありません。その価値について、ソースルートインターフェイスをブリッジすると、「非ローカル」MACアドレスが表示されます。これはネクストホップルータのMACアドレスです。RedHatでは、IFCONFIGを使用してソースIPを指定するオプションがあることを知っています。私の最初のオプションは、ソースIPを指定できると思うので、IPコマンドリファレンスを参照することです。試したことがない。


3

tap必要なMACアドレスとIPを持つデバイスまたはその他の仮想イーサネットデバイスを作成し、それらをeth0で1つのブリッジに接続してみてください。


私はすでにそれを試しましたが、うまくいきません。br0(eth0、tap0、tap1)を使用する場合。ネットワークを機能させるには、br0にIPを設定する必要があります。IP(ifconfig br0 0.0.0.0 up)なしではネットワークは機能しません。したがって、br0とtap0にIPを設定すると。(win-pcから)両方のIPにpingを実行できますが、arp -aの後はそれぞれが同じMACを持ちます。
grapefruyt

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.