質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

IPv4

IPv4(Internet Protocol version 4)は、インターネットプロトコルの一つ。インターネットに繋がったコンピューターや機器を識別するためのIPアドレスを32ビット表記で表わします。しかしIPv4は、限界があるため、IPv6が次世代プロトコルとして注目されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

Q&A

解決済

2回答

2569閲覧

VirtualBox、2台のゲストOSをグローバルに公開するには?

teraha

総合スコア59

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

IPv4

IPv4(Internet Protocol version 4)は、インターネットプロトコルの一つ。インターネットに繋がったコンピューターや機器を識別するためのIPアドレスを32ビット表記で表わします。しかしIPv4は、限界があるため、IPv6が次世代プロトコルとして注目されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

0グッド

1クリップ

投稿2021/06/25 11:59

編集2021/06/25 13:20

ホスト: Windows
ゲスト1: CentOS、ドメインはaaa.com
ゲスト2: CentOS、ドメインはbbb.com

現在困っていること:
ゲスト1とゲスト2を同時に起動すると、aaa.combbb.comも同じゲストOSへのアクセスになってしまう。


ドメインサービスのDNS設定で、aaa.comとbbb.comのAレコードを自宅のグローバルIPに設定。
ルーターの設定で「ルーターの80番ポート」から「ホストの80番ポート」にポートフォワーディング。


ゲスト1

VirtualBoxの設定でネットワークを設定
ネットワーク > アダプター1
割り当て: NAT
ポートフォワーディング、ホストポート:80、ゲストポート:80

ホストWindowsのhostsファイルに
127.0.0.1 aaa.com
を追加

ゲスト1
/etc/nginx/conf.d/aaa.com.conf
server_name aaa.com;
を記述

こんな感じで設定を行い、ホストのブラウザでaaa.comへアクセスすると、ゲスト1のnginxのルートディレクトリにあるindex.htmlの内容が表示されました。
ここまでは期待通り。


ゲスト2

ゲスト1と同じ流れで設定。

VirtualBoxのNATで、ホストの80ポート→ゲストの80ポート
Windowsのhosts127.0.0.1 bbb.com
/etc/nginx/conf.d/bbb.com.confserver_name bbb.com;

ブラウザでbbb.comへアクセスすると、ゲスト1のnginxの方へアクセスしてしまい、ゲスト2の公開に失敗。

しかし、ゲスト1をシャットダウンしたところ、
bbb.com へのアクセスでゲスト2のnginxの方にアクセスできることを確認。


Windowsのhostsにより、aaa.combbb.comも同じ127.0.0.1に飛ばしているのですが、
VirtualBoxのNATでゲスト1とゲスト2の両方にパケットが飛んでいくわけではないのでしょうか?

ブラウザでbbb.comにアクセスした場合、
ゲスト1はNginxの.confに server_name bbb.com の記述がなく、
ゲスト2はNginxの.confに server_name bbb.com の記述があるので、
ゲスト2のnginxからだけ、レスポンスが返ってくることを期待していました。

VirtualBoxでゲストOSを2台同時に公開するにはどうすればいいでしょうか?

VirtualBoxの設定なのか、Windowsのhostsの設定なのか、ゲストOSのnginxの設定なのか、どこで制御すべきものなのか見当がつかず。
アドバイスをお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Windowsのhostsにより、aaa.comもbbb.comも同じ127.0.0.1に飛ばしているのですが、
VirtualBoxのNATでゲスト1とゲスト2の両方にパケットが飛んでいくわけではないのでしょうか?

そんなことはしてくれません。
この場合、127.0.0.1にパケットを投げた後は
VirtualBoxのNATの責任(詳細なルールは知りませんが)で先に受け取れるサーバにパケットが投げられているはずです。

TaichiYanagiyaさんの回答にあるように、バーチャルホストを使って一つのサーバ内で完結させるのが楽です。

回答

一般的に同じポートで待ち受けて、名前ベースで複数のサーバにフォワードする場合は、
リバースプロキシを使って振り分ける必要があります。

この場合、

  1. サーバ3を新たに立ててnginxなりApacheでリバースプロキシを構築して、VirtualBoxのNAT(ホスト80→ゲスト80)はサーバ3だけに設定する(ホストに立てても良いです)
  2. サーバ1と2はそれぞれ別のポートでNATするか、ブリッジアダプタもしくはホストオンリーアダプタでサーバ3から通信できるようにしておく
  3. サーバ3のリバースプロキシの設定で、名前ベースでサーバ1,サーバ2にそれぞれリクエストをフォワードするように設定しておく

という感じです。
ただ、NATは色々と考えることが増えるので、まずは

  1. ゲスト1-3をブリッジアダプタでIP的にはルータ直下に配置する
  2. ルータのポートフォワード機能でゲスト3を直接狙う
  3. ゲスト3にゲスト1,2をそれぞれIPでフォワードさせる

というのがシンプルな構成で、設定のサンプルなども探しやすいと思います。

投稿2021/06/25 15:12

tanat

総合スコア18727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teraha

2021/06/25 21:22

なるほど。振り分け用に新たにゲスト3を作ればいいんですね。 その方法でやってみます。 ありがとうございます!
guest

0

ポートフォワーディング、ホストポート:80、ゲストポート:80

ネームベースのバーチャルホストは HTTP リクエストの Host: ヘッダを見て振り分ける仕組みですが、VirtualBox のポートフォワードは HTTP (L7) ではなく TCP (L4) ではないでしょうか?

VirtualBoxでゲストOSを2台同時に公開するにはどうすればいいでしょうか?

ゲスト1 またはゲスト2 のどちらかにしか振り分けられないと思います。
ゲストを 1つにして、Nginx に 2つのバーチャルホストを設定するのではダメでしょうか?

投稿2021/06/25 14:57

TaichiYanagiya

総合スコア12173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teraha

2021/06/25 21:14

NATでは片方にしか振り分けられないんですね。 VPS上に本番環境があり、ゲスト1は本番環境とほぼ同じ設定の開発環境。 本番環境・開発環境を汚染しないように、実験環境としてゲスト2を作りました。 以上の経緯から、ゲスト1とゲスト2は統合できないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問