사용자 당 대역폭을 어떻게 제한 할 수 있습니까?


32

요약하면 : 나는 웹 GUI로 토런트 클라이언트를 실행하는 몇 명의 친구가있는 전용 서버가 있습니다. 각 사용자는 서버에서 사용자 이름으로 클라이언트를 실행하므로 다운로드는 사용자 디렉토리로 이동하며 자신의 파일에만 액세스 할 수 있습니다.

사용자별로 월별 대역폭을 모니터링하고 제한하려면 어떻게해야합니까?

iptables를 사용하는 방법이 있어야한다고 생각했습니다. 그리고 사용자 X의 모든 프로세스에서 사용하는 대역폭을 모니터링하여 월 단위로 허용되는 YGB 이상의 대역폭을 사용하면 토런트 클라이언트에 대한 네트워킹이 차단되고 클라이언트가 완전히 종료되었다는 메시지가 표시됩니다. 나는 또한 오징어에 대해 생각했지만 여러 토런트 클라이언트를 사용할 때 많은 서버 리소스를 사용할 수 있다고 생각합니다 ...

데비안 레니를 사용하고 있습니다.

어떻게 해야할지 모르겠습니다 ...

이것이 가능할까요? 이것에 대한 부분적인 해결책조차도 감사합니다 ...


우리는 당신이 사용하는 OS를 알 수 있습니다.
Sam Cogan

데비안. 편집에 추가되었습니다.
loco41211

그냥 궁금해서 TorrentFlux를 사용하고 있습니까?
cop1152

내가 시도하는 것 중 하나입니다. 현재 우리는 디스크 공간 제한 (솔루션이 있음)과 대역폭 제한이있는 시드 박스에 사용할 수있는 모든 것을 찾고 있습니다. 몇 Mbs 만 사용자별로 이것을 똑같이 제한하고 싶습니다.
loco41211

답변:


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

데비안 설치 쇼어 월을 사용한다면 iptables를 엉망으로 만들지 않고도 트래픽을 쉽게 만들 수 있습니다. / etc / shorewall 디렉토리에서 tcdevices, tcclasses 및 tcrules를 편집하기 만하면됩니다. 자세한 정보는 여기 : http://www.shorewall.net/traffic_shaping.htm

다른 사람이 제안했듯이, 사용자 이름으로 패킷을 표시하는 것이 아마도 포트보다 낫습니다. 그러면 iptables를 업데이트하지 않고도 포트를 변경할 수 있습니다.


한도 설정에 대한 예를 들어 줄 수 있습니까? 100GB의 수신 및 발신을 말합니까?
loco41211

토렌트는 다른 포트를 사용할 수 있으며 실제로는 문제를 해결하지 못합니다.
cstamas

솔루션으로 그 두 가지 옵션을 제거합니다 ...
loco41211 08/09/09

cstamas : 비트 토렌트 클라이언트를 사용할 때 하나의 포트 또는 여러 개의 포트를 설정할 수 있습니다. 다음을 참조하십시오 : dessent.net/btfaq/#ports
chris.moos

13

--quotaiptables 에서 옵션을 사용하여 전송 제한을 바이트 단위로 설정할 수 있습니다. 각각 다른 사용자 이름으로 여러 개의 토렌트 클라이언트를 실행하고 있으므로--uid-owner katriel이 제안한 것처럼 옵션 옵션을 있습니다.

이러한 방식으로 사용자의 다운로드 속도를 제한하지 않고 기간 (일 / 주 / 월 / 등) 당 전송 제한을 적용 할 수 있습니다.

패킷 카운터를 지속적으로 유지하려면 서버를 다시 부팅하거나 방화벽 규칙을 플러시해야 할 경우 복원 할 수 있도록 주기적으로 (예 : 크론 작업을 통해) 저장해야합니다.


작동하는 것처럼 들립니다. 따라서 iptables의 도움으로 설정된 사용자에게 들어오고 나가는 모든 트래픽을 표시 할 수 있습니다. 정해진 기간 동안 제한 할 수 있습니다. 그래도 전체 설정이 어떻게 될지 여전히 해결할 수 없습니다. 수신 및 발신 트래픽을 표시하는 데 사용할 수있는 정확한 명령은 다음과 같습니다. "iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100"? 아니면 어떻게해야합니까? 예를 들어, 사용자 이름 bob에 월별 제한 100GB 인 id 56을 표시하는 것은 무엇입니까? 월간 cron 작업이 트래픽 카운터를 재설정 할 것 같습니까?
loco41211

12

위의 질문에 추가하십시오.

iptables를 사용자 일치와 함께 사용하여 패킷에 다음과 같이 색상을 지정할 수 있습니다.

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

그런 다음 'tc'를 사용하여 사용자별로 제한하십시오.


