Ilya Evseev Опубликовано 3 октября, 2011 · Жалоба Имеется Линукс-шлюз, требуется настроить на нём шейпер для клиента (каждый клиент в отдельном vlan'e): #!/bin/sh # This is /etc/network/ifup-post.sh script. CLIENT_IFACE="$1" # possible values: ethN, vlanN, ... CLIENT_ID="${CLIENT_IFACE#vlan}" # ..convert "vlan15" to "15" CLIENT_IP="10.20.30.$CLIENT_ID" PUBLIC_IFACE="eth0" DEFAULT_HTBCLASS=99 SPEED_IN="2000kbit" # ..actually taken from billing SPEED_OUT="5000kbit" if [ "$1" = "$PUBLIC_IFACE" ]; then echo "Pre-setup $PUBLIC_IFACE..." tc qdisc add dev $PUBLIC_IFACE root handle 1: htb default $DEFAULT_HTBCLASS tc class add dev $PUBLIC_IFACE parent 1: classid 1:1 htb rate 100mbit exit elif [ "$CLIENT_ID" = "$CLIENT_IFACE" ]; then exit # ..not client vlan fi # Configure client speed.. iptables -t mangle -A PREROUTING -s $CLIENT_IP -j MARK --set-mark $CLIENT_ID iptables -t mangle -A PREROUTING -d $CLIENT_IP -j MARK --set-mark $CLIENT_ID iptables -t mangle -A POSTROUTING -o $PUBLIC_IFACE -m mark --mark $CLIENT_ID -j CLASSIFY --set-class 1:$CLIENT_ID iptables -t mangle -A POSTROUTING -o $CLIENT_IFACE -m mark --mark $CLIENT_ID -j CLASSIFY --set-class $CLIENT_ID:$CLIENT_ID tc qdisc add dev $CLIENT_IFACE root handle $CLIENT_ID: htb default $DEFAULT_HTBCLASS tc class add dev $CLIENT_IFACE classid $CLIENT_ID:$CLIENT_ID htb rate $SPEED_IN tc class add dev $PUBLIC_IFACE parent 1:1 classid 1:$CLIENT_ID htb rate $SPEED_OUT Скорость проверяю через два wget: один на клиенте качает с внешнего узла, другой на внешнем узле качает с клиента. Когда запущен один wget - скорость правильная, и входящая, и исходящая. Когда работают оба сразу - исходящая правильная, входящая проседает в несколько раз. Выглядит так, будто классы на клиентском интерфейсе неявно вкладываются в дерево классов на внешнем. Вопрос: как ограничить скорости независимо друг от друга? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 3 октября, 2011 · Жалоба Когда работают оба сразу - исходящая правильная, входящая проседает в несколько раз. Выглядит так, будто классы на клиентском интерфейсе неявно вкладываются в дерево классов на внешнем. Если забит исходящий канал - входящий тоже будет проседать. ACK-и там всякие и прочая, знаете. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 3 октября, 2011 · Жалоба Если забит исходящий канал - входящий тоже будет проседать. ACK-и там всякие и прочая, знаете. Исходящий канал ничем не занят. Как ни странно, но вроде бы помогло: tc qdisc add dev $CLIENT_IFACE parent $CLIENT_ID:$CLIENT_ID sfq tc qdisc add dev $PUBLIC_IFACE parent 1:$CLIENT_ID sfq Непонятно, почему при дефолтном pfifo падение скорости было таким непропорциональным и неизменным. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Abram Опубликовано 3 октября, 2011 · Жалоба Если забит исходящий канал - входящий тоже будет проседать. ACK-и там всякие и прочая, знаете. Исходящий канал ничем не занят. Как нет? Ваши же слова: "Когда работают оба сразу - исходящая правильная, входящая проседает в несколько раз." Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...