2つのVirtualBox仮想ネットワークをブリッジするLinuxブリッジメソッドの手順

2つのVirtualBox仮想ネットワークをブリッジするLinuxブリッジメソッドの手順

では、スイッチはどのようにして Mac アドレスを登録するのでしょうか?つまり、仮想マシンのネットワーク カードがどの Mac に登録されているかはどこで確認できますか?

「仮想マシン -> 設定 -> ネットワーク」を参照してください。

ここに画像の説明を挿入

ネットワーク カードをアクティブ化するたびに、下の詳細を展開して、ネットワーク カードに登録されている Mac アドレスを確認します。

上記の実験がうまくいかなかった理由は明らかです。 H1 が H2 に ping すると、Linux Bridge 経由で H2 に ARP 要求がブロードキャストされます。H2 が受信した ARP ブロードキャストでは、送信元 MAC は当然 H1 の MAC アドレスです。H2が ARP Reply に応答すると、ターゲット MAC は H1 の MAC アドレスになります。ただし、H1 の MAC アドレスは intnet2 の仮想スイッチに登録されていないため、intnet2 のスイッチはこのフレームを転送しません。だから当然意味がないのです!

さて、次は仁経と杜経を開いて障害をなくします!今度はその方法を示す時です。

必要な手順は次の 3 つだけです。

  • intnet 上の H1 の MAC アドレスを Linux Bridge の intnet2 ネットワーク カード enp0s10 に登録します。
  • intnet2上のH2のMACアドレスをLinux Bridgeのintnetネットワークカードenp0s9に登録します。
  • Linux Bridge ホストが起動したら、ifconfig コマンドを使用して、enp0s9 および enp0s10 ネットワーク カードの MAC アドレスを他のアドレスに変更します。

ここに画像の説明を挿入

やり方をお見せしましょう。

ネットワーク カード構成インターフェイスには MAC アドレスを指定するオプションはなく、MAC をランダムに生成するボタンのみがあるようです。

ここに画像の説明を挿入

何をするか?

コマンドラインを使用してください。

特定のネットワーク カードの MAC アドレスを指定するには、VBoxManage コマンドを次のように使用します。

zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress4 0800279ff0e6
zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress3 080027bb3d67

上記の0800279ff0e6は H1 enp0s9 の MAC アドレスであり、 080027bb3d67 はH2 enp0s9 の MAC アドレスです。ネットワーク構成インターフェイスから、次のことがわかります。

ここに画像の説明を挿入

さて、Linux Bridge マシンを起動して、3 番目の手順を完了します。この手順は、アドレスの競合によって Bridge の転送テーブルが汚染されるのを防ぐために必要です。

  • 0800279ff0e6 は H1 の intnet から学習できます。
  • 0800279ff0e6 は独自の enp0s10 に設定されています。

混乱していますか?したがって、Linux Bridge の 2 つのネットワーク カード enp0s9 と enp0s10 の MAC アドレスを他のものに変更する必要があります。VirtualBox の内部ネットワーク スイッチはこの変更を認識しません (新しいネットワーク カードをアクティブ化するか、新しい MAC を再登録するだけで転送テーブルが変更されます。つまり、小さなボタンをクリックするか、VBoxManage コマンドを実行して MAC アドレスを変更します)。そのため、転送テーブルには影響しません。

では、やってみましょう:

ifconfig enp0s9 ハードウェアイーサ 08:00:27:bb:3d:68
ifconfig enp0s10 ハードウェアイーサ 08:00:27:9f:f0:e7

すべての手順が完了しました。テストしてみましょう。

brctl 追加br br0;
brctl を追加します。
brctl を追加すると、br0 enp0s10 になります。
ifconfig br0 アップ;

もう一度Pingしますか?

ここに画像の説明を挿入

これが解決策ではないでしょうか...

実際、HostOnly モードでのブリッジングは内部ネットワークでのブリッジングと似ており、問題と解決策も同じです。

2 つのネットワークをブリッジできないというこの問題が VirtualBox の意図的なものなのか、それとも実際に実装上の欠陥なのかはわかりませんが、実際の作業でこの要件に遭遇したので、私個人の意見としては、これは欠陥です。これは明らかに VMWare の LAN セグメントよりも劣っています。

