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

推薦する

MySQL でスロークエリログを有効にする方法

1.1 はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメ...

MySQL テーブル結合クエリでグループ化と重複排除を実装する例

目次ビジネスロジックデータテーブル構造クエリロジックSQL スクリプトスクリプトの説明ビジネスロジッ...

MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します

仕事上の理由により、完全なオンライン化(​​つまり、すべてのデータがオンラインで完了し、インポートや...

Linux で MySQL 8.0 サービスを完全に削除する方法

この記事を読む前に、Linuxコマンド、特にcentos7.3環境でyumを使用してインストールされ...

MySQL で特定の親行のすべての子行を見つけるソリューション

序文注: テストデータベースのバージョンはMySQL 8.0ですテーブルを作成し、ユーザー scot...

mysqlはタイムゾーン関連の問題を解決します

序文: MySQL を使用すると、時間の表示が正しくない、タイムゾーンが GMT+8 ゾーンにない、...

HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...

SQL文のパフォーマンスを分析するための標準的な要約

この記事では、explain を使用して SQL ステートメントを分析する方法を紹介します。実際、イ...

Zabbix による SQL Server の監視プロセスの詳細な説明

Zabbix による SQL Server の監視を見てみましょう。まずfreetdsをダウンロード...

Linux の MySQL 設定の変更が有効にならない問題の解決方法

背景AWS EC2 を使用するプロジェクトサービスがあります。セキュリティとパフォーマンスを考慮して...

モバイルページで縦画面を強制する方法

最近、仕事でモバイルページを作成しました。もともと特別なことではありませんでしたが、非常に奇妙に感じ...

HTML テーブル マークアップ チュートリアル (41): テーブル ヘッダーの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、ヘッダーの幅と高さはコンテンツに応じて自動的に調整されます。ヘッダーの幅と高さを手動...

ボリュームを使用してホストと Docker コンテナ間でファイルを転送する方法

以前、Docker コンテナとローカル マシン間のファイル転送に関する記事を書きました。しかし、この...

MySQLとOracleの違いのまとめ(機能性能の比較、選択、使用時のSQLなど)

1. 同時実行性同時実行性は OLTP データベースの最も重要な機能ですが、同時実行性にはリソース...

複数の画像を切り替えるJavaScript

この記事では、複数の画像を切り替えるJavaScriptの具体的なコードを参考までに紹介します。具体...