Linux 仮想ネットワーク カード テクノロジー: Macvlan

Linux 仮想ネットワーク カード テクノロジー: Macvlan

1. Macvlan の紹介

Macvlan が登場する前は、イーサネット カードには複数の IP アドレスしか追加できず、MAC アドレスはグローバルな一意性によってイーサネット カードを識別するため、複数の MAC アドレスを追加することはできませんでした。 ethx:y を作成する方法を使用した場合でも、これらすべての「ネットワーク カード」の MAC アドレスは ethx と同じであることがわかります。本質的には、これらは依然としてネットワーク カードであり、多くのレイヤー 2 操作を実行する能力が制限されます。 Macvlan テクノロジーを使用すると、これが可能になります。

Macvlan を使用すると、ホストのネットワーク インターフェイス上に複数の仮想ネットワーク インターフェイスを設定できます。これらのネットワーク インターフェイスにはそれぞれ独立した MAC アドレスがあり、通信用に IP アドレスを設定することもできます。 Macvlan の下の仮想マシンまたはコンテナ ネットワークは、ホストと同じネットワーク セグメントにあり、同じブロードキャスト ドメインを共有します。 Macvlan は Bridge に似ていますが、Bridge の存在を省略しているため、設定やデバッグがより簡単であり、効率も比較的高いです。さらに、Macvlan 自体も VLAN を非常によくサポートできます。

[[261271]]

同じ VLAN 間のデータ転送は、ルーティングを必要とせずに、レイヤー 2 相互アクセス、つまり MAC アドレスを通じて実現されます。デフォルトでは、異なる VLAN 内のユーザーは直接通信できません。通信を行う場合は、ルーティング用のレイヤー 3 デバイスが必要です。 Macvlan についても同様です。 Macvlan テクノロジーによって仮想化された仮想ネットワーク カードは、論理的には物理ネットワーク カードと同等です。物理ネットワーク カードはスイッチに相当し、対応する仮想ネットワーク カードと MAC アドレスを記録します。物理ネットワーク カードはデータ パケットを受信すると、宛先 MAC アドレスに基づいてパケットがどの仮想ネットワーク カードに属しているかを判断します。つまり、データ パケットが Macvlan サブインターフェイスから送信される (または Macvlan サブインターフェイスに送信される) 限り、物理ネットワーク カードはデータ パケットを受信するだけで、処理は行いません。これにより、ローカル Macvlan ネットワーク カード上の IP が物理ネットワーク カード上の IP と通信できないという問題が発生します。この問題の解決策については次のセクションで説明します。

まず、Macvlan テクノロジーのフローチャートを見てみましょう。

簡単に言えば、Macvlan 仮想ネットワーク カード デバイスは、物理ネットワーク カード デバイスに寄生します。パケットを送信する際には、独自のパケット送信関数を呼び出し、寄生物理デバイスを見つけ、その物理デバイスを介してパケットを送信します。パケットを受信すると、寄生物理デバイスの rx_handler コールバック関数を登録してデータ パケットが処理されます。

2. マックヴラン vs ブリッジ

Macvlan について話すとき、ブリッジについて言及する必要があります。なぜなら、Macvlan は単純なブリッジと見なすことができるからです。しかし、両者の間にはまだ大きな違いがあります。

ブリッジは実際には古いタイプのスイッチであり、それらの間に大きな違いはありません。ブリッジとスイッチの違いは、技術ではなく市場にあります。スイッチはブリッジと同じ方法でネットワークをセグメント化します。スイッチはマルチポートブリッジです。正確には、ポート密度の高いブリッジを LAN スイッチと呼びます。

Bridge には次の機能があります。

  • ブリッジはレイヤー 2 デバイスであり、レイヤー 2 通信の処理にのみ使用されます。
  • ブリッジは MAC アドレス テーブルを使用してフレームの転送方法を決定します。
  • ブリッジは、ホスト間の通信パケットから MAC アドレスを学習します。
  • ハードウェア デバイスまたは純粋なソフトウェア実装 (例: Linux Bridge) にすることができます。

以下は、複数の VM がブリッジを使用して相互に通信する Linux ホスト上の状況です。

