QEMU/KVM 仮想マシンをセットアップしていて、ブリッジ ネットワークを使用したいと考えていました。私が読んだすべてのマニュアル/チュートリアルでは、物理 NIC で DHCP を無効にし、ブリッジで有効にするように書かれています。理解できないのは、ブリッジが物理ブリッジ/スイッチと同じように動作するのなら、実際の物理 NIC には IP アドレスが割り当てられていないのに、ブリッジには IP アドレスが割り当てられている必要があるのはなぜでしょうか。この質問は既に数回行われていますが、まだ答えが見つかっていません。ここ回答では、この方法で VM がブリッジと通信できると述べられています。しかし、なぜそれが必要なのでしょうか? 実際の物理マシンでは、ブリッジは透過的に動作し、トラフィックを転送するだけです。そこで、私の質問は次のとおりです。
- 物理ブリッジには IP アドレスが必要ないのに、仮想ブリッジにはなぜ IP アドレスが必要なのでしょうか?
- 物理 NIC に IP アドレスがない場合、物理 NIC はどのようにして仮想ブリッジの IP アドレスを使用するかを認識するのでしょうか?
- 物理マシンは実際には物理ブリッジと直接通信しないのに、VM はブリッジと通信する必要があるのはなぜですか?
私の言いたいことをよりわかりやすく示すために、いくつかの例を挙げます。
- ネットワーク スイッチを備えた物理ネットワークの動作を想像すると次のようになります。
- 仮想橋がどのように機能するか想像する
- それが実際にどのように機能するかを私は理解している
答え1
- 物理ブリッジには IP アドレスが必要ないのに、仮想ブリッジにはなぜ IP アドレスが必要なのでしょうか?
仮想ブリッジには IP アドレスが必要であるというのは誤解です。必要ありません。
あなたは実際できるIP アドレスのない仮想ブリッジがあります。ただし、その場合、ホスト自体はその物理インターフェイス上の IP 経由ではまったくアクセスできなくなり、VM のみにアクセスできるようになります。
企業の仮想化ホストでは、これは便利です。顧客のVMに接続する必要がある顧客ネットワークがあるかもしれません。そのようなネットワークから仮想化ホスト自体へのアクセスを許可したくないかもしれませんが、のみそれぞれのVMに接続します。そして、仮想化ホストを管理するために使用する、物理的に分離された別の管理ネットワークを用意します。このネットワークは、別のNICを介してホストに接続され、ない任意の仮想ブリッジのメンバーになることができます。
- 物理 NIC に IP アドレスがない場合、物理 NIC はどのようにして仮想ブリッジの IP アドレスを使用するかを認識するのでしょうか?
物理 NIC に特定の IPv4 アクセラレーション機能がない限り、IP アドレスは NIC のペイロード データにすぎません。基本的な物理 NIC は、レイヤー 2、つまり MAC アドレスのみで動作します。IP プロトコルはレイヤー 3 であり、通常はオペレーティング システムのネットワーク ドライバー スタックに任されています。または を使用して「NIC に IP アドレスを構成する」場合ifconfig
、ip addr
実際の物理ハードウェア構成に変更を加える必要はなく、物理 NIC と NIC に関連付けられた OS レベルの IP プロトコル サポートの両方を含む抽象的な構造に変更を加えます。
物理 NIC がブリッジのメンバーとして機能するように構成されている場合、いずれにしてもレイヤー 3 アクセラレーション機能をオフにする必要があります。ブリッジの一部として動作する場合、NIC は宛先 MAC アドレスまたは IP アドレスに関係なく、すべての着信パケットを受信する必要があり、ブリッジ コードによってパケットを転送するかどうか、およびブリッジのどのメンバーに転送するかが決定されます。基本的なブリッジでは、IP アドレスをまったく考慮する必要はありません。ブリッジのレイヤー 3 機能は、基本的なブリッジ機能を超えており、仮想ブリッジではオプションである必要があります。
ブリッジの一部として構成されているときに物理 NIC に IP アドレスが設定されている場合、その NIC (およびそのドライバー) で ARP 機能がアクティブになります。ただし、その物理 NIC からの送信 ARP メッセージは VM に到達できません。ARP でセグメント全体に到達するには (適切なレイヤー 2 機能で必要なように)、NIC ドライバーは ARP メッセージを送信メッセージと受信メッセージの両方として同時に生成する必要がありますが、NIC ドライバーにはそれを行うコードがありません。
VM に仮想ブリッジを設定すると、ブリッジの IP セグメントの一部は物理的にホストの外部にあり、その他の部分はホスト内にある VM 内に含まれることになります。ホストが通常どおり NIC を使用して VM の 1 つと通信しようとすると、パケットはホストからホストが接続されている物理スイッチまたはルーターに不必要に送信され、そこからホストに戻り、ブリッジを経由して宛先 VM に到達する必要があります。
これは確かに非効率的であり、実際にはまったく機能しない可能性があります。仮想ブリッジを持つホストが接続されている物理スイッチには、通常、そのホストから発信されたパケットをホスト自体に送り返す理由がありません。
代わりに、ホストからブリッジされたネットワーク セグメントへの送信パケットは、ブリッジ コードを介して送信する必要があります。ブリッジ コードでは、最初にブリッジのどのインターフェイス (仮想または物理) が宛先に「最も近い」かを調べます。宛先がブリッジにわかっている場合、送信パケットは直接その宛先に送信されます。ホストとその VM 間の通信の場合、これは通信が物理ホスト内で完全に行われ、ホスト外部の物理ネットワーク帯域幅がまったく使用されないことを意味します。
宛先 MAC アドレスがブリッジに認識されていない場合、送信パケットは最初にすべてのブリッジ メンバー インターフェイスに送信されます。応答を受信するとすぐに、ブリッジは最初のパケットの宛先の場所を学習し、効率的な操作方法 (上記) に戻ることができます。
ブリッジを含むホストからARP要求を行う場合、要求はVMの両方にブロードキャストされる必要があります。そして物理NICからリクエストが実際に送信されるようにする全体ネットワーク セグメント: ブリッジ コードはこれを実行できますが、個々の物理 NIC では実行できません。
Linuxブリッジが物理または仮想のみである必要はないと思います。Linuxブリッジが複数の物理インターフェースを持つことができない理由がわかりません。そして任意の数の VM を関連付けることができます。ただし、エンタープライズ環境では、通常、このような「何でもできるホスト」を構築することは望ましくありません。これは、ダウンタイムが許されない、扱いにくく重要なインフラストラクチャの一部になりやすく、言い換えれば、システム管理者にとって頭痛の種になります。
- 物理マシンは実際には物理ブリッジと直接通信しないのに、VM はブリッジと通信する必要があるのはなぜですか?
これも誤解です。VMはないブリッジと通信するには、ブリッジ上の IP アドレスが必要です。
しかし、もしあなたが欲しいホストと VM が同じ IP ネットワーク セグメント内で相互に通信できるようにするには、ブリッジ デバイスに IP アドレスを割り当てる必要があります。
ブリッジデバイスのIPアドレスは、主にホスト、ではなくVM の場合- ただし、必要に応じて、外部デバイスをループせずに、ホストが IP 経由で VM と効率的に通信できるようになります。