Ограничить пропускную способность сети для IP
Для приложения управления трафиком я должен ограничить пропускную способность для IP-адресов клиентов, для каждого из которых существуют разные ограничения
как можно использовать tc-tbf для конкретного IP-адреса
или есть другое решение?
4 ответа
Через несколько дней я делаю это
я использую его для openvpn over freeradius
tc qdisc del dev br0 root
tc qdisc add dev br0 root handle 1: htb
tc class add dev br0 parent 1: classid 1:1 htb rate "LineBandwidth"kbit
tc class add dev br0 parent 1:1 classid 1:10 htb rate "MinUserBand"kbit ceil "MaxUserBand"kbit prio 2 #----- bandwidth and classid
tc filter add dev br0 parent 1:0 prio 2 protocol ip handle 10 fw flowid 1:10 #----- MarkID1 and classId
iptables -t mangle -A POSTROUTING -d "RealUserIP" -j MARK --set-mark 10 #----- RealIP and markID1
tc qdisc add dev br0 ingress
tc filter add dev br0 parent ffff: protocol ip handle 50 fw police rate "MinUserBand"kbit mtu 12k burst 10k drop #----- BandWidth and MarkID2
iptables -t mangle -A PREROUTING -s "RealUserIP" -j MARK --set-mark 50 #----- RealIP and MarkID2
Для того, чтобы ограничить пропускную способность отдельных IP-адресов, я был TC с HTB. Вот несколько полезных ссылок:
- Домашняя страница: http://luxik.cdi.cz/~devik/qos/htb/
- Руководство пользователя: http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
- tcng - это относительно простой способ описания структур управления трафиком: http://www.faqs.org/docs/Linux-HOWTO/Traffic-Control-tcng-HTB-HOWTO.html
В качестве простого примера, для ограничения пропускной способности отдельных IP-адресов, хранящихся в переменной оболочки CLIENT_IP, с такими ограничениями:
- имя устройства = eth0
- общая пропускная способность, доступная / разрешенная для устройства = 1000 кбит / с до 1500 кбит / с
- пропускная способность по умолчанию (для клиентов, которые не попадают в наши фильтры) = 1 кбит / с до 2 кбит / с
- пропускная способность CLIENT_IP = 100 кбит / с
- Максимальная пропускная способность CLIENT_IP (при наличии большей пропускной способности) = 200 кбит / с
Команды ниже будет достаточно:
tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000kbps ceil 1500kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1kbps ceil 2kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 100kbps ceil 200kbps
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src ${CLIENT_IP} flowid 1:11
Полу-связанный с вашим вопросом, ограничение пропускной способности клиента, вероятно, не лучшее решение, так как оно должно быть для каждого клиента. Возможно, вы захотите указать максимальную пропускную способность, которую может использовать любой отдельный клиент, а не указывать по IP-адресу.
Ваша лучшая ставка будет QoS, с указанием различных приоритетов для услуг в зависимости от типа трафика.
Насколько я знаю, вы не можете использовать tc-tbf для определенного IP-адреса.
Если вы просто пытаетесь улучшить производительность, посмотрите эту статью.
http://lists.debian.org/debian-firewall/2005/07/msg00088.html
В этой статье описывается, как вы можете использовать iptables для ограничения скорости новых подключений: http://www.debian-administration.org/articles/187
Вы можете отказаться от проверки состояния для NEW и вместо этого ограничить ее по IP-адресу источника.