Linux ホストでは、コマンド ライン ツール brctl を使用してブリッジ構成を表示できます。このツールは、ソフトウェア パッケージ bridge-utils をインストールすることで入手できます。

  1. $ brctl 表示
  2.  
  3. ブリッジブリッジID STP対応インターフェース
  4. br0 8000.080006ad34d1 eth0なし
  5. ベス0
  6. br1 8000.080021d2a187いいえveth1
  7. ベス2

ブリッジでレイヤー 2 ループが発生する可能性があります。必要に応じて、ループを防ぐために STP を有効にすることができます。

マックヴラン

Macvlan には次の機能があります。

  • ユーザーは同じ物理ネットワーク カード上に複数の MAC アドレスを設定できます。
  • 前述の通り、上記で設定した MAC アドレスを持つネットワーク カードをサブ インターフェイスと呼び、物理ネットワーク カードを親インターフェイスと呼びます。
  • 親インターフェースは、物理インターフェース (eth0)、802.1q サブインターフェース (eth0.10)、またはボンディング インターフェースにすることができます。
  • 親/サブインターフェースにはMACアドレスだけでなくIPアドレスも設定可能です。
  • サブインターフェースは親インターフェースと直接通信できません (サブインターフェースを持つ VM またはコンテナはホストと直接通信できません)。
  • 前述のように、VM またはコンテナがホストと通信する必要がある場合は、ホストが使用するための追加のサブインターフェースを作成する必要があります。
  • サブインターフェースは通常、識別しやすいように mac0@eth0 の形式で名前が付けられます。

Macvlan を設定した後の様子を説明する写真がこちらです:

3. Macvlanの動作モード

Macvlan は次の 4 つのモードをサポートしています。

VEPA (仮想イーサネット ポート アグリゲータ)

VEPA モードでは、トラフィックの宛先が同じ親インターフェイスを共有する他の Macvlan インターフェイスであっても、Macvlan インターフェイスからのすべてのトラフィックは宛先に関係なく親インターフェイスに送信されます。レイヤー 2 ネットワーク シナリオでは、スパニング ツリー プロトコルにより、2 つの Macvlan インターフェイス間の通信がブロックされます。このとき、上位層ルータにルートを追加する必要があります (外部スイッチはヘアピン サポートで設定する必要があります。つまり、送信元アドレスと宛先アドレスの両方がローカル Macvlan インターフェイス アドレスであるトラフィックを対応するインターフェイスに送り返すことができる、802.1Qbg と互換性のあるスイッチが必要です)。このモードでは、親インターフェイスから受信したブロードキャスト パケットは、VEPA モードのすべてのサブインターフェイスにフラッディングされます。

現在、ほとんどのスイッチはヘアピン モードをサポートしていませんが、Linux ホストでヘアピン モード ブリッジを使用すると、VEPA モードの異なる Macvlan インターフェイスが通信できるようになります (前述のように、ブリッジは実際には古いスイッチです)。どのように設定するのですか?これは非常に簡単で、1 つのコマンドで解決できます。

  1. $ brctl ヘアピン br0 eth1オン 

または、iproute2 を使用して設定します。

  1. $ ブリッジリンクはdev eth0ヘアピンをオンに設定 

カーネルを手動でコンパイルしてアップグレードした場合、ユーザー モード プログラムは新しいカーネルのすべての機能をサポートしない可能性があります。つまり、brctl のバージョンが古すぎて、ヘアピン コマンドをサポートできない可能性があります。これを修正するには sysfs を使用できます:

  1. $ echo 1 >/sys/class/net/br0/brif/eth1/hairpin_mode

Linux ホストで Harpin モードを構成すると、送信元アドレスと宛先アドレスの両方がローカル Macvlan インターフェイス アドレスであるトラフィックは、br0 によって対応するインターフェイスに送り返されます (作成したブリッジが br0 であると仮定)。

仮想マシンまたはコンテナ間のアクセス トラフィックを物理スイッチ レベルで最適化する場合は、VEPA モードの方が適しています。

