главное не забывать, что все что для твоего интерфейса IN то для юзера это OUT и соответственно наоборот, все что для твоего ифейса OUT это IN для юзера
соответственно составляя трубы и сами правила нужно не забывать об этом
иначе или не будет работать вовсе или работать не правильно.
Значения IN и OUT - это значение хождения трафика относительно операционной системы.
Трубы нужно конфигурить соответственно смотря на траф юзера. Если относительно ОС это исход, а для юзера вход, то труба "ipfw pipe 1 config mask dst-ip", если вход (ОС) и исход юзера - "ipfw pipe 2 config mask src-ip 0xffffffff".
ожно сделать и немного по другому, т.е. правила для исходящего шейпа (для юзера) вешать на интерфейс за котором он и находится, а правила входящего шейпа (для юзера) вешать на ифейсе в сторону прова.
в этом случае работа шейпера будет 100% верной, только не забывай что оба правила, в этом случае, будут иметь IN direction для обоих ифейсов (и юзерского и прововского)
А как быть если провоских интерфейсов несколько ?
Разносить на несколько серверов ?