Делаем из роутера минисервер. Часть 2 — пишем скрипты

Настройка хранения статистики трафика

В прошивке Tomato есть очень хороший мониторинг интернет трафика. Но по-умолчанию вся статистика хранится в оперативной памяти роутера, вследствие при перезагрузках и выключениях статистика обнуляется.

Исправим это положение. А также напишем вспомогательные скрипты для упрощения жизни 🙂

Создадим новый каталог «rstats» в /opt

mkdir /opt/rstats

В админке идём в раздел «Administration — Bandwidth Monitoring» и прописываем свой путь для сохранения истории: /opt/rstats/

Интервал сохранения для флэшки ставим 3-4 часа, для жёсткого диска — 1 час. Также ставим галочку «Create New File (Reset Data)» — («создать новый файл»). Это нужно для того, чтобы система создала необходимые файлы в новом указанном месте.

После этого вся статистика будет надёжно храниться на флэшке/HDD.

В прошивке Tomato индикатор состояния роутера (второй слева) горит непрерывно после его загрузки, поэтому невозможно понять, работает ли роутер, или он завис. Исправим это положение. Для этого напишем небольшой скрипт и сохраним его под именем /opt/etc/scripts/blinkled.sh

#!/bin/sh

sleep 30
while true ; do
led diag off
sleep 1
led diag on
sleep 1
done

Также напишем скрипт, для уведомления об активности WAN-соединения с помощью индикатора «принтер».
/opt/etc/scripts/wlan_mon.sh

#!/bin/sh

# при передаче данных, индикатор будет загораться
while sleep 1; do
XFER=`ifconfig ppp0|grep bytes`
if [ "$XFER" != "$PXFER" ]; then
led mystery on
PXFER=$XFER
else
led mystery off
fi
done

/opt/etc/init.d/rc.firewall

#!/bin/sh
# Здесь помещаем все команды, которые необходимо выполнить перед стартом фаервола

logger "Script started /opt/etc/init.d/rc.firewall"

# Раскомментируйте следующую строчку, если у вас возникают проблемы с автоматическим установлением соединения с Интернетом.
# service wan restart

# Запускаем SNMP демон
if [ -x /opt/etc/init.d/S70net-snmp ]; then
logger "Starting SNMP daemon"
/opt/etc/init.d/S70net-snmp
fi

# Запускаем веб-сервер
if [ -x /opt/etc/init.d/S80thttpd ]; then
logger "Starting thttpd server"
/opt/etc/init.d/S80thttpd
fi

/opt/etc/scripts/wlan_mon.sh &

/opt/etc/init.d/rc.shutdown

#!/bin/sh
# Если вы хотите выполнить какие-либо команды перед завершением работы роутера, то поместите их в этом скрипте
logger "Script started /opt/etc/init.d/rc.shutdown"

/opt/etc/init.d/rc.wanup

#!/bin/sh
# Если вы хотите выполнить какие-либо команды при установлении WAN соединения, то поместите их в этом скрипте
logger "Script started /opt/etc/init.d/rc.wanup"

Теперь открываем в админке раздел «Administration — Scripts» и пишем следующие скрипты:

Firewall

logger "Firewall"
mkdir -p /tmp/mnt/sd
mount /dev/discs/disc0/part1 /tmp/mnt/sd

# Монтируем /opt . Выбор делается в зависимости от подключенного накопителя.
# system - имя раздела на жестком диске, sd - на флэшке.
# параметр noatime при монтировании флэшнакопителя позволяет снизить его износ.
if [ ! -d /opt/bin ]; then
if [ -d /mnt/system ]; then
mount -t ext3 -obind /mnt/system/Optware /opt
else
mount -o noatime -t ext3 -obind /mnt/sd/Optware /opt
fi
if [ -x /opt/etc/init.d/rc.firewall ]; then
/opt/etc/init.d/rc.firewall
fi
fi

Init

logger "Init"
# запускаем индикатор активности роутера
/usr/sbin/blinkled.sh &

Shutdown

logger "Shutdown"
led mystery off
killall blinkled.sh
if [ -x /opt/etc/init.d/rc.shutdown ]; then
/opt/etc/init.d/rc.shutdown
fi
umount /opt
umount /mnt/sd

WAN up

logger "WAN Up"
if [ -x /opt/etc/init.d/rc.wanup ]; then
/opt/etc/init.d/rc.wanup
fi

Итог

В результате мы получили минисервер, на котором можно разместить небольшой HTML-сайт, качать торренты, хранить файлы и многое другое.
В дальнейших статьях я расскажу как подружить роутер с Freeduino.