25.6. tc-c-ctinfo 유틸리티를 사용하여 패킷의 속도 제한 구성
속도 제한을 사용하여 네트워크 트래픽을 제한하고 네트워크의 리소스 소진을 방지할 수 있습니다. 속도 제한을 사용하면 특정 시간 프레임에서 반복적인 패킷 요청을 제한하여 서버의 부하를 줄일 수도 있습니다. 또한 tc-ctinfo
유틸리티를 사용하여 커널에서 트래픽 제어를 구성하여 대역폭 속도를 관리할 수 있습니다.
connection tracking 항목은 Netfilter
마크 및 연결 정보를 저장합니다. 라우터가 방화벽에서 패킷을 전달하면 라우터는 패킷에서 연결 추적 항목을 제거하거나 수정합니다. 연결 추적 정보(ctinfo
) 모듈은 연결 추적 마크에서 다양한 필드로 데이터를 검색합니다. 이 커널 모듈은 소켓 버퍼(skb
) 마크 메타데이터 필드에 복사하여 Netfilter
표시를 유지합니다.
사전 요구 사항
-
iperf3
유틸리티는 서버 및 클라이언트에 설치됩니다.
프로세스
서버에서 다음 단계를 수행합니다.
네트워크 인터페이스에 가상 링크를 추가합니다.
ip link add name ifb4eth0 numtxqueues 48 numrxqueues 48 type ifb
# ip link add name ifb4eth0 numtxqueues 48 numrxqueues 48 type ifb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령에는 다음 매개변수가 있습니다.
name ifb4eth0
- 새 가상 장치 인터페이스를 설정합니다.
numtxqueues 48
- 전송 대기열 수를 설정합니다.
numrxqueues 48
- 수신 대기열 수를 설정합니다.
유형 ifb
- 새 장치의 유형을 설정합니다.
인터페이스 상태를 변경합니다.
ip link set dev ifb4eth0 up
# ip link set dev ifb4eth0 up
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 물리적 네트워크 인터페이스에
qdisc
속성을 추가하고 들어오는 트래픽에 적용합니다.tc qdisc add dev enp1s0 handle ffff: ingress
# tc qdisc add dev enp1s0 handle ffff: ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow handle ffff:
옵션에서handle
매개 변수는 주요 숫자ffff:
를 기본 값으로enp1s0
물리적 네트워크 인터페이스에서 클래스별qdisc
에 할당합니다. 여기서qdisc
는 트래픽 제어를 분석하기 위한 큐링 주체 매개 변수입니다.ip
프로토콜의 물리적 인터페이스에 필터를 추가하여 패킷을 분류합니다.tc filter add dev enp1s0 parent ffff: protocol ip u32 match u32 0 0 action ctinfo cpmark 100 action mirred egress redirect dev ifb4eth0
# tc filter add dev enp1s0 parent ffff: protocol ip u32 match u32 0 0 action ctinfo cpmark 100 action mirred egress redirect dev ifb4eth0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령에는 다음 속성이 있습니다.
상위 ffff:
-
주요 번호
ffff:
를 상위qdisc
로 설정합니다. u32 match u32 0
-
u32
패턴의 IP 헤더와 일치
하도록u32
필터를 설정합니다. 첫 번째0
은 IP 헤더의 두 번째 바이트를 나타내며 다른0
은 일치하는 비트를 알리는 마스크 일치를 나타냅니다. 작업 ctinfo
- 연결 추적 마크에서 다양한 필드로 데이터를 검색하는 작업을 설정합니다.
cpmark 100
-
연결 추적 마크(connmark)
100
을 패킷 IP 헤더 필드에 복사합니다. 작업 mirred egress redirect dev ifb4eth0
-
수신된 패킷을
ifb4eth0
대상 인터페이스로 리디렉션하려면작업을
mirred
로 설정합니다.
인터페이스에 클래스
qdisc
를 추가합니다.tc qdisc add dev ifb4eth0 root handle 1: htb default 1000
# tc qdisc add dev ifb4eth0 root handle 1: htb default 1000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령은 메이저 번호
1
을 rootqdisc
로 설정하고 마이너 ID1000
의 클래스qdisc
와 함께htb
계층 구조 토큰 버킷을 사용합니다.인터페이스의 트래픽을 2Mbit/s의 상한이 있는 1Mbit/s로 제한합니다.
tc class add dev ifb4eth0 parent 1:1 classid 1:100 htb ceil 2mbit rate 1mbit prio 100
# tc class add dev ifb4eth0 parent 1:1 classid 1:100 htb ceil 2mbit rate 1mbit prio 100
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령에는 다음 매개변수가 있습니다.
상위 1:1
-
classid
를1
로 설정하고root
를1
로 설정합니다. classID 1:100
-
classid
를1:100
으로 설정합니다. 여기서1
은 상위qdisc
의 수이고100
은 상위qdisc
의 클래스 수입니다. HTB ceil 2mbit
-
htb
classfulqdisc
는ceil
rate limit으로2 Mbit/s
의 상한 대역폭을 허용합니다.
클래스리스
qdisc
의 Stochastic Fairness Queuing (sfq
)를 적용하여 큐 알고리즘 전달을 줄이기 위해60
초의 시간 간격과 상호 작용합니다.tc qdisc add dev ifb4eth0 parent 1:100 sfq perturb 60
# tc qdisc add dev ifb4eth0 parent 1:100 sfq perturb 60
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터페이스에 방화벽 표시(
fw
) 필터를 추가합니다.tc filter add dev ifb4eth0 parent 1:0 protocol ip prio 100 handle 100 fw classid 1:100
# tc filter add dev ifb4eth0 parent 1:0 protocol ip prio 100 handle 100 fw classid 1:100
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 연결 마크(
CONNMARK
)에서 패킷 메타 표시를 복원합니다.nft add rule ip mangle PREROUTING counter meta mark set ct mark
# nft add rule ip mangle PREROUTING counter meta mark set ct mark
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령에서
nft
유틸리티에는 패킷 마크를CONNMARK
로 교체하기 전에 들어오는 패킷을 변경하는PREROUTING
체인 규칙 사양이 있는mangle
테이블이 있습니다.nft
테이블 및 체인이 없는 경우 테이블을 생성하고 체인 규칙을 추가합니다.nft add table ip mangle nft add chain ip mangle PREROUTING {type filter hook prerouting priority mangle \;}
# nft add table ip mangle # nft add chain ip mangle PREROUTING {type filter hook prerouting priority mangle \;}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 지정된 대상 주소
192.0.2.3
에서 수신되는tcp
패킷에 메타 표시를 설정합니다.nft add rule ip mangle PREROUTING ip daddr 192.0.2.3 counter meta mark set 0x64
# nft add rule ip mangle PREROUTING ip daddr 192.0.2.3 counter meta mark set 0x64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 패킷 표시를 연결 마크에 저장합니다.
nft add rule ip mangle PREROUTING counter ct mark set mark
# nft add rule ip mangle PREROUTING counter ct mark set mark
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -s
매개변수와 서버를 사용하여 시스템에서iperf3
유틸리티를 서버로 실행한 다음 클라이언트 연결의 응답을 기다립니다.iperf3 -s
# iperf3 -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
클라이언트에서
iperf3
을 클라이언트로 실행하고 주기적인 HTTP 요청 응답 타임스탬프를 위해 IP 주소192.0.2.3
에서 수신 대기하는 서버에 연결합니다.iperf3 -c 192.0.2.3 | tee rate
# iperf3 -c 192.0.2.3 | tee rate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 192.0.2.3
은 서버의 IP 주소이며192.0.2.4
는 클라이언트의 IP 주소입니다.Ctrl+C 를 눌러 서버에서
iperf3
유틸리티를 종료합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ctrl+C:을 눌러 클라이언트에서
iperf3
유틸리티를 종료합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
인터페이스에서
htb
및sfq
클래스의 패킷 수에 대한 통계를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow mirred
및ctinfo
작업에 대한 패킷 수의 통계를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow htb
rate-limiter 및 해당 구성의 통계를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow