web-dev-qa-db-ja.com

ホストポート80からVirtualBoxポート80へのポート転送が機能しない

VirtualBoxポート転送ガイド、このサイトと他のサイトで同様の質問を読みましたが、解決策が見つかりませんでした。

ゲストOS(Ubuntu)でUFWが有効になっていて、ポート80と22が開いている。 HostからubuntuにSSHで接続し、Host BrowserからUbuntuのサイトにアクセスできます。

ゲストでは、Natおよびhostonly(vboxnet3)アダプターをセットアップしました。また、ルーターポート80(192.168.1.90)を開いたゲストIPは192.168.70.10

したがって、ゲスト設定> Nat>ポート転送で私は入れました:

TCP Host-ip:192.168.1.90 Host-port:80 guest-ip:192.168.70.10 guestost-port:80

ただし、この設定は機能しません。あなたが私を正しい道に案内してくれれば幸いです。

20
john206

Williamが述べたように、linux/unix OSは、ルートとして実行されない限り、1024未満のポートでプロセスを待機させません。 rootとしてVirtualBoxを実行することもできますが、そうすることについての悲惨な警告を読んだことがあります。恐ろしく安全ではありません。

代わりに、ポート80でリッスンするようにホストシステムでApache2を設定します(すでに設定されているはずです)が、ホストマシンでWebサイトを提供する代わりに、トラフィックをより高いポート(8080など)にプロキシします。ザ・ホスト。

次に、VirtualBoxでその上位ポートをゲストOSポート80に転送します。

Apacheのセットアップは次のようになります。

  1. HTTPプロキシモジュールをインストールする

    a2enmod proxy_http

  2. /etc/Apache2/ports.confListen 80ディレクティブが含まれていることを確認してください

  3. /etc/Apache2/sites-availableに別のサイトを追加するか、デフォルトのサイトを変更します(またはports.confでこれを平手打ちします)

     <VirtualHost *:80> 
     ProxyPreserveHost On 
     ProxyRequests Off 
     ProxyPass/http:// localhost:8080/
     ProxyPassReverse/http:/ /localhost:8080/
    </VirtualHost>
    
  4. apacheをバウンス

    service Apache2 restart

VirtualBoxのセットアップはHost port: 8080, guest port: 80になります。

トラフィックが行きます:

client --> Host:80 --> Apache --> Host:8080 ---> vbox NAT ----> guest:80

これは、Williamのsshトンネルに似ていますが、ホストを再起動するたびに手動でパスワードを再入力する必要はありません。

27
Peter

RootユーザーとしてVirtualBoxを実行することに抵抗がある場合に機能する別の方法を次に示します。 SSHを使用して、ホストポート80から制限のないポートへのポート転送を設定できます(次の例では、ポート8080を使用しています)。これは、次にゲストポート80に転送されます。複雑ですが、機能します。

  1. ホストポート8080からゲストポート80に転送します。ホストマシンのポート8080でブラウザをポイントして、ポートが機能していることを確認します。
  2. ホストでsshdが実行されていることを確認してください。 Mac OS Xでは、System Preferences -> Internet & Wireless -> SharingRemote Loginがチェックされています。
  3. ホストのrootになります

    $ Sudo su -
    
  4. SSHを使用してホストポート80をホストポート8080に転送します(バインドアドレス\*は、ポートをすべてのインターフェースで使用可能にします)。

    # ssh yourusername@localhost -L \*:80::8080
    

ユーザー名に使用する資格情報を使用してログインするように求められることに注意してください。そのため、おそらくパスワードを求められ、成功すると実際にログインします。

これで、ホストマシンのポート80にアクセスできるようになり、ホストマシンのポート8080、つまりゲストOSのポート80にアクセスした場合と同じサービスが表示されます。

ネットワーク上の他のユーザーがそのマシンのポート80にアクセスできないようにしたいが、それでもホストシステムのブラウザーからアクセスできるようにしたい場合は、ポートをlocalhostにバインドします。

# ssh yourusername@localhost -L localhost:80::8080
8
William Drury

によると http://www.virtualbox.org/manual/ch06.html#natforward

1024未満のホストポートの転送は不可能:

Unixベースのホスト(Linux、Solaris、Mac OS Xなど)では、rootで実行されていないアプリケーションから1024未満のポートにバインドすることはできません。その結果、そのようなポート転送を構成しようとすると、VMは起動を拒否します。

VirtualBoxをrootとして実行することは可能です。これにより、1024未満のホストポートを転送できるため、VirtualBoxでこれを行うことを確信している場合は、rootになり、VirtualBoxを次のように実行できます。

$ Sudo su -
# VirtualBox
6
William Drury