Предлагаю ввести системную переменную, управляющую освобождением динамически распределённых ip-адресов. Обозвать её, к примеру, dynaddr_free_ip_on_stop.
Значение по умолчанию - ноль (освобождать адрес непосредственно при новом распределении).
При dynaddr_free_ip_on_stop=1 - освобождать адрес непосредственно при получении accounting stop.
Суть проблемы: использую схему с прерыванием ppp-соединений методом запуска скрипта из rfw. При первом подключении, когда адрес не распределён, он распределяется, соединение устанавливается нормально. После отключения, при последующих попытках подключения на этот-же адрес (если он не успел перекочевать к другому пользователю) сначала выполняется команда rfw на отключающее правило, потом, практически мгновенно, на включающее. При использовании вместо правил файрвола скриптов, из-за асинхронности, возникает коллизия с отключением свежесозданного соединения (где-то в форуме проблема уже описывалась).
Полагаю, моё предложение не приведёт к потере совместимости и сколько-нибудь существенному снижению производительности, поскольку сводится к минимальному изменению кода модуля коммутируемых соединений.
P.S. Используемая конфигурация:
asp-linux 11.2; rp-pppoe-3.7; utm5-5.2.1-004;
правило включения: <нет>
правило отключения: UIP
radius.cfg:
radius_auth_vap=1
interim_update_interval=60
...
rfw5.cfg:
firewall_type=local
firewall_path=/netup/utm5/bin/ppp-down.sh
...
ppp-down.sh:
#!/bin/bash
USER_IP="$1"
PID_DIR=/var/run
test -z "$USER_IP" && exit 1
IF=`/sbin/ifconfig | grep -B 1 "${USER_IP} " | head -n1 | awk {'print $1'}`;
PID=`cat ${PID_DIR}/${IF}.pid 2>/dev/null`;
test -z "${PID}" && exit 1
kill -HUP ${PID};
exit 0;
Запрос функционала: оперативное освобождение ip-адресов
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
У меня для диапазона динамических адресов прописаны правилаmikkey finn писал(а):угу, заодно правила для пользователя удалять, если правило прописалось
-A FORWARD -s 192.168.40.0/255.255.255.0 -i ppp+ -j ACCEPT
-A FORWARD -d 192.168.40.0/255.255.255.0 -o ppp+ -j ACCEPT
т.е. от манипулирования правилами я в данной схеме отказался.