리눅스에서 트래픽 제어하기
리눅스 커널을 이용한 트래픽 Bandwidth를 설정하는 방법이다.
여기서는 Outbound 트래픽에 대해서만 다룬다. Inbound 는 iptable 과 함께 사용하여 구성한다.
커널에서 아래와 같이 활성화 되어있어야 한다.
-*- Networking support --->
Networking options --->
[*] QoS and/or fair queueing --->

.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
1. Download htb.init 스크립트 http://sourceforge.net/projects/htbinit/
2 .실행권한
[root@mojily sbin]# mv htb.init-v0.8.5 htb.init
[root@mojily sbin]# chmod +x /sbin/htb.init
3. htb.init 설정 디렉토리와 cache 디렉토리 생성
[root@mojily sbin]# mkdir -p /etc/sysconfig/htb
[root@mojily sbin]# mkdir -p /var/cache/
4. 트래픽제어 파일 설정 (/etc/sysconfig/htb)파일명은 아래와같은 형식으로 저장한다.
<인터페이스 이름>-<clsid>(:<clsid>).<라벨설명>
clsid 는 클래스 ID로 16진수이며 2부터 FFFF까지 범위를 가진다.
[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,
※ 자세한 옵션은 아래 DOC 문서참조
http://chonnom.com/bbs/board.php?bo_table=B16&wr_id=39여준다.
5. 스크립트 실행
[root@mojily sbin]# ./htb.init start
[root@mojily sbin]# watch -d ./htb.init stats
※ Usage: htb.init {start|compile|stop|restart|timecheck|list|stats}
start : 스크립트를 실행
compile : 실행은 하지않고 TC를 이용 htb.init 스크립트가 설정파일대로 만들어낸 구문을 보여주며 스크립트가 실제로 어떻게 작동되는지 알 수 있는 분석에 편리한 명령
stop : 스크립트 실행을 멈춤
restart : 스크립트 재시작
timecheck : TIME 명령을 줬을때 실행
list : 실행했을때 디바이스에 대해 적용된 각종 클래스, 룰을 보여줌
stats : list와 비슷하게 현재 상태를 나타내며 총 트래픽양과 얼마나 필터를 통과했는지 등에 대해보여줌
<주의사항>
Queueing 는 데이터를 보내는 방법만을 정의한다.
즉 속도제어는 인터페이스에서 나가는 트래픽만 가능하다.
들어오는 Incomming 트래픽을 제어하기 위해서는 브리지로 묶여있는 장치명을 통해 IN / OUT 으로 분리해서 제어하면 된다.
eth1 / eth2 에 대해서 다운로드 트래픽을 제어하게 되면 실직적으로 시스템에서는 업/다운 트래픽을 제어하는것처럼 나타난다.