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

推薦する

Docker Gitlab+Jenkins+Harborは永続的なプラットフォーム運用を構築します

CI/CD の概要CIワークフロー設計Gitコードバージョン管理システムはコマンドラインでのみ管理で...

入力タイプの制限(複数の方法)

1. 入力・貼り付けできるのは中国語のみ<input onkeyup="value=...

Dockerを使用してシンプルなJava開発およびコンパイル環境を構築する方法の詳細な説明

Java 言語には多くのバージョンがあります。一般的に使用されている Java 8 に加えて、一部の...

MySQL 5.6 マスタースレーブエラー報告の実践記録

1. 問題の症状バージョン: MySQL 5.6、従来の binlog ファイルと pos 方式を使...

vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する

目次序文1. カプセル化の重要性2. どのようにカプセル化しますか? 1. アイデア2. 準備2. ...

Mysqlデータテーブルでワームレプリケーションを使用する方法

簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...

JavaScript で charAt() を使用して、最も頻繁に出現する文字とその出現回数をカウントする方法を教えます。

前回は、JavaScript の charAt() メソッドの使い方を紹介しました。今日は、最も多く...

Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...

Windows 7 環境での Docker 高速ビルドと Alibaba Cloud コンテナ高速化構成の詳細な説明

前回の Docker に関する記事では、MAC システムでの構築について説明しました。この記事では、...

mysql+mybatisはストアドプロシージャ+トランザクション+複数同時シリアル番号取得を実装します

データベースストアドプロシージャ`generate_serial_number_by_date` が...

Linux コマンドラインで電卓を使用する 5 つのコマンド

みなさんこんにちは。私は梁旭です。 Linux を使用するときに、計算を行う必要がある場合があり、そ...

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

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

HTMLデザインパターンの日々の勉強ノート

HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...

LayUI+Shiroは動的なメニューを実装し、メニュー拡張の例を記憶します

目次1. Maven 依存関係2. メニュー関連クラス1. メインメニュー2. サブメニュー3. S...

要素テーブルからヘッダーを削除する方法

show-header属性を使用したドキュメントのヒントshow-header <el-テーブ...