Trickleを使用するLinuxシステムのアプリケーションで使用されるネットワーク帯域幅を制限する方法


1つのアプリケーションがすべてのネットワーク帯域幅を支配する状況に遭遇したことがありますか? 1つのアプリケーションがすべてのトラフィックを消費する状況にあった場合は、トリクル帯域幅シェーパーアプリケーションの役割を評価します。

システム管理者でもLinuxユーザーでも、ネットワーク帯域幅が単一のアプリケーションによって消費されないように、アプリケーションのアップロード速度とダウンロード速度を制御する方法を学ぶ必要があります。

[あなたも好きかもしれません:Linuxのネットワーク使用状況を分析するための16の便利な帯域幅監視ツール]

トリクルとは何ですか?

Trickleは、アプリケーションのアップロードとダウンロードの速度を管理して、アプリケーションの1つが利用可能な帯域幅のすべて(またはほとんど)を占有するのを防ぐことができるネットワーク帯域幅シェーパーツールです。

簡単に言うと、トリクルを使用すると、クライアント/サーバー環境での帯域幅シェーピングの典型的な例であるユーザーごとの制御とは対照的に、アプリケーションごとにネットワークトラフィックレートを制御できます。に精通。

Trickleはどのように機能しますか?

さらに、トリクルを使用すると、アプリケーションごとに優先度を定義できるため、システム全体に全体的な制限が設定されている場合でも、優先度の高いアプリは自動的により多くの帯域幅を取得できます。

このタスクを実行するために、トリクルは、TCP接続を使用してソケットとの間でデータを送受信する方法にトラフィック制限を設定します。データ転送速度を除いて、トリクルは、特定の瞬間に形成しているプロセスの動作を変更しないことに注意する必要があります。

Trickleができないことは何ですか?

唯一の制限は、いわば、静的にリンクされたアプリケーションまたはSUIDまたはSGIDビットが設定されたバイナリではトリクルが機能しないことです。これは、動的リンクとロードを使用して、シェーピングされたプロセスと関連するネットワークソケットの間に配置されるためです。 Trickleは、これら2つのソフトウェアコンポーネント間のプロキシとして機能します。

トリクルは実行するためにスーパーユーザー権限を必要としないため、ユーザーは独自のトラフィック制限を設定できます。これは望ましくない場合があるため、システムユーザーが超えてはならない全体的な制限を設定する方法を検討します。つまり、ユーザーは引き続きトラフィックレートを管理できますが、常にシステム管理者が設定した境界内にあります。

この記事では、Linuxサーバーのアプリケーションが使用するネットワーク帯域幅を細かく制限する方法について説明します。

必要なトラフィックを生成するために、クライアント(CentOSサーバー– dev1:192.168.0.17)でncftpputとncftpget(どちらのツールもncftpをインストールすることで利用可能)を使用し、サーバー(Debian – dev2:192.168.0.15)でvsftpdを使用します。デモンストレーションの目的。同じ手順は、RedHat、Fedora、Ubuntuベースのシステムでも機能します。

Linuxへのncftpとvsftpdのインストール

1. RHEL/CentOS 8/7の場合、EPELリポジトリを有効にします。エンタープライズLinux用の追加パッケージ(EPEL)は、Fedoraプロジェクトによって維持されている高品質の無料のオープンソースソフトウェアのリポジトリであり、Red Hat Enterprise LinuxやCentOSなどのスピンオフと100%互換性があります。トリクルとncftpの両方がこのリポジトリから利用可能になります。

2.次のようにncftpをインストールします。

# yum update && sudo yum install ncftp		[On RedHat based systems]
# aptitude update && aptitude install ncftp	[On Debian based systems]	

3.別のサーバーにFTPサーバーをセットアップします。 FTPは本質的に安全ではありませんが、ファイルのアップロードまたはダウンロードのセキュリティが必要ない場合に広く使用されていることに注意してください。

この記事では、トリクルの恩恵を説明するために使用しています。また、クライアントのstdoutで転送速度を示しているため、別の日時に使用するかどうかについての説明を残します。

# yum update && yum install vsftpd 		[On RedHat based systems]
# apt update && apt install vsftpd 	[On Debian based systems]

ここで、FTPサーバー上の/etc/vsftpd/vsftpd.confファイルを次のように編集します。

$ sudo nano /etc/vsftpd/vsftpd.conf
OR
$ sudo /etc/vsftpd.conf

次の変更を行います。

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

その後、現在のセッションでvsftpdを開始し、将来の起動時に自動開始できるようにします。

# systemctl start vsftpd 		[For systemd-based systems]
# systemctl enable vsftpd
# service vsftpd start 			[For init-based systems]
# chkconfig vsftpd on

4.リモートアクセス用にSSHキーを使用してCentOS/RHELドロップレットでFTPサーバーをセットアップすることを選択した場合、ルートのホームの外部で目的のコンテンツをアップロードおよびダウンロードするための適切なディレクトリとファイルのアクセス許可を持つパスワードで保護されたユーザーアカウントが必要になりますディレクトリ。

