Linuxのアプリケーションのネットワークトラフィック帯域幅を制御するトリクル

ネットワーク帯域幅を支配するアプリケーションがあなたのネットワーク帯域幅を支配したことはありますか?もしあなたがあなたのトラフィックをすべて消費するアプリケーションがある状況にいたことがあるなら、トリクル帯域幅整形アプリケーションの役割を高く評価するでしょう。

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

トリクルとは何ですか?

トリクルは、利用可能な帯域幅のほとんどまたはすべてを占有するのを防ぐために、アプリケーションのアップロードおよびダウンロード速度を管理するためのネットワーク帯域幅整形ツールです。

いくつかの単語で、トリクルは、ユーザーごとではなく、アプリケーションごとにネットワークトラフィックのレートを制御することを可能にします。これは、クライアントサーバー環境における帯域形成の古典的な例であり、おそらくより馴染みのあるセットアップです。

トリクルの動作方法は?

さらに、トリクルは、全体のシステムに対して設定された制限がある場合でも、優先アプリケーションが自動的により多くの帯域幅を取得できるように、アプリケーションごとに優先順位を定義するのに役立ちます。

このタスクを達成するために、トリクルは、TCP接続を使用してソケットから送信および受信されるデータの方法にトラフィック制限を設定します。データ転送速度以外に、トリクルは、その瞬間に形成されているプロセスの動作を何ら変更しません。

トリクルができないことは?

言うまでもなく、トリクルは、静的にリンクされたアプリケーションや、SUIDまたはSGIDビットが設定されたバイナリとは動作しません。なぜなら、トリクルは、動的リンクとロードを使用して、形成されたプロセスとその関連するネットワークソケットの間に自身を配置するため、これら2つのソフトウェアコンポーネントの間にプロキシとして機能するからです。

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

テスト環境

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

必要なトラフィックを生成するために、クライアント(CentOSサーバー – dev1: 192.168.0.17)でncftpputncftpget(両方のツールはncftpをインストールすることで利用可能)を使用し、デモンストレーション目的でサーバー(Debian – dev2: 192.168.0.15)でvsftpdを使用します。

同じ手順は、RHELベースおよびDebianベースのディストリビューションUbuntuLinux Mintなど)でも機能します。

Linuxにncftpとvsftpdをインストールする方法

1. 1RedHatベースのディストリビューションでは、Fedoraプロジェクトによってメンテナンスされている高品質の無料でオープンソースのソフトウェアのリポジトリであるEPELリポジトリを有効にする必要があります。

RHEL 9にEPELをインストールする:

sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

CentOS 9、AlmaLinux 9、Rocky Linux 9にEPELをインストールする:

sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release

RHEL 8にEPELをインストールする:

sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

CentOS 8、AlmaLinux 8、Rocky Linux 8にEPELをインストールする:

sudo dnf config-manager --set-enabled powertools
sudo dnf install epel-release

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

sudo dnf install ncftp         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt install ncftp         [On Debian, Ubuntu and Mint]

3。 別のサーバーでFTPサーバーを設定します。 FTPは基本的にセキュリティが不要なファイルのアップロードやダウンロードの場合に広く使用されていますが、それでも広く使用されています。

この記事では、トリックルの恩恵を説明するために使用していますし、クライアントでstdoutで転送速度を表示するためです。それが使用されるべきかどうかの議論は別の時に譲ります。

sudo dnf install vsftpd         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt install vsftpd         [On Debian, Ubuntu and Mint]

その後、FTPサーバー上の/etc/vsftpd/vsftpd.confファイルを以下のように編集します:

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

次の変更を行います:

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

その後、現在のセッションでvsftpdを起動し、将来のブート時に自動的に起動するようにします:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd
sudo systemctl status vsftpd

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

配置するために、次のURLをブラウザに入力してホームディレクトリに移動します。ログインウィンドウが表示され、FTPサーバーに有効なユーザーアカウントとパスワードを求められます。

ftp://192.168.0.15

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

FTP Directory Tree

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

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

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

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

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

特定のアプリケーションでこのツールを使用できるかどうかを確認するために、よく知られたlddユーティリティを使用できます。ここでlddは、リストダイナミック依存関係を意味します。

具体的には、ソケットを介した通信に関与するシステムコールを定義するライブラリであるglibc(GNU Cライブラリ)が、任意のプログラムのダイナミック依存関係のリストに存在するかどうかを確認します。

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

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