それとも、VirtualBox では Mac OS でのみこの問題が発生するのでしょうか? Windowsでも大丈夫ですか?はっきりとは言えません。Windows プラットフォームを離れてからほぼ 2 年が経ちました。

この問題はほぼ1日で解決しました。

最初は、brctl の設定に問題があると思いました。どうしてこんなに明らかな操作が機能しないのでしょうか? 困惑しました。HostOnly を使用して実験したところ、パケット キャプチャによって、H1 の戻りパケットが Mac OS ホストの vboxnet1 ネットワーク カードに直接返され、vboxnet1 がパケットを Linux Bridge に転送していないことがわかりました。最初は VirtualBox のバグではないかと疑いました。システムを再起動しても効果がなかったため、大まかに意味を推測できました。 「登録スイッチ」という用語については、これは私の推測にすぎません。いずれにせよ、かなり近いものであり、明らかにこの問題に従って解決しました。

私は長い間この種の問題に遭遇していませんでしたが、それでもこの種の難しい問題を解くのが好きで、得意です。私は従来の知識に関するチュートリアルを書くのはあまり得意ではありませんが、人々があまり遭遇しないこの種の奇妙な問題に対しては、ここに私独自の魔法の薬があります。

答えを見つけるまで、私は長い間 Google 検索をして、VirtualBox の LAN セグメントに相当するものを探したり、内部ネットワークと LAN セグメントの違いを探したりしました。Mac OS で仮想スイッチを見つけて、仮想イーサネットと実際のイーサネットを自分で作成したいと思ったことさえありました... 本当に見つからなければ、自分で作るしかありません。

幸いなことに、この極めて非現実的な大きなシーンを始める前に、この記事で説明されている問題の解決策を突然思いつきました。ありがたいですね〜

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • VirtualBox がブリッジするネットワーク インターフェイスを指定しない問題の解決方法

この記事は、この時期の「ピーターから奪ってポールに払う」という仕事のスタイルに対する私の不満から生まれました。

まず、ディスク容量が足りません。提供されたコンピュータには12Gの空き容量しかありません。外付けハードドライブを接続できず、当面はバックアップをアップロードできません。オフラインマシンに相当します。 Linux カーネルの 4.19 バージョンをコンパイルする必要がありました... そのため、昼夜を問わず手動で圧縮してリリースし始めましたが、非常に不満でした。最終的には解決しましたが、それはディスク容量の問題に対するエレガントな解決策ではありませんでした。少なくとも、私が自慢していると思われるような方法ではありませんでした。

ディスク容量に関する苦情と比較すると、次の質問は少し興味深いです。

仮想マシンを使用してネットワーク テスト環境を構築する場合、さまざまな奇妙な問題に必ず遭遇します。これらの問題は、さまざまな仮想マシン プラットフォームの欠陥によって発生することがよくあります。 (私の認識が狭いのかもしれませんが、仕事の妨げになる仕組みは欠陥だと思います)

結局のところ、仮想ネットワークは現実のものではありません。ネットワーク技術の40年以上の発展を経て、ソフトウェアが包括的なテストに合格することはほぼ不可能であり、設計が不完全であることは正常です。

たとえば、VirtualBox を使用して、次の要件を満たすテスト環境を構築します。

2 つのネットワーク間のブリッジとして機能する Linux ホストが必要です。 (途中でいくつかのルールを設定する必要があり、ルーティングを通過したくない)

ここに画像の説明を挿入

シンプルですよね?試してみましたか?

そのアイデアは非常に直接的でシンプルです。 VMWare の Lan セグメントと同様に、VirtualBox には内部ネットワークと呼ばれる仮想ネットワークがあり、簡単に内部プライベート ネットワークを作成することができます。

ホスト B はブリッジとして機能し、ネットワーク カードの構成は次のようになります。

ここに画像の説明を挿入

2 つのネットワーク内の 2 つのホストを接続するブリッジとして、Linux システムは次のように構成されます。

