ユーザーごとの帯域幅を制限するにはどうすればよいですか?


32

要約すると、私は、Web GUIでトレントクライアントを実行している数人の友人がいる専用サーバーを持っています。各ユーザーは、サーバー上のユーザー名でクライアントを実行しているため、ダウンロードはユーザーディレクトリに移動し、自分のファイルなどにのみアクセスできます。

ユーザーごとに月ごとの帯域幅を監視および制限するにはどうすればよいですか?

多分iptablesを使用する方法があるに違いないと思っていました。また、ユーザーXのすべてのプロセスで使用される帯域幅を監視することにより、Y GBの月間許可帯域幅を超えて使用すると、トレントクライアントのネットワークがブロックされるか、クライアントが完全に停止するというメッセージが表示されます。私もイカについて考えましたが、複数のトレントクライアントを使用しているため、これは多くのサーバーリソースを使用する可能性があります...

私はdebian lennyを使用しています。

私はこれを行う方法がわかりません...

これはまったく可能でしょうか?私はこれに対する部分的な解決策にも感謝しています...


どのOSを使用しているかを知ることができます。
サムコーガン

debian。編集で追加されました。
loco41211 09

好奇心が強い、TorrentFluxを使用していますか?
cop1152 09

それは私がやろうとしていることの一つです。現時点では、ディスクスペース制限(解決策がある)と帯域幅制限を備えたシードボックスに使用する可能性のあるものを探しています。...友人の中には月に約1 TBを使用している人もいます。わずか数MBs。これをユーザーごとに均等に制限したいと思います。
loco41211 09

回答:


13

「tc」トラフィックシェーピングコマンドを使用できます。

友人のそれぞれに、BitTorrentで使用する異なるポートを提供します。各ポートのiptablesでTCPパケットをマークします。

iptables -t mangle -A FORWARD -p tcp --sport 6881 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -p tcp --dport 6881 -j MARK --set-mark 100

次に、tcコマンドを使用して、各ユーザーの最大帯域幅とレートを設定します。

月末に、「tc」コマンドを削除および追加して、カウントをリセットできます。

次の方法で各ユーザーの使用状況を監視できます。

tc filter show dev ethX

Debian install shorewallを使用している場合、iptablesをいじらずにトラフィックシェーピングを簡単に実行できます。/ etc / shorewallディレクトリでtcdevices、tcclasses、およびtcrulesを編集するだけです。詳細はこちら:http : //www.shorewall.net/traffic_shaping.htm

他の人が示唆したように、ユーザー名によるパケットのマーキングは、おそらくポートによるよりも優れているため、iptablesを更新せずにポートを変更できます。


制限を設定する例はありますか?100GBの着信と発信を一緒に言いますか?
loco41211 09

torrentは他のポートを使用することができる(実際に使用されている)ため、この例では実際に問題を解決しません。
cstamas

...解決策として、これらの2つのオプションが削除されている
loco41211

cstamas:bittorrentクライアントを使用する場合、1つまたは複数のポートを設定できます。これを参照してください。dessent.net/btfaq/#ports
chris.moos

13

--quotaiptables のオプションを使用してみてください。これにより、転送制限をバイト単位で設定できます。それぞれが異なるユーザー名で複数のトレントクライアントを実行しているため--uid-owner、katrielが示唆するように、それをオプションと組み合わせることができます。

この方法では、ユーザーのダウンロード速度を制限することなく、期間(日/週/月/など)ごとに転送制限を適用できます。

パケットカウンターを永続的にするには、サーバーを再起動するかファイアウォールルールをフラッシュする必要がある場合に復元できるように、定期的に(たとえば、cronジョブを使用して)パケットカウンターを保存する必要があります。


うまくいくようですね。したがって、iptablesの助けを借りて、設定されたユーザーに出入りするすべてのトラフィックをマークできます。そして、私はそれを設定された期間制限することができます。しかし、セットアップ全体がどのようになるかはまだわかりません。着信トラフィックと発信トラフィックをマークするために使用できる正確なコマンドは次のとおりです。「iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100」それともどうすればいいですか?たとえば、コマンドは、ユーザー名bobをid 56で、毎月100GBの制限でマークするにはどうしますか?毎月のcronジョブはトラフィックカウンターをリセットすると思いますか?
loco41211 09

12

上記の質問に追加するだけです。

次のように、ユーザーマッチングでiptablesを使用してパケットに色を付けることができます。

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100

そして、「tc」を使用してユーザーごとに制限します。


tcを使用してユーザー名blablaXに100GBの制限を設定する方法の例を教えてください。また、1か月後に制限をリセットするために使用するコードの例は?ありがとう
loco41211 09

