контролировать пропускную способность интерфейса с помощью tc или iptables

Я хотел бы записать предупреждающее сообщение в файл /var/log/messages если входная или выходная полоса пропускания на интерфейсе eth0 превышает определенный порог. Я мог бы сделать это с помощью скрипта, который считывает значение файла /sys/devices/virtual/net/eth0/statistics/[rt]x_bytes , сохраняет значение, засыпает секунду, снова считывает те же самые значения, вычисляет количество бит в секунду, сравнивает результат с определенным порогом и, если выше, записывает сообщение в файл /var/log/messages . Однако есть ли более разумный метод? Я имею в виду, например, с iptables или tc которые могли бы создать сообщение журнала в случае превышения определенного порога пропускной способности на интерфейсе?

3 Solutions collect form web for “контролировать пропускную способность интерфейса с помощью tc или iptables”

Вы можете использовать vnstat с параметром -tr, затем сравнить с порогом и журналом записи, если они превышены.

 -tr time Calculate how much traffic goes through the selected interface during the giventimeseconds. Thetimewill be 5 seconds if a number parameter isn't included. 

Я наконец нашел решение, которое я искал. rateest имеет модуль rateest который делает именно это. Например:

 # collects all ingress traffic to RATEEST target iptables -A INPUT -j RATEEST --rateest-name RE1 --rateest-interval 500.0ms --rateest-ewmalog 1s # creates a log entry(jumps to LOG target) if rate is greater than 10Mbps iptables -A INPUT -m rateest --rateest RE1 --rateest-gt --rateest-bps 10Mbps -j LOG --log-prefix "Ingress bandwidth >10Mbps " 
 netstat -i 

Просто для начала. Посмотрите на заголовки для RX-OK и TX-OK. Задайте это с помощью cron, и все.

 #!/bin/bash # Mar 2015 # Get bytes transmitted and received on eth0 and log msg. echo " " bytein=`netstat -i | grep eth0 | awk '{print $4 }'` byteout=`netstat -i | grep eth0 | awk '{print $8 }'` total=$((${bytein} + ${byteout})) # echo "IN=$bytein, OUT=$byteout, TOTAL=$total" max=1000000 outfile=/var/log/messages msg="Bandwidth has exceeded $max bytes" if [ $total -gt $max ]; then echo "$msg" >> $outfile echo $msg fi 

Какая большая картина ОП? Я мог бы сделать это для разных пользователей, чтобы ограничить их пропускную способность, почему это для интерфейса eth0?

  • Как установить общий сетевой предел для каждого клиента + приоритет для подтверждений TCP
  • QoS с TC qdiscs: возможно ли, чтобы ВСЕ исходящие соединения имели ограничение скорости x на уникальный IP?
  • shorewall - проблемы с формированием трафика
  • удалить tc-фильтр (Traffic Shaping)
  • Ограничить скорость интернета без tc
  • TCP-потоки, сосуществующие с UDP при использовании SFQ (стохастическая честная очередь)
  • Размер ковша в tbf
  • Есть несколько qdisc для каждого устройства, которое первым обрабатывает?
  • tc class rate 50Kbps! = 50K / s в wget?
  • tc cbq не работает (ограничение трафика)
  • Как устройство IMQ расположено в потоке пакетов ядра Linux
  • Фильтровать пакет UDP в tc-фильтре
  • Linux и Unix - лучшая ОС в мире.