brctl 追加br br0;
brctl を追加します。
brctl を追加すると、br0 enp0s10 になります。
ifconfig br0 アップ;

ホスト H1 の enp0s9 を内部モードに設定し、intnet に接続します。

ここに画像の説明を挿入

H1 の Linux システム構成は次のとおりです。

ifconfig enp0s9 40.40.40.201/24

ホスト H2 の enp0s9 を Internel モードに設定し、intnet2 に接続します。

ここに画像の説明を挿入

H2 の Linux システム構成は次のとおりです。

ifconfig enp0s9 40.40.40.100/24

H1 と H2 は互いのアドレスを ping できると思いますか?

試してみると、うまくいかないことがわかります。

2019 年 11 月 8 日現在、6.0.14 が最新です。

ここに画像の説明を挿入

はい、いいえ!

まず理由を説明し、次にその方法を説明します。

それで、なぜ?

内部に仮想学習スイッチ (以前はブロードキャスト ハブでした)を持つ VMWare の LAN セグメントとは異なり、 VirtualBox の内部ネットワーク内のスイッチは学習スイッチではなく、登録済みスイッチです。

いわゆる登録済みスイッチとは、Mac アドレスが登録されている場合にのみトラフィックを転送することを意味します。このタイプのスイッチには、次の 2 つの転送戦略しかありません。

ブロードキャスト フレームの場合、すべてのポートがコピーを送信します。ユニキャスト フレームの場合、宛先 MAC アドレスが登録されているポートにのみ送信されます。

明らかに、内部にテーブルがあると推測されます。

ポート登録Macアドレス
1 位マック1
2位マック2

<<:  OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する

>>:  1つの記事でTypeScriptのデータ型について学ぶ

推薦する

SSHのssh-keygenコマンドの基本的な使い方の詳細な説明

SSH 公開鍵認証は、SSH 認証方式の 1 つです。 SSH パスワードフリーのログインは公開鍵認...

div が contentEditable=true に設定されている場合、コンテンツをリセットした後にカーソルを配置することはできません。

最近、絵文字にコメントする機能が必要なコメント機能に取り組んでいたため、 contentEditab...

この記事ではCSSボーダーの使い方を説明します

境界線のスタイルborder-style プロパティは、表示する境界線の種類を指定します。 bord...

アップロード画像コントロールを実現するネイティブ js

この記事の例では、アップロード画像コントロールを実装するためのjsの具体的なコードを参考までに共有し...

CSS3を使用してプログレスバー効果を実現し、動的にパーセンテージを追加する

プロジェクト中、プログレスバーを実装するために js の requestAnimationFrame...

HTMLページの読み込みと解析プロセスの詳細な紹介

ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...

Zabbix カスタム監視 nginx ステータス実装プロセス

目次Zabbix カスタム監視 nginx ステータス1. ステータスインターフェースを開く2. 監...

MySQLトランザクション処理の使用方法とサンプルコードの詳細な説明

MySQL トランザクション サポートは、MySQL サーバー自体にバインドされているのではなく、ス...

MySQL InnoDB インデックス拡張の詳細な説明

インデックス拡張: InnoDB は、プライマリ キー列をそのインデックスに追加することで、各セカン...

HTMLファイルとは何ですか?HTMLファイルを開く方法

HTML は Hypertext Markup Language の略です。現在、ほとんどの Web...

1 つの記事で Nginx ロケーション マッチングの実装を理解する

チームはフロントエンドとバックエンドを分離しているため、フロントエンドが Nginx とノード層を引...

ウェブデザインにおける装飾要素の応用の概要

<br />序文: このチュートリアルを読む前に、序文を注意深く読んでください。そうしな...

nginx のフロントエンドとバックエンドに同じドメイン名を設定する方法

この記事では、主にnginxのフロントエンドとバックエンドに同じドメイン名を設定する方法を紹介し、皆...

Kubernetes コントローラーとラベルの簡単な分析

目次01 k8sの一般的なコントローラーRCコントローラーデプロイメント コントローラーステートフル...

vue_drf は SMS 認証コードを実装します

目次1. 需要1. 需要2. SDKパラメータ設定1. ディレクトリ構造3. コードの実装1. バッ...