web-dev-qa-db-ja.com

自動再接続TCPトンネル

2台のマシン間に信頼性の低いネットワーク接続があります。アクティブなTCP接続が制御できない理由で切断されることがあります。 2台のマシン間で信頼性の高いTCP接続を確立したいと思います。

ネットワークが信頼できる場合は、サーバーがremotehostのポート1234でリッスンしている状態で、ssh -L 1234:localhost:1234 remotehostを実行し、クライアントをlocalhost:1234に向けます。ただし、ssh接続が停止すると、転送された接続も停止します。クライアントとサーバー間の接続を自動的に復元するようにするにはどうすればよいですか?

非解決策:

  • これはインタラクティブアプリケーション用ではないため、 screen は適用されません。
  • これは、SSHトンネルを自動的に再接続するだけではありません。la autossh 。新しい接続を開始するのではなく、同じトンネリングされたTCP接続を引き続き使用したい。
  • 原則として、VPNでうまくいきます。しかし、TCP接続が1つだけ必要な場合はやり過ぎのようです。どちらの側にもルート権限がなくても、機能するソリューションが必要です。

rocksというプログラムの記憶が薄暗いのですが、それはWebの表面から落ちたようです。私は主に両側のLinuxに興味がありますが(このレベルのプログラムは他のユニスに移植できると思いますが)、QNXとVMSの間で機能するプログラムを知っているならなおさらです。

古いものはメンテナンスされていない信頼できるソケット( Rocks )あなたが探しているものですか?

5
user9517

この機能で私が知っている唯一の標準プロトコルは [〜#〜] mptcp [〜#〜] です。これはアプリケーション層に対して透過的であるため、MPTCP上でのSSHは正常に機能するはずです。基盤となるTCP接続を異なるIPの異なるパスで実行できるため、原則として、VPN接続が稼働しているかどうかに応じて、SSH接続をVPN接続に移行したりVPN接続から移行したりするために使用できます。 。

MPTCP実装の成熟度についてはよくわかりませんが、プロトコルの設計は非常に堅牢に見えます。

不安定なネットワーク接続が原因でSSH接続が失われるのを防ぐ必要があります。 SSH接続を切断したいmitmからあなたを保護することはできません。 mitmは引き続き破損したデータを挿入でき、SSHはそのデータを検出して接続を切断します。

SSHプロトコルに組み込まれているMPTCPのような再接続方法は、接続を可能な限り長く維持することを想像できる方法です。しかし、そのような機能はSSHプロトコル用に設計されたものではないと思います。

1
kasperd

daemontoolsを使用して、sshポートを前方に維持できます。接続がダウンしている間、接続に応じてプログラムを維持する必要はありません(おそらく、sshが切断すると、ローカルポートが接続を拒否し始めます)が、それは始まりです。

Ssh転送がなくなるとすぐにそのポートにパケットをドロップさせるなど、いくつかのiptablesトリックがあると思います。そのため、接続プログラムは、パケットが消えており、拒否されていないことを認識しています。私は(再び)daemontoolsを学んでいるだけなので、サービスが停止したときにカスタムスクリプトを実行できるかどうかはわかりませんが、実行できると思います。

0