SSH接続の帯域幅を制限する方法

SSH接続の帯域幅を制限する方法

SSH接続速度を制限する方法は?たとえば、ポート転送(ssh -L ...)、リバーストンネリング(ssh -R ...)、またはSOCKS5動的ポート転送()を実行するときにssh -D ...トンネルの帯域幅を制限したい場合があります。

答え1

ProxyCommandこれは、元のTCP接続の代わりにそれを使用して実行できます。ProxyCommandグローバル設定ssh()またはコマンドラインで/etc/ssh/ssh_config個人設定を指定できます。~/.ssh/configssh -o ProxyCommand=…

単純ProxyCommandまたはnc %h %pそれに対応するもの(正しい構文でSSHサーバーへのraw TCP接続を提供するすべて)nc。サーバーと通信するには、コマンドの標準入力に書き込み、コマンドの標準出力から読み込みます。ソールが接続されていないのとほぼ同じです(内部で動作している場合)。ncatsocatsshnc %h %pProxyCommandsshnc

秘密は、両側と間にnc %h %pフィルタを挿入できることです。sshこれにより、接続を制限できます。あなたのsshスピーチが次のようになると想像してください。

pv -qL 20K | nc %h %p | pv -qL 10K

サーバーに送信されるコンテンツにはssh最初の制限が適用されpvsshサーバーから受信されるコンテンツには2番目の制限が適用されますpv

ssh上記のコマンドで会話を実行するには、次のように呼び出します。

ssh -o ProxyCommand='pv -qL 20K | nc %h %p | pv -qL 10K' …

メモ:

  • この方法を使用すると、SSH接続全体、それを通過するすべて、すべてのトンネル、X11転送、およびその他のセッション(接続共有の場合)を制限できます。すべて。 raw TCP 接続を制限します。

  • 使用している場合は、静かでなく実際にトンネルのスループットを報告ssh -Nできます。pv

    ssh -o ProxyCommand='pv -cN out -L 20K | nc %h %p | pv -cN in -L 10K' -ND 8080 user@server
    
  • (コール別)では、pv -Rランニング設定を変更できるので、pvいつでもスロットルを調整できます。これを行うには、PIDがどこに属しているかをpv -P内部にProxyCommand知らせると便利ですpvman 1 pv詳細より。

  • 構成ですでにsを使用している場合は、sを使用して(代わりに)ProxyCommand既存の値を含める必要があります。設定ですでにそれを使用している場合は、それをに変換してsと一緒に含める必要があります。nc %h %ppvProxyJumpProxyCommandpv

答え2

1つのオプションは、ルータのポート22にQoSを適用することです。

水滴はい軽量ユーザースペース帯域幅シェーパー。またすることができますデーモンとして実行、一度に複数のセッションを管理できる役割です。

別の可能性は、次のようなものを使用することです。HTB初期化プログラム- スクリプトまたはIP_リレー

~によるとこの議論、iptablesを使用してパケットフローを制限することもできますが、これは私の選択ではありません。むしろ帯域幅を直接制限したい。

関連情報