web-dev-qa-db-ja.com

ホストからRailsサーバー上のVMにアクセスできません

仮想マシンにRailsサーバーがあり、ホストからローカルホストにアクセスする必要があります。両方を試しましたNAT(ポート転送-ポート80と3000ゲスト側)とブリッジアダプタですが、何も機能していないようです。

どちらの場合も、ポート80にアクセスできましたが、ポート3000でローカルホストに接続しようとして失敗しました(したがって、xamppサーバーへのアクセスに問題はありませんでした)。

サーバーがゲスト側にあるときにホストからローカルホストにアクセスする方法があれば教えてください。

ゲストにLinux(Debian)があり、ホスト側にWindows7があります-VirtualBoxを使用しています。

12
Hubert Siwkin

ここでは少なくとも3つの個別のコンポーネントが使用されており、それぞれを正しく構成する必要があります。

Railsバインディングアドレス

Rails(または別のサーバーアプリケーション)が開いてネットワーク接続を受信すると、IPとポートの両方にバインドされます。着信要求がこれらの両方に一致しない場合、受け入れられません。接続。Rails server --helpから:

Usage: Rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

したがって、デフォルトでは、Railsは、そのlocalhost(ループバック)ネットワークアダプター(loと呼ばれます)に送信された要求のみを受け入れます。このアダプターは内部からのみアクセスできるためです。同じコンピューターの場合、受け入れる要求はDebian VM自体からのみです。テストには適切で安全ですが、本番環境や別のコンピューターからのテストには役立ちません。

Railsを他のコンピューター(Windows 7ホストを含​​む)からアクセスできるようにする場合は、Railsに、どのIPアドレスにバインドするかを指示する必要があります。 Debianには、外部からアクセスできるものがあります(以下を参照)。

ただし、より簡単な方法は、Railsに特別なIPアドレス0.0.0.0にバインドするように指示することです。これは、任意のネットワークアダプター。したがって、Railsサーバーを次のように起動します:

Rails server -p 80 -b 0.0.0.0

ネットワーク上であなたのVMを見ることができる人なら誰でも、あなたのWebサイトにアクセスできるようになります。

これは、他の2つのコンポーネントが機能していても、まだ混乱している可能性があります。

VMIPアドレス

独自の個別のコンピューターであるDebian仮想マシンにブラウザーを向ける必要があります。

localhostの経験則では、常に同じコンピューターを参照します。ただし、ネットワーキングの目的で、Debian VMは独自の別個のコンピューターです。Windows7ホストでWebブラウザーを使用している場合、localhostは常にWindowsを参照します。 7と他には何もありません。

ここには2つのオプションがあります。

  • VirtualBox VMアダプターをブリッジモードに設定します(質問で述べたように)。これにより、DebianがWindows7ホストと同じ外部/ホーム/職場ネットワークに直接配置されます。 ifconfigを実行してDebianVMのIPを決定します。eth0またはeth<something>アダプターのIPを探します。これをブラウザーのアドレスバーに接続します。

  • NATアダプタと VirtualBoxポート転送 を使用します。IMOこれはより複雑です。

Debianファイアウォール

Debianに取り組んでからしばらく経ちましたので、現在のデフォルトが何であるかわかりませんが、上記の2つが機能しない場合は、これを調べる価値があるかもしれません。 Debianがファイアウォールを実行している場合は、別のマシンからアクセスしたいポートを開く必要があります。

お役に立てれば :)

10
Samuel Jaeschke