次に、ブラウザに次のURLを入力して、ホームディレクトリを参照できます。ログインウィンドウがポップアップ表示され、FTPサーバー上の有効なユーザーアカウントとパスワードの入力を求められます。

ftp://192.168.0.15

認証が成功すると、ホームディレクトリの内容が表示されます。このチュートリアルの後半で、そのページを更新して、前の手順でアップロードされたファイルを表示できるようになります。

LinuxにTrickleをインストールする方法

次に、yumまたはaptを介してtrickleをインストールします。

インストールを成功させるには、ツール自体をインストールする前に、現在インストールされているパッケージが最新であることを確認することをお勧めします(yum updateを使用)。

# yum -y update && yum install trickle 		        [On RedHat based systems]
# apt -y update && apt install trickle 	[On Debian based systems]

トリクルが目的のバイナリで機能するかどうかを確認します。前に説明したように、トリクルは動的ライブラリまたは共有ライブラリを使用するバイナリでのみ機能します。このツールを特定のアプリケーションで使用できるかどうかを確認するために、よく知られているlddユーティリティを使用できます。lddはリストの動的依存関係を表します。

具体的には、特定のプログラムの動的依存関係のリストでglibc(GNU Cライブラリ)の存在を探します。これは、ソケットを介した通信に関係するシステムコールを定義するのはまさにそのライブラリだからです。

特定のバイナリに対して次のコマンドを実行して、トリクルを使用して帯域幅を形成できるかどうかを確認します。

# ldd $(which [binary]) | grep libc.so

例えば、

# ldd $(which ncftp) | grep libc.so

その出力は次のとおりです。

# libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)

出力の括弧内の文字列は、システムごとに、また同じコマンドの後続の実行間でも変更される可能性があります。これは、物理メモリ内のライブラリのロードアドレスを表すためです。

上記のコマンドが結果を返さない場合は、実行されたバイナリがlibcを使用していないことを意味します。したがって、その場合、トリクルを帯域幅シェーパーとして使用することはできません。

LinuxでTrickleを使用する方法を学ぶ

トリクルの最も基本的な使用法は、スタンドアロンモードです。このアプローチを使用すると、トリクルを使用して、特定のアプリケーションのダウンロード速度とアップロード速度を明示的に定義します。前に説明したように、簡潔にするために、ダウンロードとアップロードのテストには同じアプリケーションを使用します。

トリクルを使用した場合と使用しない場合のダウンロード速度とアップロード速度を比較します。 -d オプションは、ダウンロード速度をKB/sで示し、 -u フラグは、アップロード速度を同じ単位で制限するようにトリクルに指示します。さらに、 -s フラグを使用します。これは、トリクルをスタンドアロンモードで実行する必要があることを指定します。

スタンドアロンモードでトリクルを実行するための基本的な構文は次のとおりです。

# trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]

次の例を自分で実行するには、クライアントマシン(私の場合は192.168.0.17)にtrickleとncftpがインストールされていることを確認してください。

以下のテストには、自由に配布できるLinux Fundamentals PDFファイル(ここから入手可能)を使用しています。

次のコマンドを使用して、最初にこのファイルを現在の作業ディレクトリにダウンロードできます。

# wget http://linux-training.be/files/books/LinuxFun.pdf 

トリクルなしでFTPサーバーにファイルをアップロードするための構文は次のとおりです。

# ncftpput -u username -p password 192.168.0.15  /remote_directory local-filename 

ここで、/ remote_directoryはユーザー名のホームを基準にしたアップロードディレクトリのパスであり、local-filenameは現在の作業ディレクトリ内のファイルです。

具体的には、トリクルなしで、52.02 MB/sのピークアップロード速度が得られ(これは実際の平均アップロード速度ではなく、瞬時の開始ピークであることに注意してください)、ファイルはほぼ瞬時にアップロードされます。

# ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf 

出力:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

トリクルでは、アップロードの転送速度を5 KB/sに制限します。ファイルを2回目にアップロードする前に、宛先ディレクトリからファイルを削除する必要があります。それ以外の場合、ncftpは、宛先ディレクトリのファイルがアップロードしようとしているものと同じであり、転送を実行しないことを通知します。

# rm /absolute/path/to/destination/directory/LinuxFun.pdf 

それで:

# trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf 

出力:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

上記の例では、平均アップロード速度が約5 KB/sに低下したことがわかります。

まず、元のソースディレクトリからPDFを削除することを忘れないでください。

# rm /absolute/path/to/source/directory/LinuxFun.pdf 

次の場合は、リモートファイルがクライアントマシンの現在のディレクトリにダウンロードされることに注意してください。この事実は、FTPサーバーのIPアドレスの後に表示されるピリオド(‘。‘)で示されます。

トリクルなし:

# ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf 

出力:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

