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
반응형