NGINX リバース プロキシ ssh を複数のホストに

NGINX リバース プロキシ ssh を複数のホストに

NGINX を使用して、さまざまな Web サイトで通常の http(s) で動作する複数のリバース プロキシがあります。パブリック IP アドレスは 1 つだけですが、その背後には複数の vhost があります。この部分は正常に動作しています。

nginx の背後にあるすべてのホストに ssh で接続したいのですが、現在は 3 つしかありませんが、将来的にはさらに増える予定です。

nginx はバージョン 1.9.1 以上なので、ストリームが許可されたバージョンだったと思います。ssh の設定を開始しました。後でデータベースを追加し、メールも追加したいと思っていますが、今のところは ssh が優先です。

そこで、まず ssh_available と ssh_enabled を nginx ディレクトリに追加しました。

/etc/nginx/nginx.conf に以下を追加しました:

stream {
  include /etc/nginx/ssh_enabled/*;
}

/etc/nginx/ssh_available/domain.com.rproxy.conf には次の内容があります:

upstream ssh {
  server 192.168.1.61:22;
}

server {
  listen 22;
  proxy_pass ssh;
}

私は、ssh_available の conf ファイルに ssh_enabled のシンボリックリンクを追加するという通常の方法を使用しました。

これにより、nginx リバース プロキシの背後にある 1 つのホストにのみ ssh で接続できるようになります。

現在の構成では、パブリック IP、サブドメイン、または FQDN のいずれを使用しても、SSH 接続は常に同じホストに接続されます。

これを、単一の IP/ドメインではなく、複数のホスト名/ドメイン名で動作するように、より移植性の高いものにするにはどうすればよいでしょうか?

私が望んでいるのは、ドメインを使用して SSH で接続し、それをホストするサーバーに接続することです。

答え1

回避策を思いつきました。これは、現在のところ ssh がドメインを受け入れないため、必要なポートよりも多くのポートが開いていることを意味します。IPV6 ソリューションはありますが、現時点では私にとっては解決策ではありません。

つまり、ポートが増えるということです。

これが私の解決策です。各サーバーに十分なポート数を持つ小さなポート範囲を nginx に転送します。ほぼ任意のポート範囲を選択したり、厳選したりすることができますが、この例をできるだけ単純にするには、範囲を指定する方が簡単です。

/etc/nginx/ssh_available/に作成したconfファイルを変更しました

upstream 59 {
      server 192.168.1.59:22;
}

server {
  listen 22059;
  proxy_pass 59;
}

upstream 61 {
      server 192.168.1.61:22;
}

server {
  listen 22061;
  proxy_pass 61;
}

upstream 62 {
      server 192.168.1.62:22;
}

server {
  listen 22062;
  proxy_pass 62;
}

upstream 63 {
      server 192.168.1.63:22;
}

server {
  listen 22063;
  proxy_pass 63;
}

もちろん、これを使用すると、ネットワーク上で利用可能な IPV4 アドレスの数に制限されます。IPV6 の方が適したオプションですが、まだ持っていません。

注意: この例をそのまま使用すると、内部 IP をポート番号として提供することで、ネットワーク インフラストラクチャの一部を、それを解析しようとする可能性のあるすべての人に公開することになります。開くポートを厳選し、構成を適切に設定する必要があります。

最後に、これは私の意見では素晴らしい答えではありませんが、実用的な答えなので、そのため投稿しますが、解決策としては受け入れません。私が思いついた方法よりも優れた IPV4 の方法があるかもしれませんので、あなたの回答を心から歓迎します。

関連情報