사용자 이름 blablaX에 대해 tc를 사용하여 100GB의 제한을 설정하는 방법에 대한 예를 들어 주시겠습니까? 그리고 한 달 후에 한계를 재설정하는 데 사용해야하는 코드의 예는 무엇입니까? 감사합니다
loco41211

이것은 사용자를 시간 제한 할당량이 아닌 영구적으로 제한 할 것입니다.
katriel

8

한 달에 각 사용자에게 허용 할 월간 트래픽 양에 따라 다른 사용자가 제안한 도구 중 일부를 사용하여 대역폭 제한을 설정할 수 있습니다.

예를 들어 최대 다운로드 제한을 250GB / month 로 설정한다고 가정 해 보겠습니다 . 이제 이것을 한 달의 시간 수 (~ 730)로 나눈 다음 3600으로 나누면 최대 다운로드 속도를 얻습니다.이 예제에서는 100KB / s 정도 입니다.

그런 다음 최대 DL 속도를 100KB / s로 설정하면 250GB / 월 다운로드 제한이 자동으로 적용됩니다 (물론 트래픽 셰이퍼가 제대로 작동한다고 가정). 사용자가 100KB / s보다 빠른 속도로 다운로드 할 수없는 경우 한 달에 250GB 이상을 다운로드 할 수 없습니다.

다운로드 속도를 제한하기 위해 tc언급 된 다른 도구 나 다른 도구를 사용할 수 있습니다 . 직접 처리하지 않으려면 cbq.init를tc 사용하면 매우 간단하게 설정할 수 있습니다. 이 스크립트는 Debian Etch에서shaper 패키지 했지만 그 이후에 제거 된 것으로 보입니다. 어쨌든 SourceForge에서 다운로드 할 수있는 간단한 스크립트 일뿐입니다.

물론이 방법은 귀하의 경우에 유용하지 않을 수 있습니다 (예를 들어, 사용자가 최대 속도로 다운로드 할 수 있지만 여전히 제한적으로 시행하려는 경우 제안이 작동하지 않습니다).


우리가 씨앗 상자를 대신 사용하는 주된 이유는 PC에서 급류가 훨씬 빠르기 때문에 슬프게도 문제가 해결되지 않습니다 ... 어쨌든
loco41211

7

나는 이것이 오래된 게시물이라는 것을 알고 있지만 오늘도 답을 찾고 그것을 우연히 발견했으며 결국에는 나에게 완벽하게 어울리는 무언가를 모았습니다. 25Mbs 다운 링크와 2.5Mbs 업 링크가 있으며이 링크를 공유하는 4 명의 사람과 5 개의 서버가 있습니다. 서버의 경우 업 링크 대역이 중요하지만 다운 링크는 4 명에게 유용하므로 아무도이를 호기하지 않습니다.

centos 6.3을 라우터로 실행하고 있지만이 명령은 모든 Linux에서 작동해야합니다. eth0은 제공자에 대한 나의 업 링크입니다. eth1은 24 포트 스위치 및 wifi 액세스 포인트를 통한 나의 LAN입니다. 다운로드를 25Mbs (약 500KB / sec) 중 5 개로 다운로드를 제한합니다. 업로드를 200Kbit (약 25KB / sec)로 제한합니다

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있습니다. 단일 프로세스의 대역폭을 제한하는 데 사용할 수 있습니다. 사용법은 매우 간단합니다. fe는 aptitude에서 사용하는 대역폭을 제한하기 위해 다음 trickle -d 10 aptitude install wesnoth과 같이 쓸 수 있습니다.


본인 이외의 사용자는 셸 액세스 권한이 없습니다. 또한 대역폭 제한으로 매월 또는 일정 기간을 의미합니다. 가능할까요?
loco41211

1
아니요, 물방울은 초당 속도를 제한합니다.
liori

2

useripacct 커널 패치를 살펴보십시오 (실제로 오랜 역사가 있습니다 ). 이전 버전문서에서 할당량 적용 및 모니터링 기능을 제공하는 것으로 보이며 자체 정책 스크립트를 제공 할 수도 있습니다.

useripacct 제작자가 원하는 동작을 얻기 위해 커널 패치를 사용해야한다면 기본적으로 사용 가능한 간단한 방법이 없을 것 같습니다. 유일한 대안은 여기에서 대부분의 다른 답변 (실제로 찾고있는 것은 아님)에서 제안한대로 대역폭 제한 (TC 또는 물방울과 같은 것)이거나 각 사용자에 대한 VM 만들기 (가벼운 OS 가상화 사용) OpenVZ 와 같은 ) 및 VM 당 계정 트래픽 ( vnstat 와 같은 것으로 상당히 쉽게 평가됩니다 ). 그래도 과도한 것으로 보입니다 (갑자기 하나의 시스템 대신 관리 할 VM이 많이 있습니다).


서버 리소스를 소모 할 수 있으므로 약간 과잉입니다 ..하지만 아이디어에 감사드립니다!
loco41211
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.