リバースSSHトンネルすべての接続

リバースSSHトンネルすべての接続

ネットワークの設定に問題があり、ネットワークの知識が不足しているか、ローカルのLinuxコミュニティが助けることができません。

NATルーターの後ろに隠されたサーバーA(私のPCのすぐ近く)と静的IPを使用するVPSであるサーバーBがあります。

私のサーバーAをインターネットのどこからでもアクセスできるWebサーバーとして使用したいと思います(以降は、独自の小規模Webホスティングとしても使用します)。インターネット経由でSSH経由でサーバーB経由でサーバーAにアクセスする方法に気づきました。リバースSSHトンネル。しかし、このことには2つの欠陥があります。

  • 1つのポートだけを通過します(たとえば、すべてのポートでWeb、SSH、およびより多くのサーバーを同時に維持したい)。
  • ネットワークからサーバーAに直接アクセスできません。サーバーBに接続してから接続する必要があります。ssh -p 22222 username@localhost

すべてのポートを既存のトンネルに転送するソリューションはありますか?私がインターネットで見つけたものはすべてまたは駅トンネルを作ろうまたはポートを直接トンネルには転送しますが、既存のリバーストンネルには転送しません。

ベストアンサー1

たぶん、あなたはすでに「逆SSHトンネリングに関する2つの追加の注意事項」を知っているかもしれませんが、見逃した場合に備えて次のことを行います。

  1. リバースSSHトンネル一つコマンドには、1 つではなく複数のポート転送を含めることができます。
  2. リバースSSHトンネルは、ローカルまたはパブリックIP(Bのローカルホストだけでなく)でもリッスンできます。

これを達成するには、サーバーBに入れてsshdサービスを再起動する必要があるため、(1)複数の-Rパラメータを追加するだけです。通常、1024未満のサーバーBポートでもルートで許可されている場合でもリッスンしたいので、sshd_configファイルにも存在する必要があります。(2)GatewayPorts clientspecified/etc/ssh/sshd_configPermitRootLogin yes

サーバーAで実行される完全なsshコマンドは次のとおりです。

ssh -R serverBpublicIP:2222:serverAlocalIP:22 \
    -R   serverBpublicIP:80:serverAlocalIP:80 \
    -R serverBpublicIP:5901:serverAlocalIP:5901 \
    -R serverBpublicIP:8080:serverAlocalIP:8080 root@serverBpublicIP
#--------------------------|----------------------------------------
#     new listening B side | already listening local A side

4つのポートをサーバーBのパブリックIPに転送します。このコマンドが正しく機能していることを確認して確認したら、daemonパラメーターを-fNT追加してsystemdを使用して自動的に開始できます。

転送に失敗した場合は、新しいポートが利用可能であることを確認してください。

serverB$ netstat -anpt | grep '2222\|80\|5901\|8080'

したがって、限られた数のTCPポートが必要な場合(UDPポート範囲要件を持つ特定のSIP電話またはRTPアプリケーションを使用していない場合)、ほとんどの場合、リバーストンネリングで十分です。

おすすめ記事