Картина такая --
есть 2 канала связи - лимит и безлимит. С лимитом все в полном порядке, а вот с безлимитом - полный бардак...* :-\
Упущу подробное описание сети - перейду к делу
За всей сетью "следит" самописный биллинг, который при переключении режима тарификации управляет "списком безлимитчиков".
Сеть разделена на 4 подсети --
Код: Выделить всё
10.52.0.1/24
10.52.2.1/24
10.52.4.1/24
10.52.6.1/24На eth0 висит лимитный канал
На eth1 - "служебная" связть роутера и сервера (для биллинга)
eth3 - резервный интерфейс
eth4 - безлимитный канал
Т.е. пользователь, зайдя в личный кабинет выбирает себе тарифный план - Базовый (Лимитный) или Безлимит на n-дней.
На сервере создан каталог, который при загруске всей системы монтируется на роутер (nfs) и исходя из "данных" этого каталога работает с клиентами.
Там же есть файл - tclist* (сделано на будующее и знал, что это надо будет делать), в который заносятся данные о пользователе и его выбранной скорости.
Данные храняться в таком виде --
Код:
Код: Выделить всё
# tail -10 /remote/tclist
10.52.4.18:256
10.52.4.2:256
10.52.4.3:256
10.52.4.6:256
10.52.4.9:256
10.52.6.2:256
10.52.6.3:256
10.52.6.4:256
10.52.6.5:256В данном примере скорость приведена, как пример, т.к. в данное время я еще не "обучил" свой роутер работать с этими данными. В моем случае скорость пока упущена.
Так же есть такое дело --
Код: Выделить всё
# cat /remote/tclist.filter
10.52.0.17:unlimited_256_30
10.52.0.18:unlimited_256_60
10.52.0.20:unlimited_256_60
10.52.0.22:unlimited_256_30
10.52.0.24:unlimited_256_30
10.52.0.26:unlimited_256_30
10.52.0.27:unlimited_256_30
.............
10.52.4.18:unlimited_256_15
10.52.4.2:unlimited_256_60
10.52.4.3:unlimited_256_30
10.52.4.6:unlimited_256_30
10.52.4.9:unlimited_256_60
10.52.6.2:unlimited_256_30
10.52.6.3:unlimited_256_60
10.52.6.4:unlimited_256_30
10.52.6.5:unlimited_256_30
10.52.6.6:unlimited_256_60По окончанию периода - переводит безлимитчика на лимит. Но все это - лирика
На роутере, соответсвенно, поднят NAT
Роутер работает по следующей цепочке --
-- хост просит запрос в "Мир" -- роутер проверяет, нет ли информации об этом хосте в tclist -- если его нет, пропускает через лимитный канал;
-- хост просит запрос в "Мир" -- роутер проверяет, нет ли информации об этом хосте в tclist -- если он находит о нем информацию -- ставит метку на трафик этого хоста и пропускает его через iptables по следующему правилу --
Код: Выделить всё
GW_UNLIM=***.***.132.162
iptables -t mangle -N unlimit
for x in $MYNETS
do
* iptables -t mangle -A unlimit -d $x -j RETURN
done
iptables -t mangle -A unlimit -j MARK --set-mark 0x48
ip rule ls | sed -n -e 's/all/0\/0/' -e 's/^48:/ip rule del/p' | sh
ip route del table 48
ip rule add fwmark 0x48 pref 48 table 48
ip route add table 48 default via $GW_UNLIM
TCLIST="/remote/tclist"
if [ -f $TCLIST ]; then
* * for x in `cat $TCLIST`; do
* * * * IPADDR=`echo $x|cut -d: -f1`
* * * * iptables -t mangle -I PREROUTING -s $IPADDR -j unlimit
* * done
fi
trueИ при этом учесть, что в локальной сети стоит web-сервер, почтовик, dns, рассположенный на eth1, к которому ограничение скорости никак не должно относиться, хотя - это можно пока упустить. Важнее - решить проблему скорости
ЗЫ: сейчас безлимитный канал работает так - кто первый встал, того и тапки
