고유 IP에 대한 새로운 아웃바운드 연결에 속도가 제한되도록 VPS에서 QoS를 설정하려고 합니다.
예를 들어:
- 내 VPS에서 데이터를 요청하는 공용 IP가 5개 있습니다.
- VPS가 각 IP로 데이터를 다시 보낼 때 각 IP는 10mbps의 전용 아웃바운드 대역폭 속도를 얻습니다.
- 클라이언트가 10mbps를 초과하면 패킷을 삭제하지 말고 대신 대기열에 추가하세요.
전체 eth0 포트의 아웃바운드 속도를 10mbps로 제한하고 싶지 않고 각 개별 공용 IP가 10mbps를 얻도록 하고 싶습니다.
VPS에 연결하는 다양한 공용 IP가 있는 경우가 많기 때문에 각 IP에 대해 각 대역폭 규칙을 개별적으로 작성해야 하는 정적 규칙을 작성할 필요가 없습니다.
TC qdisc를 통해 이를 달성할 수 있습니까?
필터 등을 사용할 수 있는 HTB qdics의 일반적인 설정을 살펴보았습니다. 하지만 내가 원하는 것을 설명하는 예제나 문서를 볼 수 없는 것 같습니다.
우분투 서버 14.04를 사용하고 있습니다.
고쳐 쓰다
TC qdisc의 작동 방식을 더 잘 이해한 후 다음을 수행했습니다.
기본 설정에 사용한 명령은 패킷이 삭제되지 않고 대신 토큰 버킷으로 이동하므로 상당히 원활하게 작동하는 것 같습니다(참고: 고도로 최적화되지는 않았지만 정상적으로 작동하는 것 같습니다).
tc qdisc add dev eth0 root handle 1: htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit
tc class add dev eth0 parent 1: classid 1:2 htb rate 20mbit
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 1.2.3.4 flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 2.3.4.5 flowid 1:2
답변1
QDISC가 이 작업을 직접 수행할 수 있는지는 모르겠습니다. CBQ/HTB/HFSC를 사용하면 제한된 수의 10mbps 클래스를 생성한 다음 IP 해시를 필터링할 수 있습니다. 분명히 발생할 해시 충돌을 제외하고는 작동합니다.
운이 좋으면 소스(예: 웹 서버)에서 직접 이러한 제한을 설정할 수 있습니다.
그러나 이것이 실제로 속도 제한이 아니라 클라이언트 간의 공정성을 유지하기 위한 것이라면 SFQ/ESFQ를 사용하는 것이 더 나을 것입니다. 제한적이지는 않지만 균형을 제공합니다.