web-dev-qa-db-ja.com

Ubuntu LinuxホストでVirtualBoxポート転送から転送された低いポート番号にアクセスするにはどうすればよいですか?

特定のサーバーアプリケーションをVirtualBoxでローカルに実行しようとすると問題が発生するようですVM Ubuntuホストから(最終的にはオフサイトにデプロイされるため、VMでテストしています)—提供ホストがWebブラウザーに移動し、https://localhost/に移動してサーバーのWebポータルにアクセスする機能。

(ホストUbuntu 18.04、ゲストCentOS 7、NAT + SSHポート2200-> 22のVirtualBoxでのポート転送およびポート443-> 443のWebコンテンツ)

SSHは、このポートを介して2200->ゲスト22から正常に機能するため、NATポート転送構成の外部では問題がないことがわかります。

問題は、ポート443がVirtualBox>ネットワーク>ポート転送から同じように通過することであるように見えます。

この場合、システムは「低いポート番号」443に転送することを許可していないと思います。 1024未満のポートや何かを正しく割り当てることができないように、これをオーバーライドする方法が必要ですが、これまでのところ回避策は成功していません。

ホストのより高いポート番号(たとえば、443ではなく4430)に転送するだけで成功しました-サーバーポータルページをホストWebブラウザーにポップアップ表示することができました。しかし、Webポータルの別のページに移動しようとすると、新しいURLに移動するたびに、上位のポート割り当てが「取り消され」、サーバーはクライアントに443を再度使用するように指示するため、失敗します。

authbindsetcapなどの回避策をまだ検討していますが、VirtualBox(/usr/bin/virtualbox)に具体的に割り当てることによる両方の最初の試みはまだ成功していません。

参考までに、現在、サーバー側のソフトウェアに変更を加えることはできません(443でのみ出力を取得し、何らかの方法でホストにマップして、Webブラウザーを使用してアクセスできます)。

1
adowdy

ホストマシンにApache2プロキシデーモンをセットアップし、SSLを有効にしてポート:443から:4430にトラフィックをプロキシします(ローカルで実行されているVirtualBox VMで実行されているSSLサーバーと通信する必要があります( CentOSサーバー)

秘訣は、VMサーバーがそのポートを介してhttpsを必要とし、ほとんどのオンライン回答はSSL認証なしでHTTPのみを処理することでした。以下のアプローチは、Apache2プロキシのSSLを考慮しています。

VirtualBoxネットワーク構成

VirtualBoxの設定>ネットワーク> NAT>ポート転送にこれがあることを確認してください:

Protocol TCP
Host IP 127.0.0.1
Host Port 4430
Guest IP 10.0.2.15
Guest Port 443

したがって、VMが4430でホストをリッスンしている場合、課題は、ホスト上のlocalhost:443へのブラウザリクエストが-> VM:4430にプロキシされるようにすることです。 (またその逆)

これは、これらのポートでホスト<->ゲストVMからプロキシおよびリバースプロキシするメカニズムが必要であることを意味します。

これは通常httpにとってそれほど難しいことではありませんが(SOのほとんどの回避策はこのユースケースを引用しています)、httpsはSSLの厄介な複雑さを追加し、いくつかの異なる潜在的な回避策(authbind、nginx、sshトンネルなど)を試した後です。ホストマシンでApache2を介してプロキシを設定することに決めました...

Apache2インストール

Apache2をインストールすることから始めます

Sudo apt install Apache2

必要なApache2プラグインを有効にします。

a2enmod proxy_http proxy ssl

SSL証明書を設定する

次のようにopensslを実行しました。 SSL証明書を生成しました(すべてのデフォルト、プロンプトごとにEnterキーを押し続けました):

mkdir -p ~/certs && cd ~/certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mysitename.key -out mysitename.crt

Apache2プロキシサーバー構成を作成します

証明書ファイルが存在するので、次のファイルを作成および編集して、Apache2に新しいサイトを作成します。

/etc/Apache2/sites-enabled/001-myserverproxy.conf

内容:

<VirtualHost *:443>


    #DocumentRoot /var/www/html

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined

    # CUSTOM STUFF NEEDED FOR SSL PROXY
    SSLEngine On
    SSLProxyEngine on
    SSLProxyCheckPeerCN off

    # this needs to be off because cert does not match server name
    SSLProxyCheckPeerName off

    # MAKE SURE THE CERTS ARE GENERATED AND AT THE CORRECT PATH
    SSLCertificateFile /home/myuser/certs/mysitename.crt
    SSLCertificateKeyFile /home/myuser/certs/mysitename.key
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / https://localhost:4430/
    ProxyPassReverse / https://localhost:4430/


</VirtualHost>


# vim: syntax=Apache ts=4 sw=4 sts=4 sr noet

ここで、Apache2デーモンサービスを実行して再起動できることを確認してください。

Sudo systemctl restart Apache2

ホストマシンのブラウザに移動すると、通常はlocalhostからVMサーバーを参照できるはずです。

1
adowdy