私はSSHポートフォワーディングを使用している人やアイデアがある人のために(公共アドレスを持つ)SSHサーバーを介して私のPCからリモートコンピュータ(パブリックアドレスを持たないカメラ)へのリモートトンネルを作成しました。
目的は、SSHリモートポート転送を介してカメラへのアクセスを一般に転送することです。
マイコンピュータで実行するコマンドの形式は次のとおりです。
ssh -R sshServer_port:destination_address:destination_port sshServer_address
例:
ssh -R 3000:192.198.1.210:80 [email protected]
sshServerでは、localhost:3000を介してリモートシステムにアクセスできます。
その後、次のようにして一般的にアクセスできるようにtcpproxyを設定しました。
tcpproxy -lhost 0.0.0.0:8080 -rhost localhost:3000
これにより、すべてのネットワークの誰でも52.14.9.210:8080と入力してカメラインターフェイスにアクセスできます。
私が望むのは、2つのリモートシステムポート(httpの場合は80、ライブストリーミングの場合は8000)でリッスンするトンネルを作成することです。コマンドの形式は次のとおりです。
ssh -R sshServer_port:destination_address:destination_port1 -R sshServer_port:destination_address:destination_port2 sshServer_address
例:
ssh -R 3000:192.168.1.210:80 -R 3000:192.168.1.210:8000 [email protected]
コマンドを実行しようとしましたが、次のエラーが発生しました。警告:ポート3000でリッスンするリモートポート転送に失敗しました。
この問題を解決する方法を知っていますか?
答え1
必要なのは、2つのリモートコンピュータポートを受信する1つのトンネルを作成するのではなく、同じリモートポートで受信する2つのトンネルを望むことです。
それは不可能です。 SSHは、着信接続がどのポートに転送されるべきかをどのように知ることができますか?
プロトコルを区別するためのいくつかの解決策がありますが、普遍的な解決策はありません。 httpトラフィックにポート80を使用している場合は、リバースプロキシを設定できますが、両方の宛先に2つの異なるポートを使用する方がはるかに簡単です。
編集する
-g
あなたのコメントによれば、他のホストがトンネルに接続できるようにするSSHオプションがありません。
答え2
ralffriedlのヒントのおかげで問題を解決しました。
ステップ1:ポート80のカメラアドレスとポート2233のSSHサーバーの間に最初のリモートポート転送トンネルを作成し、SSHサーバーのlocalhost:2233とポートのサーバーパブリックIPアドレス(52.214.9.211)の間にtcpproxyを設定しました。 4455
ステップ2:ポート8000のカメラアドレスとポート2255のSSHサーバーの間に2番目のリモートポート転送トンネルを作成し、SSHサーバーのlocalhost:2255とポートのサーバーパブリックIPアドレス(52.214.9.211)の間にtcpproxyを設定しました。 8000
これにより、外部ネットワークの誰かがブラウザにサーバーのIPアドレスを入力し、カメラのIPアドレスのポート80の転送ポート(52.214.9.211:4455)を追加すると、カメラに接続できます。ポート8000で完了ライブ放送要求が行われた場合(例:(52.214.9.211:8000))、サーバーのlocalhost:2255に転送され、カメラのポート8000に転送されます。