回答:
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もかなりバグがあります。
ブリッジと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コマンドリファレンスを参照することです。試したことがない。
tap
必要なMACアドレスとIPを持つデバイスまたはその他の仮想イーサネットデバイスを作成し、それらをeth0で1つのブリッジに接続してみてください。