mysql> select * from ppp.mark;
+------+-------+------+
| mark | count | tbl |
+------+-------+------+
| 10 | 1 | RT1 |
| 20 | 0 | RT2 |
| 30 | 0 | RT3 |
| 40 | 0 | RT4 |
| 50 | 0 | RT5 |
+------+-------+------+
5 rows in set (0.00 sec)mysql> select * from ppp.ip;
+------+----------------+
| mark | ip |
+------+----------------+
| 10 | 100.100.100.13 |
+------+----------------+
1 row in set (0.00 sec)
/etc/ppp/ip-up
Извлекаем из таблицы значение маркера с наименьшим кол-вом подключений на линке:
MARK=$(mysql -e"select mark from ppp.mark order by count limit 1")
Извлекаем значение таблицы маршрутов для выбранной марки
TBL=$(mysql -e"select tbl from ppp.mark where mark=${MARK:5}")
Увеличиваем счетчик подключений для выбранного маркера:
mysql -e"update ppp.mark set count=count+1 where mark=${MARK:5}"
Сохраняем значение маркера для данного подключения:
mysql -e"insert into ppp.ip values(${MARK:5}, '$5')"
#******************* IPTABLES ***************************
FW='/sbin/iptables'
#$FW -t mangle -A PREROUTING -s $5 -d ! $NET_LOCAL -j MARK --set-mark 50
$FW -t mangle -A PREROUTING -s $5 -d ! $NET_LOCAL -j MARK --set-mark ${MARK:5}
${FW} -I INPUT -i $IF_LOCAL -s $6 -j ACCEPT
#******************* ROUTE ******************************
#ip rule add from $5 table RT5
ip rule add from $5 table ${TBL:4}
exit 0
/etc/ppp/ip-down
Извлекаем из таблицы маркер для данного подключения:
MARK=$(mysql -e"select mark from ppp.ip where ip='$5'")
Извлекаем из таблицы значение таблицы маршрутов для данного подключения:
TBL=$(mysql -e"select tbl from ppp.mark where mark=${MARK:5}")
Уменьшаем счетчик активных подключений для данного маркера:
mysql -e"update ppp.mark set count=count-1 where mark=${MARK:5}"
Удаляем наше подключение из таблицы:
mysql -e"delete from ppp.ip where ip='$5'"
#************* IPTABLES ***********************************************
FW='/sbin/iptables'
#$FW -t mangle -D PREROUTING -s $5 -d ! $NET_LOCAL -j MARK --set-mark 50
$FW -t mangle -D PREROUTING -s $5 -d ! $NET_LOCAL -j MARK --set-mark ${MARK:5}
$FW -A INPUT -D -i $IF_LOCAL -s $6 -j ACCEPT
#************ ROUTE ***************************************************
#ip rule delete from $5 table RT5
ip rule delete from $5 table ${TBL:4}
exit 0