特定のサーバーアプリケーションを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
を再度使用するように指示するため、失敗します。
authbind
やsetcap
などの回避策をまだ検討していますが、VirtualBox(/usr/bin/virtualbox
)に具体的に割り当てることによる両方の最初の試みはまだ成功していません。
参考までに、現在、サーバー側のソフトウェアに変更を加えることはできません(443でのみ出力を取得し、何らかの方法でホストにマップして、Webブラウザーを使用してアクセスできます)。
ホストマシンにApache2プロキシデーモンをセットアップし、SSLを有効にしてポート:443
から:4430
にトラフィックをプロキシします(ローカルで実行されているVirtualBox VMで実行されているSSLサーバーと通信する必要があります( CentOSサーバー)
秘訣は、VMサーバーがそのポートを介してhttpsを必要とし、ほとんどのオンライン回答はSSL認証なしでHTTPのみを処理することでした。以下のアプローチは、Apache2プロキシのSSLを考慮しています。
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をインストールすることから始めます
Sudo apt install Apache2
必要なApache2プラグインを有効にします。
a2enmod proxy_http proxy 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に新しいサイトを作成します。
/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サーバーを参照できるはずです。