본문 바로가기
I T/Network

HTB (htb) 트래픽 제한걸기 (네트워크 셰이핑 방법)

by 루솨 2015. 8. 29.

네트워크 셰이핑 방법

 

CBQ (Class based Queueing)

 

네트워크 트래픽을 서비스 타입(FTP, SMTP or HTTP)이나 목적지에 따라 클래스들로 나눔
각각의 클래스들은 FIFO 기반의 큐에 할당되며 각각의 큐들에게는 클래스에 정의된 특정한 대역폭이 할당
CBQ와 HTB의 가장 큰 차이는 ceiling 기능의 유무의 차이
CBQ는 대역폭이 여유가 생기더라도 해당 클래스에 정해놓은 대역폭 이상은 절대 사용할 수 없다

 

 

SFQ (Stochastic Fairness Queueing)

 

지정한 큐로 들어오는 모든 트래픽에 대하여 큰 queue를 사용하여 공평하게 다룬다. 트래픽이 full일 경우에 적용

 

 

HTB(Hierarchical Token Bucket) 개념

 

사용자로 하여금 절대적인 대역폭을 조절하고 여분의 대역폭에 대해 정해진 비율로 계산하여 우선순위에 따라

 

각 클래스에 할당하는 시스템

대역폭을 각각의 queue 에 나눠주는 역활 패킷이 아닌 바이트수로 제한하기 때문에 interactive 보장 못함

 

qdisc : 각각 우선순위 마다 부여되는 queue 

root qdisc : 하나이상의 클래스를 가질수 있음

클래스는 rate 와 ceil 두개의 인수를 설정됨

rate : 클래스를 위한 대역폭을 보장하는 값

ceil (ceiling) : 클래스가 최대로 사용할수 있는 대역폭 의미

rate 와 ceil는 최상위에서는 같은 의미

자식클래스는 클래스 밑으로 생성가능하며 부모클래스로 부터 가능한 대역폭 할당 받음

자식클래스 부터는 rate와 ceil 은 같은 의미가 아니며 특정한 대역폭을 예약하고
가능한 대역폭의 분배율을 계산해서 클래스에 허용하게 됨

 

 

설치

 

리눅스 커널에 확인

 

make menuconfig
-*- Networking support ---> 
Networking options ---> 
[*] QoS and/or fair queueing --->

 

 

vim .config

 

# Queueing/Scheduling
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_PRIO=m
# CONFIG_NET_SCH_MULTIQ is not set
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_INGRESS=m

 

 

다운로드 및 설치

 

htb 실행 스크립트
wget 
http://sourceforge.net/projects/htbinit/files/HTB.init/0.8.5/htb.init-v0.8.5/download

mv htb.init-v0.8.5 /sbin/htb.init
cd /sbin
chmod +x htb.init (실행권한 추가)

설정 디렉토리 및 캐쉬디렉토리 생성 ( 그냥 만들기만 하면 파일은 htb 실행시 자동 생성)
mkdir -p /etc/sysconfig/htb 
mkdir -p /var/cache/

htb package 다운
wget http://luxik.cdi.cz/~devik/qos/htb/v3/htb3.6-020525.tgz

tar xvfz htb3.6-020525.tgz

압출풀고 /home/htb 나 기타 위치시키고 싶은데 복사

 

 

설정파일 생성

 

기본적으로 포트별로 제어할때는 밑과 같은 옵션으로 하면 될듯 함

eth0 파일은 기본적으로 디폴트로 아래와 같이 만들어주고 본격적은 설정은 eth0-xx 부터 적용되는 부분임

etho, eth1, eth2 파일이름으로 인터페이스를 구분하며 

[root@mojily sbin]# cat /etc/sysconfig/htb/eth0

DEFAULT=30
R2Q=100

[root@mojily sbin]# cat /etc/sysconfig/htb/eth0-2.http

RATE=50Mbit
CEIL=50Mbit 
BURST=5k (패킷수)
LEAF=sfq
RULE=*:80, (포트)

[root@mojily sbin]# cat /etc/sysconfig/htb/eth0-2.smtp

RATE=1Mbit
CEIL=1Mbit
BURST=1k
LEAF=sfq
RULE=*:25,

개인적으로 테스트 할려는 네트워크는 아래와 같이 셋팅되어 있음

[root@Garbage-ELCAP htb]# cat eth1
DEFAULT=30
R2Q=100

[root@Garbage-ELCAP htb]# cat eth1-9
RATE=8Mbit
CEIL=8Mbit
BURST=10k
#LEAF=sfq
RULE=2xx.xxx.6.9,

 

 

파일 생성 개념

 

eth0-2
eth0-2:3 
eth0-2:3:4
eth1-2.root
디바이스 eth0 에 대한 root 클래스 id 2
디바이스 eth0 에 대한 부모클래스 id 2, 자식클래스 id 3
디바이스 eth0 에 대한 부모클래스 id 3, 자식클래스 id 4
디바이스 eth1에 대한 root 클래스 id 2

 

 

실행

 

./htb.init [stop | start | stats ...]

항상 stop 및 start 시 캐시에 저장된 rm /var/cache/htb.init 삭제후 해야 적용이 잘됨

 

TEST는 실제로 FTP를 이용해서 테스트 해보면 뚜렷하게 잘 나타난다

 

3메가 제한시 실제 FTP 업로드시  MRTG 그래프

주의사항>
Queueing 는 데이터를 보내는 방법만을 정의한다. 
즉 속도제어는 인터페이스에서 나가는 트래픽만 가능하다.
들어오는 Incomming 트래픽을 제어하기 위해서는 브리지로 묶여있는 장치명을 통해 IN / OUT 으로 분리해서 제어하면 된다.
eth1 / eth2 에 대해서 다운로드 트래픽을 제어하게 되면 실직적으로 시스템에서는 업/다운 트래픽을 제어하는것처럼 나타난다.

 

 [polldaddy rating="7739789"]