VEPA モードと Passthru モードでは、2 つの Macvlan インターフェイス間の通信はプライマリ インターフェイスを 2 回通過します。1 回目は送信時、2 回目は戻り時です。これにより、物理インターフェースの帯域幅に影響が及び、異なる Macvlan インターフェース間の通信速度も制限されます。複数の Macvlan インターフェースが頻繁に通信する場合、パフォーマンスへの影響はより顕著になります。

このモードは Linux の Bridge に似ています。同じ親インターフェイスを持つ 2 つの Macvlan 仮想ネットワーク カードは直接通信できます。親ネットワーク カードを介して外部ネットワークにトラフィックを送信する必要はありません。ブロードキャスト フレームは、「ブリッジ」に接続されている他のすべてのサブインターフェイスと物理インターフェイスにフラッディングされます。これは、同じ親インターフェイスを共有する Macvlan ネットワーク カードが直接通信できるシナリオに適しています。

ここでのいわゆるブリッジとは、外部からの支援なしにこれらのネットワーク カード間でデータ フローを直接転送できることを意味します。これは、Linux ホストに組み込まれているブリッジに少し似ています。つまり、すべて brctl コマンドで実行されます。しかし、それは Linux ブリッジとはまったく異なります。 MAC アドレスを学習する必要がなく、STP も必要ないため、Linux ブリッジを使用する場合よりもパフォーマンスが大幅に向上します。

ブリッジ モードには欠点があります。親インターフェイスがダウンすると、すべての Macvlan サブインターフェイスもダウンし、サブインターフェイスは相互に通信できなくなります。

プライベート

このモードは VEPA モードの拡張モードに相当し、同じ親インターフェイスを共有する Macvlan 仮想ネットワーク カード間の通信を完全にブロックします。ヘアピンが親インターフェイスから送信されたトラフィックをホストに戻すように設定されている場合でも、対応する通信トラフィックは破棄されます。具体的な実装方法は、ブロードキャスト/マルチキャスト データを破棄することです。つまり、イーサネット アドレス解決 ARP は実行できなくなります。 MAC アドレスを手動で検出しない限り、同じホスト マシン上の複数の Macvlan ネットワーク カード間で通信を行うことはできません。ブロードキャスト トラフィックを分離する理由は、イーサネットがブロードキャストに基づいているためです。ブロードキャストが分離されると、イーサネットはサポートされなくなります。

パススルー

このモードでは、親インターフェイスと対応する MacVLAN インターフェイスが直接バインドされます。このモードでは、各親インターフェイスは 1 つの Macvlan 仮想ネットワーク カード インターフェイスにのみバインドでき、Macvlan 仮想ネットワーク カード インターフェイスは親インターフェイスの MAC アドレスを継承します。

このモードの利点は、仮想マシンとコンテナが MAC アドレスやその他のインターフェース パラメータを変更できることです。

4. Macvlanとブリッジの使用シナリオ

最後に、Macvlan と Bridge のそれぞれの使用シナリオについて説明します。

Macvlan の使用:

  • 仮想マシンまたはコンテナに外部の物理ネットワークへのアクセスを提供するだけで済みます。
  • Macvlan は CPU の使用量を抑えながら、より高いスループットを実現します。
  • Macvlan を使用する場合、ホストは VM またはコンテナと直接通信できません。

Bridge の使用:

  • 同じホスト上の複数の仮想マシンまたはコンテナを接続する必要がある場合。
  • 複数のブリッジが混在する環境向け。
  • 高度なフロー制御、FDB メンテナンスを適用する必要があります。

5. MacVLAN の制限

  • Macvlan は、レイヤー 2 経由で VM またはコンテナーを物理ネットワークに接続するためのほぼ理想的なソリューションですが、いくつかの制限もあります。
  • Linux ホストが接続されているスイッチでは、同じ物理ポートに接続できる MAC アドレスの数が制限される場合があります。ネットワーク管理者にこれらのポリシーを変更してもらうこともできますが、これが実行できない場合もあります (クライアント向けに簡単な PoC デモを実行している場合など)。
  • 多くの NIC では、その物理カードに割り当て可能な MAC アドレスの数にも制限があります。この制限を超えるとシステムのパフォーマンスに影響します。

