VirtualBox仮想マシンがNATモードで外部ネットワークに接続できない問題の解決策

VirtualBox仮想マシンがNATモードで外部ネットワークに接続できない問題の解決策

背景

VirtualBox 仮想マシン (Ubuntu 16.04 システムがロードされている) には 2 つのネットワーク カードが設定されており、ネットワーク モードは「ネットワーク アドレス変換 (NAT)」と「ホストオンリー アダプター」です。このうち、enp0s3 ネットワーク カード (NAT) は外部ネットワーク アクセスに使用され、enp0s8 ネットワーク カード (ホストオンリー) は仮想マシンへのホスト アクセスに使用されます。ただし、仮想マシンを起動した後は、外部ネットワークにアクセスできなくなります。

位置

ネットワーク構成ファイルは次のとおりです。

# vi /etc/ネットワーク/インターフェース

...
# プライマリネットワークインターフェース
自動enp0s3
iface enp0s3 inet dhcp

自動 enp0s8
iface enp0s8 inet 静的
アドレス 192.168.137.16
ネットマスク 255.255.255.0
ゲートウェイ 192.168.137.1

eth0 は DHCP を使用し、eth1 は静的を使用します。 eth0 の実際のネットワークは次のとおりです。

# 設定ファイル 
enp0s3: flags=4163<UP、ブロードキャスト、実行中、マルチキャスト> mtu 1500
    inet 10.0.2.15 ネットマスク 255.255.255.0 ブロードキャスト 10.0.2.255
    inet6 fe80::a00:27ff:fe55:2858 プレフィックス長 64 スコープID 0x20<リンク>
    ether 08:00:27:55:28:58 txqueuelen 1000 (イーサネット)
    RXパケット 6バイト 1476 (1.4 KB)
    RXエラー 0 ドロップ 0 オーバーラン 0 フレーム 0
    TXパケット 33 バイト 3108 (3.1 KB)
    TXエラー 0 ドロップ 0 オーバーラン 0 キャリア 0 衝突 0

ルートを開いた後、問題が見つかりました。

# ルート -n
カーネル IP ルーティング テーブル
宛先ゲートウェイ Genmask フラグ メトリック参照 Iface の使用
0.0.0.0 192.168.137.1 0.0.0.0 UG 0 0 0 enp0s8
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8

enp0s8 ネットワーク カードがデフォルト ルートになるため、他のルートと一致しないネットワーク セグメントは enp0s8 ネットワーク カードを経由することになります。ただし、実際に外部ネットワークに接続するために構成する仮想ネットワーク カードは enp0s3 であるため、当然外部ネットワークに接続できない環境となります。現在のデフォルト ルートを手動で削除してみることもできます。

# ルート削除デフォルト
# ルートにデフォルトの gw 1​​0.0.2.2 dev enp0s3 を追加します
# ルート -n

カーネル IP ルーティング テーブル
宛先ゲートウェイ Genmask フラグ メトリック参照 Iface の使用
デフォルトゲートウェイ 0.0.0.0 UG 0 0 0 enp0s3
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8

ルーティングが正常に設定され、OS は外部ネットワークにアクセスできます。ただし、これは今回のルーティング設定のみを変更するものであり、OS を再起動すると無効になるため、設定を永続化する必要があります。

永続的なルーティング構成

ネットワーク設定ファイル /etc/network/interfaces でルートの永続性を設定します。ネットワーク カードが起動したら、対応するルートの追加と削除のコードを追加します。これは、文の先頭に up が追加されることを除いて、route コマンドに似ています。

# vi /etc/ネットワーク/インターフェース
...
自動enp0s3
iface enp0s3 inet dhcp
アップルートにデフォルトの gw 1​​0.0.2.2 dev enp0s3 を追加

自動 enp0s8
iface enp0s8 inet 静的
アドレス 192.168.137.16
ネットマスク 255.255.255.0
ゲートウェイ 192.168.137.1
アップルート del デフォルト dev enp0s8

注: ステートメント up route add default gw [gateway-addr] dev [dev-name] では、[dev-name] は外部ネットワーク カードの名前 (上記の enp0s3) を示し、[gateway-addr] は外部ネットワーク カードで使用されるゲートウェイ IP アドレスを示します。
では、この外部ネットワーク カードのゲートウェイ アドレスを取得するにはどうすればよいでしょうか? VirtualBox では次のことが規定されています。

