LINUX.ORG.RU
ФорумAdmin

Не настраивается tc для шейпинга

 ,


0

2

Привет! К сожалению, у меня очень мало опыта системного администрирования и настройки linux систем, сильно не ругайте, я только учусь ;)

Как выглядит сеть: 172.21.0.1 - сам сервер с шейпером. 172.21.0.2 - второй сервер, хранящий файлы, которые запрашивают клиенты по http. 172.21.0.6, 172.21.0.7 - два клиента.

Пытаюсь настроить шейпинг трафика wg-клиентов:

tc qdisc add dev wg0 parent root handle 1:0 hfsc default 10

# Root-класс
tc class add dev wg0 parent 1: classid 1:1 hfsc sc rate 1gbit ul rate 1gbit

# Зарезервированный трафик
# Гарантированная полоса в 500 Mbit/s и максимум 1 Gbit/s
tc class add dev wg0 parent 1:1 classid 1:10 hfsc sc rate 500mbit ul rate 1gbit

# Клиентский трафик
# Гарантированная полоса в 500 Mbit/s и максимум 1 Gbit/s
tc class add dev wg0 parent 1:1 classid 1:20 hfsc sc rate 500mbit ul rate 1gbit

# Шейпинг индивидуального клиента 6
tc class add dev wg0 parent 1:20 classid 1:3006 hfsc sc rate 100kbit ul rate 100kbit
tc filter add dev wg0 protocol ip parent 1:0 prio 1 u32 match ip dst 172.21.0.6/32 flowid 1:3006

# Шейпинг индивидуального клиента 7
tc class add dev wg0 parent 1:20 classid 1:3007 hfsc sc rate 100kbit ul rate 100kbit
tc filter add dev wg0 protocol ip parent 1:0 prio 1 u32 match ip dst 172.21.0.7/32 flowid 1:3007

tc -pretty filter show dev wg0

filter parent 1: protocol ip pref 2 u32 chain 0
filter parent 1: protocol ip pref 2 u32 chain 0 fh 800: ht divisor 1
filter parent 1: protocol ip pref 2 u32 chain 0 fh 800::801 order 2049 key ht 800 bkt 0 *flowid 1:3006 not_in_hw
  match IP dst 172.21.0.6/32
filter parent 1: protocol ip pref 2 u32 chain 0 fh 800::802 order 2050 key ht 800 bkt 0 *flowid 1:3007 not_in_hw
  match IP dst 172.21.0.7/32

tc -graph class show dev wg0

+---(1:) hfsc
     +---(1:1) hfsc sc m1 0bit d 0us m2 1Gbit ul m1 0bit d 0us m2 1Gbit
          +---(1:10) hfsc sc m1 0bit d 0us m2 500Mbit ul m1 0bit d 0us m2 1Gbit
          +---(1:20) hfsc sc m1 0bit d 0us m2 500Mbit ul m1 0bit d 0us m2 1Gbit
               +---(1:3007) hfsc sc m1 0bit d 0us m2 100Kbit ul m1 0bit d 0us m2 100Kbit
               +---(1:3006) hfsc sc m1 0bit d 0us m2 100Kbit ul m1 0bit d 0us m2 100Kbit

          |
     |    |

При попытке скачать файл сразу с двух клиентов, 100kbit получает только один, второй 0kbit :(

Что я делаю не так? Заранее спасибо! Сервер: Debian 12 запущенный в KVM.

p.s.: ограничение 100kbit/s только чтобы проверять работоспособность шейпера.

буду рад, если подскажете, как в целом переписать конфигурацию. возможно, я в корне все делаю не так и можно оптимальнее (например задать один класс для всей подсети, чтобы все wg клиенты разом получили ограничение на индивидуальные 100кбит).



Последнее исправление: herenickname (всего исправлений: 7)

возможно, я в корне все делаю не так и можно оптимальнее

Закинь директиву limit_rate в свой nginx. Описанную тобой задачу это решит на 100%, быстрее и понятнее.

Для более общего случая лучше возьми nftables policer, если у тебя там всё же не только:

запрашивают клиенты по http

BOOBLIK ★★★★
()

Я бы для начала попробовал на htb и если там нет проблем, то попробовал бы перейти на hfsc. На 10-100 классов у htb нет проблем с производительностью.

Смотри на счётчики в классах/очередях/фильтрах. Возможно там будет подсказка.

vel ★★★★★
()