トリクルを使用して、ダウンロード速度を20 KB/sに制限します。

# trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf 

出力:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

監視あり[管理されていない]モードでのTrickleの実行

Trickleは、/ etc/trickled.confで定義された一連のパラメーターに従って、アンマネージモードで実行することもできます。このファイルは、トリクル(デーモン)の動作とトリクルの管理方法を定義します。

さらに、全体として、すべてのアプリケーションで使用されるグローバル設定を設定する場合は、トリクルコマンドを使用する必要があります。このコマンドはデーモンを実行し、毎回制限を指定しなくても、トリクルを実行するすべてのアプリケーションで共有されるダウンロードとアップロードの制限を定義できます。

たとえば、次のように実行します。

# trickled -d 50 -u 10

トリクルを介して実行されるアプリケーションのダウンロード速度とアップロード速度は、それぞれ30 KB/sと10KB/sに制限されます。

トリクルが実行されているかどうか、およびどのような引数で実行されているかをいつでも確認できることに注意してください。

# ps -ef | grep trickled | grep -v grep

出力:

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10

この例では、このリンクからダウンロードできる、自由に配布できる「彼は贈り物です」というビデオを使用します。

最初に、次のコマンドを使用して、このファイルを現在の作業ディレクトリにダウンロードします。

# wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 

まず、上記のコマンドを使用してトリクルデーモンを起動します。

# trickled -d 30 -u 10

トリクルなし:

# ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

出力:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   36.31 MB/s

トリクル付き:

# trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

出力:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB	9.51 kB/s

上記の出力からわかるように、アップロードの転送速度は約10 KB/sに低下しました。

例2と同様に、ファイルを現在の作業ディレクトリにダウンロードします。

トリクルなし:

# ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

出力:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB  108.34 MB/s

トリクル付き:

# trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

出力:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   29.28 kB/s

これは、以前に設定されたダウンロード制限(30 KB/s)に準拠しています。

注:デーモンが開始されると、トリクルを使用するアプリケーションごとに個別の制限を設定する必要がないことに注意してください。

前述したように、trickled.confを使用してトリクルの帯域幅シェーピングをさらにカスタマイズできます。このファイルの一般的なセクションは、次のもので構成されています。

[service]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>

どこ、

  1. [service] は、帯域幅の使用を形成する予定のアプリケーションの名前を示します。
  2. 優先度を使用すると、サービスの優先度を他のサービスよりも高く指定できるため、単一のアプリケーションがデーモンが管理しているすべての帯域幅を占有することはありません。数値が小さいほど、[サービス]に割り当てられる帯域幅が多くなります。
  3. 時間の平滑化[秒単位]:細流化された時間間隔で、アプリケーションがデータを転送および/または受信できるようにすることを定義します。小さい値(0.1〜1秒の範囲)は対話型アプリケーションに理想的であり、より継続的な(スムーズな)セッションになりますが、少し大きい値(1〜10秒)はバルク転送が必要なアプリケーションに適しています。値が指定されていない場合は、デフォルト(5秒)が使用されます。
  4. 長さの平滑化[KB単位]:考え方は時間の平滑化と同じですが、I/O操作の長さに基づいています。値が指定されていない場合は、デフォルト(10 KB)が使用されます。

平滑化値を変更すると、固定値ではなく間隔内の転送速度を使用して、[service]によって指定されたアプリケーションに変換されます。残念ながら、この間隔の下限と上限は主に各特定のケースシナリオに依存するため、計算式はありません。

以下は、CentOS 7クライアント(192.168.0.17)のtrickled.confサンプルファイルです。

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3

この設定を使用すると、trickledはFTP転送よりもSSH接続を優先します。 SSHなどの対話型プロセスはより小さな時間平滑化値を使用しますが、バルクデータ転送(FTP)を実行するサービスはより大きな値を使用することに注意してください。

平滑化値は、前の例のダウンロード速度とアップロード速度の原因であり、トリクルデーモンによって指定された正確な値とは一致しませんが、それに近い間隔で移動します。

[あなたも好きかもしれません:OpenSSHサーバーを保護して強化する方法]

結論

この記事では、FedoraベースのディストリビューションとDebian/派生物でトリクルを使用してアプリケーションが使用する帯域幅を制限する方法を探りました。その他の考えられる使用例には、次のものが含まれますが、これらに限定されません。

  • たとえば、トレントクライアントなどのシステムユーティリティを介してダウンロード速度を制限します。
  • パッケージ管理システムである\\"aptitude\\"(Debianベースのシステムの場合)を介してシステムを更新できる速度を制限します。
  • サーバーがプロキシまたはファイアウォールの背後にある場合(またはプロキシまたはファイアウォール自体である場合)、トリクルを使用して、ダウンロードとアップロードの両方、またはクライアントまたは外部との通信速度に制限を設定できます。
  • >

質問やコメントは大歓迎です。以下のフォームを使用して、遠慮なく送信してください。