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のデータ型について学ぶ

推薦する

HTMLにスクリプトを追加する2つの方法と注意点

HTML に <script> スクリプトを追加する方法: 1. HTMLにJavaSc...

Windows に異なる (2 つの) バージョンの MySQL データベースをインストールする詳細なチュートリアル

1. 原因: SQL ファイルをインポートする必要があるのですが、インポートできません。この文を実行...

Dockerコンテナ内でホストDocker操作を呼び出して実行する

まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方...

フォームにファイルをアップロードした後にアクションを保存するよう促す理由と解決策

jsonデータはhtml形式で返される必要がありますつまり、 response.setContent...

nginx での書き換えジャンプの実装

1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...

MySQL explain クエリ命令情報の取得原理と例

explain はクエリ実行プラン情報を取得するために使用されます。 1. 文法次のように、sele...

Docker で Ubuntu に Python3 と Pip をインストールする際の問題

文章1) Ubuntuイメージをダウンロードする docker プル Ubuntu 2) 画像を見る...

ボタンのタイプが送信として指定されていません。ボタンをクリックしても、指定された URL にジャンプしません。

現在、プロジェクトの要件により、フォームの送信を制御し、送信前にデータを検証および処理するために j...

Javascript 仮想 DOM の詳細な説明

目次仮想DOMとは何ですか?なぜ仮想DOMが必要なのでしょうか?仮想 DOM はどのようにして実際の...

オンデマンドで Vue コンポーネントを自動的にインポートする方法

目次グローバル登録部分登録ローカル自動登録さまざまなソリューションの比較コンポーネント名について参照...

特定のシンボルで複数の行と列に分割するMySQLの例

一部の障害コード テーブルでは、履歴またはパフォーマンス上の理由から、次の設計パターンが使用されます...

ページングクリックコントロールを実装するネイティブJS

これは、ネイティブJSを使用してページングクリックコントロールを実装する必要がある面接の質問です。参...

入力ファイルの制御と美化について

一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると、[ファイルの選択]ダイアロ...

MySQLクエリの冗長インデックスと未使用のインデックス操作

MySQL 5.7 以降のバージョンでは、冗長インデックス、重複インデックス、およびインデックスを使...

携帯電話向けウェブページ作成のヒント

現在では多くの人がスマートフォンを使用していることを考慮すると、モバイル Web ページの書き方は、...