2台のマシン間に信頼性の低いネットワーク接続があります。アクティブなTCP接続が制御できない理由で切断されることがあります。 2台のマシン間で信頼性の高いTCP接続を確立したいと思います。
ネットワークが信頼できる場合は、サーバーがremotehost
のポート1234でリッスンしている状態で、ssh -L 1234:localhost:1234 remotehost
を実行し、クライアントをlocalhost:1234
に向けます。ただし、ssh接続が停止すると、転送された接続も停止します。クライアントとサーバー間の接続を自動的に復元するようにするにはどうすればよいですか?
非解決策:
rocks
というプログラムの記憶が薄暗いのですが、それはWebの表面から落ちたようです。私は主に両側のLinuxに興味がありますが(このレベルのプログラムは他のユニスに移植できると思いますが)、QNXとVMSの間で機能するプログラムを知っているならなおさらです。
古いものはメンテナンスされていない信頼できるソケット( Rocks )あなたが探しているものですか?
この機能で私が知っている唯一の標準プロトコルは [〜#〜] mptcp [〜#〜] です。これはアプリケーション層に対して透過的であるため、MPTCP上でのSSHは正常に機能するはずです。基盤となるTCP接続を異なるIPの異なるパスで実行できるため、原則として、VPN接続が稼働しているかどうかに応じて、SSH接続をVPN接続に移行したりVPN接続から移行したりするために使用できます。 。
MPTCP実装の成熟度についてはよくわかりませんが、プロトコルの設計は非常に堅牢に見えます。
不安定なネットワーク接続が原因でSSH接続が失われるのを防ぐ必要があります。 SSH接続を切断したいmitmからあなたを保護することはできません。 mitmは引き続き破損したデータを挿入でき、SSHはそのデータを検出して接続を切断します。
SSHプロトコルに組み込まれているMPTCPのような再接続方法は、接続を可能な限り長く維持することを想像できる方法です。しかし、そのような機能はSSHプロトコル用に設計されたものではないと思います。
daemontools
を使用して、sshポートを前方に維持できます。接続がダウンしている間、接続に応じてプログラムを維持する必要はありません(おそらく、sshが切断すると、ローカルポートが接続を拒否し始めます)が、それは始まりです。
Ssh転送がなくなるとすぐにそのポートにパケットをドロップさせるなど、いくつかのiptables
トリックがあると思います。そのため、接続プログラムは、パケットが消えており、拒否されていないことを認識しています。私は(再び)daemontools
を学んでいるだけなので、サービスが停止したときにカスタムスクリプトを実行できるかどうかはわかりませんが、実行できると思います。