NAT モードでは、ゲスト ネットワーク インターフェイスはデフォルトで IPv4 範囲 10.0.x.0/24 に割り当てられます。ここで、x は NAT インターフェイスのインスタンス +2 に対応します。したがって、アクティブな NAT インスタンスが 1 つだけの場合、x は 2 になります。その場合、ゲストにはアドレス 10.0.2.15 が割り当てられ、ゲートウェイは 10.0.2.2 に設定され、ネーム サーバーは 10.0.2.3 にあります。

簡単に言うと、0 番目のネットワーク カードが NAT ネットワーク カードの場合、そのネットワーク セグメントの 3 番目の数字は 0+2=2 で、10.0.2.0 となり、ゲートウェイは 10.0.2.2、ネーム サーバーは 10.0.2.3 となります。

参考: リンクアドレス

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

以下もご興味があるかもしれません:
  • CentOS7 の VirtualBox でのネットワーク設定チュートリアル (外部ネットワークに接続可能)
  • VirtualBox 仮想マシン ネットワーク環境の分析と構築の詳細な説明 - NAT、ブリッジ、ホストオンリー、内部、ポート マッピング
  • VirtualBox は、ホストと仮想マシンのネットワーク相互接続を実現するために仮想ネットワーク カード (ブリッジ) を構成します (グラフィック チュートリアル)
  • VirtualBoxを使用して仮想マシンをネットワークに接続する方法に関するチュートリアル
  • VirtualBoxでのcentos6.5ネットワーク設定の詳細な説明
  • VirtualBoxでゲストとホスト間のネットワーク接続を構成する方法の詳細な説明
  • VirtualBoxは、ホストと仮想マシンのネットワーク相互接続を実現するために仮想ネットワークカード(ブリッジ)を構成します。
  • VirtualBox + CentOS 仮想マシンのネットワークカード構成の詳細な説明
  • VirtualBox仮想マシンネットワーク設定の原理の分析
  • VirtualBox がブリッジするネットワーク インターフェイスを指定しない問題の解決方法
  • VirtualBox 2.2.0はホストネットワークを使用してインターネットアクセスを構成します

<<:  MySQL の冗長インデックスと重複インデックスの詳細な説明

>>:  Vueはユーザーログイン切り替えを実装します

推薦する

CSS テキスト装飾 text-decoration と text-emphasis の詳細な説明

CSS では、テキストは私たちが毎日扱う最も一般的なものの 1 つです。テキストの場合、テキストの装...

MySQL関数の簡単な紹介

目次1. 数学関数2. 文字列関数3. 日付関数4. 暗号化機能主な MySQL 関数は次のように紹...

Uniappの小規模プログラム開発経験

1. 新しいUIプロジェクトを作成するまず、私たちの UI は ColorUI に基づいています。C...

JavaScript ベースの Web 計算機の実装

この記事では、ウェブ計算機のマインスイーパゲームを実装するためのJavaScriptの具体的なコード...

JavaScript 高度なカスタム例外

目次1. コンセプト1.1 エラーと例外とは何ですか? 1.2 異常の分類2. 例外処理2.1try...

ドメイン名、ポート、IPに基づいてnginx仮想ホストを構築する

nginxでサポートされている仮想ホストには3つの種類があります1. ドメイン名ベースの仮想ホスティ...

Dockerは元のタグのイメージの再タグ付けと削除を実装します

docker イメージ ID は一意であり、イメージを物理的に識別できます。repository: ...

Linux C ログ出力コード テンプレート サンプル コード

序文この記事は主に Linux C でのログ出力コード テンプレートに関する関連コンテンツを紹介し、...

Mybatis マッパー動的プロキシの原理の分析

序文動的プロキシの原理を説明する前に、まず、mybatis を統合した後の dao 層の 2 つの実...

MySQL でインデックスとして B+Tree を使用する利点は何ですか?

目次データベースにインデックスが必要なのはなぜですか?インデックスが B+Tree データ構造を使用...

MySQL 8.0 ウィンドウ関数の紹介と概要

序文MySQL 8.0 より前は、Oracle、SQL SERVER、PostgreSQL などの他...

Vue ページレンダリングにおけるキーの適用例チュートリアル

導入フロントエンドプロジェクトの開発プロセスでは、el-table によって表示される結果列がコンポ...

MySQLの連結関数CONCATの使い方の詳しい説明

前回の記事では、MySQL の置換関数 (Replace) とセグメンテーション関数 (SubStr...

史上最も便利な Zookeeper サーバーの構築方法 (推奨)

ZooKeeperとはZooKeeper は、分散アプリケーションに効率的で可用性の高い分散調整サ...