IT/LINUX

[Linux] 네트워크 전송량 제한 하기 tc 명령어 사용

양눈 2024. 11. 12. 16:11
반응형

리눅스에서 OS상 네트워크 전송량 제한을 위해서 리눅스의 tc 명령어를 사용하면 네트워크 전송량 제한을 걸 수 있습니다. 
tc 명령으로도 TBF (Token Bucket Filter) 방식과, HTB (Hierarchical Token Bucket) 방식이 존재 하는데 간단한 트래픽 제한 테스트를 하려면 TBF방식으로 진행 하면 간단하게 테스트 해볼 수 있습니다 
방법은 아래와 같이 진행 하면 됩니다. 

1. TC명령어 설치

# tc명령어 설치 확인
tc --version

# 없을 경우 iproute 설치
- RHEL 8 또는 9:
sudo dnf install iproute -y

- RHEL 7
sudo yum install iproute -y

2. 기본 명령어 구조 

tc qdisc add dev <인터페이스 이름> root tbf rate <속도> burst <크기> latency <지연>

3. TBF를 사용한 아웃바운드 트래픽 제한

설정 예제

  • 네트워크 인터페이스: eth0
  • 제한 속도: 1Mbps
  • 버스트 크기: 32KB
  • 대기 시간: 100ms
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 100ms

# 설정 확인
tc qdisc show dev eth0
tc class show dev eth0
tc filter show dev eth0

# 설정 삭제
sudo tc qdisc del dev eth0 root

옵션 설명

  • rate: 트래픽 제한 속도 (예: 1mbit, 500kbit 등).
  • burst: 순간적으로 허용되는 최대 데이터 크기 (일반적으로 rate의 10-20배 설정).
  • latency: 큐에 있는 패킷이 전송 대기 중인 최대 시간.

# tc 명령어는 기본적으로 아웃바운드(Outbound) 트래픽 제어를 위해 설계되었습니다. 하지만 인바운드(Inbound) 트래픽을 제한하려면 약간의 우회 방법이 필요합니다. ifb(Intermediate Functional Block) 가상 네트워크 장치를 사용하여 인바운드 트래픽을 제어할 수 있습니다.

4. Inbound 트래픽 제한 설정 절차

1. ifb 모듈 로드
sudo modprobe ifb
lsmod | grep ifb

2. ifb 장치 활성화
sudo ip link add ifb0 type ifb
sudo ip link set ifb0 up

3. 인바운드 트래픽을 ifb로 리다이렉트
# tc 명령어를 사용하여 트래픽을 ifb 장치로 리다이렉트합니다. 아래는 네트워크 인터페이스(eth0)로 들어오는 트래픽을 ifb0로 리다이렉트하는 명령어입니다.
sudo tc qdisc add dev eth0 ingress
sudo tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

4. ifb에서 인바운드 트래픽 제한
# 이제 ifb0에서 아웃바운드 트래픽을 제어하듯이 설정하면 인바운드 트래픽 제한이 적용됩니다.
(예: ifb0에 1Mbps 속도 제한 설정)

sudo tc qdisc add dev ifb0 root tbf rate 1mbit burst 32kbit latency 100ms

5. 설정 확인
# 현재 qdisc 확인:
tc qdisc show dev eth0
tc qdisc show dev ifb0

# 필터 설정 확인:
tc filter show dev eth0

6. 설정 삭제
sudo tc qdisc del dev eth0 ingress
sudo tc qdisc del dev ifb0 root
sudo ip link del ifb0
반응형