これは、永続的にではなく、定期クォータにユーザーを制限する
katriel

8

各ユーザーに毎月許可する月間トラフィック量に応じて、他のユーザーから提案されたいくつかのツールを使用して、それに応じて帯域幅制限を設定できます。

たとえば、最大ダウンロード制限を250 GB /月に設定するとします。これを1か月の時間数(〜730)で割った後、3600で割ると、最大ダウンロードレートが得られます。この例では、100 KB / s程度です。

次に、最大DLレートを100 KB / sに設定すると、250 GB /月のダウンロード制限が自動的に適用されます(もちろん、トラフィックシェーパーが正常に機能していると仮定します)。ユーザーが100 KB / sを超える速度でダウンロードできない場合、250 GB /月を超えるダウンロードはできません。

ダウンロード速度を制限するために、使用できるtcツールまたは言及されている他のツールを使用できます。に直接対処したくない場合は、設定が非常に簡単なcbq.initをtc使用できます。このスクリプトはDebian Etchにパッケージとして存在していましたが、その後削除されたようです。とにかく、それはSourceForgeからダウンロードできる単純なスクリプトです。shaper

もちろん、このアプローチはあなたの場合には役に立たないかもしれません(たとえば、ユーザーが利用可能な最大速度でダウンロードできるが、それでも月の制限を強制したい場合、私の提案は機能しません)。


それははるかに高速であるため、我々はとにかく感謝...ので、悲しいことに、この問題が解決しない、私たちのPC上だけではなく、急流seedboxを使用する主な理由
loco41211

7

私はこれが古い投稿であることを知っていますが、今日でも答えを探してつまずきました。25Mbsのダウンリンクと2.5Mbsのアップリンクがあり、このリンクを共有する4人と5台のサーバーがあります。サーバーでは、アップリンク帯域幅が重要ですが、ダウンリンクは4人で便利なので、誰もがすべてを使い切ることはありません。

CentOS 6.3をルーターとして実行していますが、これらのコマンドはどのLinuxでも動作するはずです。eth0はプロバイダーへのアップリンクですeth1は24ポートスイッチとwifiアクセスポイント経由のLANです。ダウンロードを25 Mbsのうち5つに制限します(約500 KB /秒)アップロードを200 Kbitに制限します(約25 KB /秒)

tc qdisc add dev eth0 root handle 1:0 htb default 99
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 200Kbit ceil 200Kbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10

tc qdisc add dev eth1 root handle 2:0 htb default 99
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 5Mbit ceil 5Mbit prio 2
tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10

ユーザーを制限するには、ユーザーごとに2つのiptables行を使用します

アップロードを制限するには:

iptables -t mangle -A POSTROUTING -o eth0 -p tcp -s 192.168.0.100 -j CLASSIFY --set-class 1:11

ダウンロードを制限する

iptables -t mangle -A POSTROUTING -o eth1 -p tcp -d 192.168.0.100 -j CLASSIFY --set-class 2:11

IPアドレスとethポートを変更して、制限する相手に一致するようにします


3

完全を期すために、と呼ばれるユーザースペースデーモンがありますtrickle。単一プロセスの帯域幅を制限するために使用できます。使用法は非常に簡単です:aptitudeが使用する帯域幅を制限するtrickle -d 10 aptitude install wesnothために、次のように書くことができます。


私以外のユーザーは誰もシェルにアクセスできません。また、帯域幅の制限がある場合、私は月ごと、または一定期間を意味します。それは可能でしょうか?
loco41211 09

1
いいえ、トリクルは1秒あたりの速度を制限します。
リオリ09

2

useripacctカーネルパッチを見てください(実際にはこれにはかなり長い歴史があります)。では、旧バージョンのためのドキュメント、また、モニタリングだけでなく、クォータの執行を提供するために、表示され、それはあなた自身のポリシーのスクリプトを提供することも可能です。

useripacctの作成者は、必要な動作を取得するためにカーネルパッチに頼らなければならなかったため、デフォルトでより簡単な方法を使用できる可能性は低いようです。唯一の選択肢は、他のほとんどの回答で提案されているように帯域幅制限(tcやトリクルなど)であるように見えます(ただし、実際に探しているものではありません)。OpenVZのようなもの)とVMごとのアカウンティングトラフィック(vnstatのようなものでかなり簡単に評価されます)。しかし、それはやり過ぎのようです(突然、1つのシステムの代わりに管理するVMがたくさんあります)。


サーバーリソースを浪費するので少しやり過ぎです。しかし、アイデアをありがとう!
loco41211 09
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.