Как я могу отключить интерфейс, когда объем переданных данных достигнет предопределенного предела?

Я использую Linux-сервер в качестве маршрутизатора между двумя его сетевыми интерфейсами для маршрутизации локального трафика в и из Интернета. У рассматриваемого интернет-соединения есть определенный объем данных, и превышение этого значения обходится дорого.

В идеале я бы хотел, чтобы Linux-система отслеживала объем данных, передаваемых через интерфейс с выходом в Интернет (как сумму полученных и переданных данных), и один раз отключал интерфейс. этот предел превышен. Мне не удалось найти для этого готового инструмента. Как мне лучше всего это сделать?

1
задан 18 November 2015 в 13:30
1 ответ

Один из вариантов - использовать задание root cron , которое запускается каждую минуту со следующим сценарием (с выводом, добавленным в файл журнала):

#!/bin/bash
USAGE=$(awk '/wlan0/ {print $2+$10}' /proc/net/dev)
USAGEMIB=$(echo "$USAGE" | awk '{printf "%0.1f", $1 / 1024 / 1024}')
LIMIT=500
ABOVELIMIT=$(echo "$USAGEMIB" "$LIMIT"| awk '$1 > $2 {print "1"}')
echo -e $(date)"\t"$USAGE"\t"$USAGEMIB" MiB"
if [ "$ABOVELIMIT" == "1" ]
  then
    echo "Limit reached."
    /sbin/ifdown wlan0
fi

Суммирует полученные и передал байты в соответствующую запись в / proc / net / dev , распечатывает их как байты и MiB в стандартный вывод (перенаправляется в журнал), и если использование превышает предел, жестко закодированный в файл рядом с верх сбивает соединение. Он не особенно надежен (в частности, в нем нет обработки ошибок), но он должен служить поставленной цели.

2
ответ дан 3 December 2019 в 20:45

Теги

Похожие вопросы