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

推薦する

5分でWebRTCビデオチャットを構築する

前回の記事では、Ubuntu 上の webrtc ベースの多人数ビデオチャット サービスの詳細なコー...

CentOS 7.4 にソースコードから MySQL 8.0 をインストールするための詳細なチュートリアル

目次1. 環境2. 準備3. MySQL 8.0.11をインストールするMySQL 8 の公式バージ...

Nginx_geo モジュールを使用して CDN スケジュールを設定する方法

NginxのGeoモジュールの紹介geo ディレクティブは、ngx_http_geo_module ...

Vueはドラッグ可能なツリー構造図を実装します

目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...

jsは前のページに戻り、コードを更新します

1. Javascript は前のページ history.go(-1) に戻り、2 つのページを返し...

Vueはel-tableを使用して列と行を動的に結合します

この記事の例では、el-tableを使用して列と行を動的にマージするVueの具体的なコードを参考まで...

JavaScript を使用して userAgent を通じていくつかの一般的なブラウザを判別する方法

序文通常、h5 ページを作成するときは、WeChat、QQ、Weibo などのエコシステム内でトラフ...

mysql: [エラー] 不明なオプション '--skip-grant-tables'

MySQL データベースがエラー 1045 (28000): ユーザー 'ODBC'...

Vueは買い物数量を変更できるショッピングカートを実装します

この記事では、Vueを使用してショッピングカートの数量を変更する方法を紹介します。具体的な内容は次の...

ブラウザ(IEシリーズ)を判別するための条件付きコメント

<!--[if IE 6]> IE6 のみが認識可能 <![endif]-->...

Vue が天気予報機能を実装

この記事では、天気予報機能を実現するためのVueの具体的なコードを参考までに共有します。具体的な内容...

APP (IOS、Android) を呼び出すモバイル H5 の記述例

iOS 1. URLスキームこのソリューションは基本的に、WeChat、QQ 組み込みブラウザ、QQ...

Linux デバイスに空き容量がありません inode の満杯により 500 エラーが発生します

iノードとは何ですか? inode を理解するには、まずファイル ストレージから始める必要があります...

フレックスレイアウトとposition:absolute/fixedの競合の詳細な説明

以前、プロジェクトを開発しているときに、flex レイアウトと position:absolute/...