Ограничить пропускную способность сети для 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. Вот несколько полезных ссылок:

В качестве простого примера, для ограничения пропускной способности отдельных 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://man.he.net/man8/tc-tbf

Если вы просто пытаетесь улучшить производительность, посмотрите эту статью.

http://lists.debian.org/debian-firewall/2005/07/msg00088.html

В этой статье описывается, как вы можете использовать iptables для ограничения скорости новых подключений: http://www.debian-administration.org/articles/187

Вы можете отказаться от проверки состояния для NEW и вместо этого ограничить ее по IP-адресу источника.

Другие вопросы по тегам