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はユーザーログイン切り替えを実装します

ブログ    

推薦する

HTML テーブル マークアップ チュートリアル (40): ヘッダーの暗い境界線の色属性 BORDERCOLORDARK

テーブルヘッダーでは、暗い境界線の色を個別に定義できます。基本的な構文<TH 境界線の色を暗く...

MySQL 8.0.20 Window10無料インストール版設定とNavicat管理チュートリアルグラフィック詳細説明

1. MySQL 8.0.20をダウンロードして解凍するダウンロードリンク: https://dev...

Dockerの急速な拡張の高度な方法

1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...

SQLデータベースの14の事例の紹介

データシート /* Navicat SQLite データ転送 ソースサーバー: school ソース...

Linux での UDP について学ぶ

目次1. UDPとLinuxの基礎の紹介2. 各機能の使い方1. ソケット機能の使用2. バインド機...

JavaScript を使用してハイパーリンクのリダイレクトを防ぐ方法 (複数の書き方)

JavaScript を使用すると、ハイパーリンクがジャンプするのを防ぐことができます。方法は次の...

Dockerカスタムブリッジdocker0とdockerのコマンド操作の開始、終了、再起動

質問会社がサーバーを移行した後、デフォルトで作成された docker0 ブリッジが会社の外部ネットワ...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

Alibaba Cloud イメージリポジトリの Docker 構成変更の実装

docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...

mySQLキーワードの実行優先度の説明

以下のように表示されます。表から条件フィールドでグループ化仮想テーブルとフィールドを作成し、フィール...

Navicat で MySQL データベースのパスワードを変更する複数の方法

方法1: SET PASSWORDコマンドを使用するまずMySQLにログインします。フォーマット: ...

ウェブページ制作TDは隠し表示もオーバーフロー可能

おそらく、この記事にこのようなタイトルを付けると、誰かがこう尋ねるでしょう。「なぜまだテーブルに注目...

Docker Compose を使用して Confluence を構築するチュートリアル

この記事は「Attribution 4.0 International (CC BY 4.0)」ライ...

CSS3 を使用したテキスト折り紙効果のサンプルコード

序文この記事では主に、CSS3 を使用してテキスト折り紙効果を実現する例を紹介します。これは、参考と...

MySQLチュートリアルDMLデータ操作言語の例の詳細な説明

目次1. データ操作言語 (DML) 2. データを追加する(挿入) 3. 既存のテーブルをコピーし...