web-dev-qa-db-ja.com

ネットワークの状況を変更しても、moshがログインを維持できるのはなぜですか?

私はUnixSEの別の質問でこのアプリを知っていました。

そしてそれは言う:

IPを変更します。接続を維持します。

インターネット接続間を移動すると、Moshは自動的にローミングします。電車の中でWi-Fiを使用し、ホテルでイーサネットを使用し、ビーチでLTE:ログインしたままになります。SSHや次のようなWebアプリなど、ほとんどのネットワークプログラムはローミング後に接続を失います。 Gmail。Moshは違います。

どうしてそれが可能でしょうか?

それは単純な再接続テクノロジーですか?

2
AGamePlayer

主な理由は、moshがコネクションレス型プロトコルを使用し、クライアントとサーバーの再関連付けを適切に処理するためです。私自身、詳細について100%確信しているわけではありませんが、私が理解しているように、一般的には次のように機能します。

  1. Moshを最初に使用してリモートホストに接続すると、通常のSSHを使用してログインし、別のポートで接続をリッスンする独自のサーバーコンポーネントを起動します。
  2. 次に、Moshは元のSSH接続を閉じ、独自のプロトコルで実行される新しいターミナルセッションを作成します。このリンクはTCPではなくUDPを使用するため、コネクションレス型プロトコル上で接続を機能的にエミュレートしています。
  3. クライアントのIPアドレスが変更されたり、ネットワークがしばらくドロップアウトしたり、または同様のことが起こった場合、moshは元のサーバーアドレスにパケットを送信し続けることで、エミュレートされた接続を再確立しようとします。サーバーコンポーネントは、新しいアドレスからのパケットを検出すると、古いアドレスの代わりに応答パケットの送信を開始します。

もちろん、認証も含まれます(そうでなければ、誰でも簡単にモッシュセッションを乗っ取ることができます)が、それは切り替えがどのように行われるかにとって特に重要ではありません。

多くのP2Pソフトウェアは、ネットワークの変更に対する回復力を提供するために、非常に類似した手法(つまり、基本的にステップ2と3と同等で、他の何かがトンネリングされている)を使用していることに注意してください。この種のことを行うソフトウェアの例には、 Syncthing および tinc が含まれます。

7

あなたの引用はウェブサイトから来ています https://mosh.org 。 「技術情報」を読み始めると、あなたの質問に答えられます:-)。

それは単純な再接続テクノロジーですか?

これは、従来の再接続テクノロジー、つまりタイムアウト+再接続ではありません。その一例は、SSH/TCPタイムアウト+ screen またはtmuxサーバーへの手動再接続です。

moshは、モビリティテクノロジーとして意図的に設計されています。それははるかに速く適応することができます。

SSPでのローミングが簡単になります:クライアントは、少なくとも3秒に1回、「ハートビート」を含むシーケンス番号を増やしながらデータグラムをサーバーに送信します。サーバーがクライアントから本物のパケットを受信するたびにシーケンス番号が以前に受信したものよりも大きい場合、そのパケットのIP送信元アドレスがサーバーの送信パケットの新しいターゲットになります。このように「ステートレス」にローミングを行うことで、ローミングはNATの内外で機能します。ローミングは、クライアントがインターネットに表示されるIPアドレスが変更されたことに気付いていない場合でも機能します。ハートビートにより、Moshは、サーバーからしばらく連絡がない場合にユーザーに通知できます(SSHとは異なり、ユーザーは入力しようとするまで、接続の切断に気付かない場合があります)。

他のモビリティテクノロジーは、クライアントインターネットに表示されるIPアドレスが変更されたことを認識している場合に、このようなハートビート遅延を短絡させる可能性があります。このセクションでは、moshがわざわざそうするかどうかについては説明していません。 3秒後に更新すると、moshインタラクティブセッションが便利になり、従来のデフォルトよりもはるかに堅牢になります。また、 too が細かい部分で行き詰まることなく、「技術情報」で説明されているモッシュのより斬新な側面があります:)。

少なくとも上記のように、moshは、一方の端、つまりクライアントに対してのみモビリティを実装します。これはmoshに役立ち、サードパーティの必要性を回避します-安定したIPアドレスを持つルーターで実行される「ホームエージェント」を必要とするモバイルIPとは異なります。

モビリティを実装する場合、安全に制御することが非常に重要です。 moshには、SSHによって初期化されたセキュリティがすでに含まれています。モバイルIPにはこの利点はありません。それはIPsecを活用するように見えます。 IPsecは、IPのオプションの拡張機能であり、コンピューターとルーターの間で構成する必要があります。特定の狭いシナリオでのみ使用される傾向があります。

moshscreenまたはtmuxの使用には3番目の類似点があります。これは、SSHサーバーが、切断後にプログラムを無期限に実行したままにするように構成されているためにのみ機能します。 「公式」のデフォルト設定でsystemdを使用しない限り:)。 systemdは、これを制御する能力の欠如が歴史的なUnixの明白な見落としであったと信じています。他の多くのシナリオでは、接続さえしていないときにリソースを無期限に使用し続けることは、危険な無駄であると見なされることに注意してください。多くのWebサーバーは、大量のデータを送受信しなかった数秒後にクライアントを切断するように構成されています。 https://en.wikipedia.org/wiki/Slowloris_(computer_security) を参照してください。

モバイルIPは古いプロジェクトです。より最近のプロジェクトはMP-TCP(マルチパスTCP)です。モビリティ制御のためのシンプルなセキュリティを実装します。 MP-TCPは、モバイルではない単一のサーバーIPに最初の接続が行われるという点で、moshに似ています。接続が確立されると、理論的には、クライアントまたはサーバーのいずれかがIPアドレスを変更して接続を維持することが可能です。ただし、すべてのIPが同時に変更された場合、回復することはできません。

1
sourcejedi