Для этого используется IFB (если я правильно понял Вашу задачу). Я здесь уже писал. А imq, по моему опыту, добавляет латентность и вообще дергано управляет полосой.
Это я уж не знаю, как Вы классифицируете (и кстати, как заворачиваете) - Вы нас не посвящали. Я просто предложил Вам решение проблемы, на которую Вы указали:
На uplink интерфейсе с NAT уже не видно серых адресов клиентов
Тогда да, только разными метками, по другому никак. Но ты можешь в принципе вообще обойтись без меток - просто указывая IP - так как он на второй итерации шейпинга будет доступен(где шейпить - до/после NAT - это уже решать тебе).
Метки нужны если как-то IP можно сгруппировать для упрощения шейпинга.
Да, если нужно сделать что-то посложнее шейпинга ТОЛЬКО транзитного трафика на роутере - приходится дичайше страдать и читать килотонны манулов. Sad but true.
IMQ сам пользовал, когда он еще нормально накладывался на выходившие ядра, потом там был в выпуске большой перерыв и я шейпер дома переточил на ifb. Заняло у меня это дохрена времени, если честно
Дома не шейпю (зачем? пров дает свыше 100, никто из домашних не забивает), а на работе все еще шейпю с помощью imq. Без проблем накладывал на свежие ядра. Работает как часы. latency может и добавляет, но видимо мало, потому как я не замечаю. В ручную правила давно не пишу для tc. Давно уже есть скрипт, аналогично htb.init который гененирует мне все что нужно. И шейпинг при это динамический, а не прибитый гвоздями к каждому ip устройства. Так что поэтому приходиться сидеть на iptables. В прочем пока не вижу смысла на новое и переходить. Работает? Работает.