すべてのポートが開いている専用サーバーにマスターノードがあります。サーバー間通信に使用したポートの一部は、ISPプロバイダーによって閉じられた追加の専用サーバーを使用する必要がありました。したがって、メインサーバーのインターネットIPアドレスを使用して接続を確立することはできません。
次のコマンドを使用して、閉じたポートを持つ専用サーバーの1つでSSHポート転送を作成しました。
ssh -fNT -L 84xx:localhost:84xx user@main_server_IP
1つのポートだけを渡すと機能しますが、2つ以上のポートが閉じられたサーバーではどのように実装しますか?また、接続を転送するために複数のサーバーがある場合は、localhostが正しく使用されていないようです。各サーバーが持つ静的IPアドレスではなく、イントラネットアドレスはどのように生成しますか?それとも、localhostの代わりに静的IPアドレスを使用できますか? 84xxポートを介して確立されたノードへのトラフィックだけを転送するだけで、他のすべての接続はトンネリングなしで一般的な方法で進む必要があります。
答え1
正しく述べたように、localhostを使用しないでください。これは主に誤ったトンネルタイプ(-Rではなく-L)を使用しているためです。外部クライアントが使用できるように、マスターサーバーで新しいポートを開こうとしています。これは、これらのポートをパブリックIPアドレスにバインドする必要があることを意味します。 localhostにバインドすると、外部の誰もアクセスできません。
問題(sshトンネル)を解決する方法を検討する際の簡単な解決策は、main_serverで2つの異なるポートを使用することです。プライマリサーバーが「main_ip」で、他の2つのサーバーが「sec1_ip」と「sec2_ip」の場合は、次のコマンドを実行する必要があります。
sec1_ipから:
ssh -fNT -R 8447:localhost:8447 user@main_ip
sec2_ipから:
ssh -fNT -R 8448:localhost:8447 user@main_ip
その後、main_ip:8447に接続しているすべての人がsec1_ipで逆トンネルを実行し、main_ip:8448に接続しているすべての人がsec2_ipで逆トンネルを実行します。
次の点に注意してください。
- 逆トンネリングの最初のオプションとして別のポートを使用する必要があります。 1つのプロセスだけが特定のIPアドレスから特定のポートを開くことができます。
- -Lの代わりにlocalhostと-R(リバーストンネル)を使用します。これは、localhost部分がsec * _ipサーバーにあることを意味します。
- 両方の「隠し」サーバーに同じポートを使用するには、main_ipサーバーから追加のパブリックIPアドレスを要求する必要があります。この場合、上記のコマンドを次のように変更できます。
sec1_ipから:
ssh -fNT -R main_ip:8447:localhost:8447 user@main_ip
sec2_ipから:
ssh -fNT -R main_ipB:8447:localhost:8447 user@main_ip