たとえば、

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

出力は次のとおりです。

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

出力の括弧内の文字列は、ライブラリの物理メモリ内のロードアドレスを表しており、システムによって異なる場合があり、同じコマンドの後続の実行間でも変化する可能性があります。

上記のコマンドが結果を返さない場合、それはバイナリに対して実行されたものがlibcを使用しておらず、その場合にはトリックルを帯域幅整形に使用できないことを意味します。

Linuxでトリックルを使用する方法を学ぶ

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

スタンドアロンモードでトリックルを実行する

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

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

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

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

例1:2.8MBのファイルをtrickleを使用してアップロードする

次のテストには、無料で配布可能なLinux FundamentalsのPDFファイル(こちらから入手可能)を使用します。

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

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

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

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

/remote_directoryは、ユーザーのホームから相対的なアップロードディレクトリのパスであり、local-filenameは現在の作業ディレクトリ内のファイルです。

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

sudo 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に低下したことがわかります。

例2:同じ2.8MBファイルをトリックル有無でダウンロード

まず、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

トリックルを監督なし[非管理]モードで実行

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

さらに、すべてのアプリケーションで全体的に使用されるグローバル設定を設定したい場合は、trickledコマンドを使用する必要があります。このコマンドはデーモンを実行し、トリックル経由で実行されるすべてのアプリケーションによって共有されるダウンロードおよびアップロードの制限を定義できるため、各回の制限を指定する必要はありません。

たとえば、実行すると:

trickled -d 50 -u 10

これにより、トリックル経由で実行されるすべてのアプリケーションのダウンロードおよびアップロード速度がそれぞれ30 KB / sおよび10 KB / sに制限されます。

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

ps -ef | grep trickled | grep -v grep

出力:

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

例3:トリックルを使用してFTPサーバーに19MBのMP4ファイルをアップロードする

この例では、彼が贈り物ですという無料で配布可能なビデオを、こちらのリンクからダウンロードできます。

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

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

まず、上記に示したコマンドでtrickledデーモンを開始します。

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に低下しました。

例4:トリックルを使用して同じビデオをダウンロードする

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

trickleなしで:

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を使用して:

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)に従っています。

注意: デーモンが起動した後、trickleを使用するそれぞれのアプリケーションに個別の制限を設定する必要はありません。

以前触れたように、trickleの帯域幅整形をさらにカスタマイズすることができます。trickled.confでは、このファイルの典型的なセクションは次のようになります:

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

ここで、

  • [service]は、帯域幅使用量を整形するアプリケーションの名前を示します。
  • Priorityは、他のサービスに対してより高い優先度を持つサービスを指定するために使用され、単一のアプリケーションがデーモンが管理するすべての帯域幅を占有することを防ぎます。数字が低いほど、[service]に割り当てられる帯域幅が多くなります。
  • Time-Smoothing [秒単位]: trickledがアプリケーションがデータを転送および/または受信するためにどのような時間間隔で試みるかを定義します。小さな値(0.1 – 1秒の範囲内のもの)はインタラクティブなアプリケーションに適しており、より連続的(滑らか)なセッションにつながりますが、わずかに大きな値(1 – 10秒)は、バルク転送が必要なアプリケーションに適しています。値が指定されていない場合、デフォルト(5秒)が使用されます。
  • 長さスムーシング [KB単位]: これは、時間スムーシングと同じアイデアに基づいていますが、I/O操作の長さに基づいています。値が指定されていない場合、デフォルト(10 KB)が使用されます。

スムーシング値を変更すると、[サービス]で指定されたアプリケーションが一定値ではなく、間隔内の転送速度を使用するようになります。残念ながら、この間隔の下限と上限を計算する公式はありません。これは、主に特定のケースシナリオに依存します。

以下は、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など)を行うサービスはより大きな値を使用することに注意してください。

スムーシング値は、前の例のダウンロードおよびアップロード速度がtrickledデーモンで指定された正確な値に一致しないことを担っていますが、その近くの間隔内で動作しています。

[お勧め: OpenSSHサーバーをセキュリティ保護およびハードンする方法 ]

結論

この記事では、FedoraベースのディストリビューションおよびDebian /派生物でアプリケーションが使用する帯域幅をtrickleを使用して制限する方法を探りました。他の可能性のある使用例には、次のようなものがあります:

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

質問やコメントは大歓迎です。下のフォームを使用して、お気軽にお問い合わせください。

Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/