IEEE 802.11 では、同じクライアント上に複数の MAC アドレスが存在することは許可されません。つまり、Macvlan サブインターフェイスは、ワイヤレス カードでも AP でも通信できません。この制限を打破するには複雑な方法を使うこともできますが、より簡単な方法として Ipvlan を使う方法もあります。ご興味がございましたら、ご自身で関連情報をご確認ください。

6. 結論

この記事では、主に Macvlan の実装原理を紹介し、Macvlan と Linux Bridge モードの違いや使用シナリオを比較し、さらに Macvlan の 4 つのモードの動作原理と関連する注意事項を詳細に分析します。次のセクションでは、実際の演習を通じて Macvlan の 4 つの動作モードをシミュレートします。

7. 参考文献

http://hicu.be/bridge-vs-macvlan

https://blog.csdn.net/ztguang/article/details/51854037

https://lists.linuxfoundation.org/pipermail/bridge/2009-April/006842.html

この記事はWeChatの公開アカウント「Cloud Native Lab」から転載したものです。この記事を転載する場合は、Cloud Native Lab の公開アカウントにお問い合わせください。

<<:  人工知能は止められない。 Advantech WISE-PaaS 3.0がイノベーションを推進

>>:  高いコストパフォーマンスとハイパフォーマンスを思いのままに!ファーウェイのクラウドサーバー「ベストセラー」が再び進化

推薦する

あなたは絶対にこれらの 4 つの WeChat プロモーションとトラフィックの方法を知らないでしょう!

パブリックアカウント広告の実施方法について、お客様からよく質問を受けます。どのような側面を広告に活用...

Seopassword は第 2 の WolfRain SEO でしょうか?

みなさんこんにちは。私はShi Touです。今日、偶然 Baidu でキーワード「SEO」を検索した...

公式アカウントのコンテンツをより強力にするには?

公開アカウントであっても、親アカウントであっても、コンテンツが王様であるというルールは依然として適用...

新しい視点: ウェブサイトのキーワードランキングの変化を必ずしも外部要因に帰するべきではない

友人のウェブサイトのキーワードランキングが変わっているのをよく見かけるので、その理由を探して、検索エ...

デリミタ-特別価格サーバー、無料ダブルメモリ、E5420/16Gメモリ、16.7 USD

delimiter.com の特別価格サーバーは、数年間にわたって運用されています。これらのサーバー...

SEOデータ分析をしっかり行わないと、キーワードで上位にランクインするのは難しい

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますSEO デ...

イーサネットサーバー - $1.67/1.5g メモリ/400g ハードディスク/6T トラフィック/ロサンゼルス/バッファロー

2013 年に設立された ethernetservers は私のブログに何度か登場していますので、ぜ...

9億元が1日で蒸発、36時間麻痺、Weimob SaaSシステムは「人為的な妨害」だった

2月25日、WeMallグループは、同社のSAASビジネスデータが運用保守部門の中核従業員によって「...

Microsoft、Azure仮想マシンにArmのサポートを追加

マイクロソフトは4月4日、Ampere Computingとの提携により、Azure仮想マシンがAR...

ASOプロモーションと運用経験の共有:App Storeで1日あたり1000件以上の新規アクティベーションを無料で獲得

この試みを経て、基本的に以下の結論を導き出すことができます。ランキング操作の有無に関わらず、ASO ...

エッジコンピューティングとクラウドコンピューティングの違い

処理とデータの保存はクラウド エッジ システムで行われます。しかし、ネットワークの制限はエッジとクラ...

ウェブサイトデザイン分析: バナーのフォント構造の調査

私たちが普段目にするウェブサイトのバナーは、その形状によって固定された構成モードが決まります。一般的...

2015年の中国のインターネット発展の見通し

インターネット産業の変革は加速しており、伝統産業を転覆させるペースはさらに加速しており、インターネッ...

Pythonを使用して分散トランザクションTCCを簡単に完了する、乳母レベルのチュートリアル

分散トランザクションとは何ですか?銀行間送金業務は、典型的な分散型トランザクションのシナリオです。 ...