선택한 답변이 잘못되었거나 불완전합니다. 나는 비슷한 문제에 직면했고, 선택된 대답은 도움이되었지만 충분하지 않았습니다.
먼저 다음 명령은 실제로 필요하지 않습니다.
tc qdisc del dev eth0 루트
루트 qdisc를 '삭제'하지만 즉시 pfifo_fast로 대체됩니다 (따라서 연결이 끊어지지 않습니다).
두 번째 명령 :
tc qdisc add dev eth0 루트 핸들 1 : prio
pfifo_fast qdisc를 prio로 대체합니다. 기본적으로 prio 대기열에는 하나의 클래스 (1 : 1, 1 : 2 및 1 : 3)로 각각 관리되는 3 개의 밴드 (0, 1, 2)가 있습니다.
패킷은 IP 패키지의 TOS 필드를 사용하여 해당 대역 중 하나로 전송됩니다. 이 구성은 다음을 실행할 때 표시됩니다.
tc qdisc ls
'priomap'값을 살펴 봅니다.
그런 다음 netem qdisc를 추가합니다.
tc qdisc add dev eth0 parent 1 : 1 handle 2 : netem delay 500ms
이 명령을 사용하면 1 : 1 대역으로가는 모든 트래픽이 지연됩니다 (필터가 설치 될 때까지).
그러나 두 가지 경고가 있습니다.
- 트래픽에 다른 TOS 값이있을 수 있으며 다른 대역으로 전송 될 수 있습니다.
- 트래픽이 다른 대역으로 전달되도록 prio qdisc를 구성 할 수 있습니다.
다음은 필터가 적용되지 않은 동안 netem의 영향을받지 않는 문제를 해결했습니다. 위의 단계 대신 다음과 같이했습니다.
tc qdisc add dev eth0 루트 핸들 1 : prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2
기본적으로 모든 트래픽이 1 : 3 대역으로 전송됩니다.
그런 다음 트래픽을 지연시키는 규칙을 추가했습니다.
tc qdisc add dev eth0 parent 1 : 1 handle 10 : netem delay 100ms 10ms
이렇게하면 대역 0에 qdisc가 생성되지만 모든 트래픽이 대역 3으로 이동하므로 나에게 영향을 미치지 않습니다.
그런 다음 필터를 추가했습니다.
tc 필터 추가 dev eth0 프로토콜 IP 상위 1 : 0 prio 1 u32 일치 ip dst 10.0.0.1/32 일치 ip dport 80 0xffff flowid 1 : 1
이제 필터를 사용하면 선택한 트래픽이 대역 0으로 리디렉션되므로 선택한 IP / 포트만 영향을받습니다.
다른 모든 트래픽은 계속 밴드 3으로 흐르기 때문에 영향을받지 않습니다.