Выдаёт одни и те же адреса из пула

rizer
Сообщения: 14
Зарегистрирован: Вт фев 26, 2008 8:55 pm

Выдаёт одни и те же адреса из пула

Сообщение rizer »

Добрый день.

Пул в абиллсе на 200 IP.
При подключении нового пользователя с некоторой долей вероятности выдаётся IP из уже работающих пользователей.
Вот кусок радиус дебага:

Вот пришёл alive от пользователя который уже час работает:
Sun Nov 23 14:15:23 2008
rad_recv: Accounting-Request packet from host 127.0.0.1:49962, id=198, length=216
Service-Type = VPN
User-Name = "i21192"
Framed-Protocol = PPP
Framed-IP-Address = 192.168.100.113
Framed-IP-Netmask = 0.0.0.0
NAS-Identifier = "serv.izm.local"
NAS-Port = 48
Acct-Status-Type = Interim-Update
Acct-Session-Id = "s-1761715782"
Acct-Multi-Session-Id = ""
Acct-Delay-Time = 0
Acct-Input-Octets = 7712924
Acct-Input-Packets = 16286
Acct-Output-Octets = 10661068
Acct-Output-Packets = 17971
Acct-Session-Time = 8562
Exppp-Acct-LocalInput-Octets = 0
Exppp-Acct-LocalOutput-Octets = 0
Exppp-Acct-IteriumIn-Octets = 16192
Exppp-Acct-IteriumOut-Octets = 1571
Exppp-Acct-LocalIteriumIn-Octets = 0
Exppp-Acct-LocalIteriumOut-Octets = 0
Exppp-Acct-IteriumTime = 61

А вот подключается новый юзер и ему присваеватся такой же IP и он соотвественно отваливается с ошибкой о невозможности создать маршрут:

Sun Nov 23 14:16:03 2008 : Debug: rad_rmspace_pair: User-Name now 'test'
Sun Nov 23 14:16:03 2008 : Debug: Processing the authorize section of radiusd.conf
Sun Nov 23 14:16:03 2008 : Debug: modcall: entering group authorize for request 51
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: calling preprocess (rlm_preprocess) for request 51
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: returned from preprocess (rlm_preprocess) for request 51
Sun Nov 23 14:16:03 2008 : Debug: modcall[authorize]: module "preprocess" returns ok for request 51
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: calling auth_log (rlm_detail) for request 51
Sun Nov 23 14:16:03 2008 : Debug: radius_xlat: '/var/log/radacct/127.0.0.1/auth-detail-20081123'
Sun Nov 23 14:16:03 2008 : Debug: rlm_detail: /var/log/radacct/%{Client-IP-Address}/auth-detail-%Y%m%d expands to /var/log/radacct/127.0.0.1/auth-detail-200
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: returned from auth_log (rlm_detail) for request 51
Sun Nov 23 14:16:03 2008 : Debug: modcall[authorize]: module "auth_log" returns ok for request 51
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: calling mschap (rlm_mschap) for request 51
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: returned from mschap (rlm_mschap) for request 51
Sun Nov 23 14:16:03 2008 : Debug: modcall[authorize]: module "mschap" returns noop for request 51
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: calling perl (rlm_perl) for request 51
Sun Nov 23 14:16:03 2008 : Debug: Using perl at 0x80d3ae0
Auth-Type := Accept
Sun Nov 23 14:16:03 2008 : Debug: rlm_perl: Added pair Acct-Interim-Interval = 60
Sun Nov 23 14:16:03 2008 : Debug: rlm_perl: Added pair Session-Timeout = 639837
Sun Nov 23 14:16:03 2008 : Debug: rlm_perl: Added pair Exppp-Traffic-Limit = 4294000000
Sun Nov 23 14:16:03 2008 : Debug: rlm_perl: Added pair Framed-IP-Address = 192.168.100.113
Sun Nov 23 14:16:03 2008 : Debug: rlm_perl: Added pair Framed-IP-Netmask = 0.0.0.0
Sun Nov 23 14:16:03 2008 : Debug: rlm_perl: Added pair Exppp-LocalTraffic-Limit = 4288675840
Sun Nov 23 14:16:03 2008 : Debug: rlm_perl: Added pair Auth-Type = Accept
Sun Nov 23 14:16:03 2008 : Debug: modsingle[authorize]: returned from perl (rlm_perl) for request 51
Sun Nov 23 14:16:03 2008 : Debug: modcall[authorize]: module "perl" returns ok for request 51
Sun Nov 23 14:16:03 2008 : Debug: modcall: leaving group authorize (returns ok) for request 51
Sun Nov 23 14:16:03 2008 : Debug: rad_check_password: Found Auth-Type Accept
Sun Nov 23 14:16:03 2008 : Debug: rad_check_password: Auth-Type = Accept, accepting the user
Sun Nov 23 14:16:03 2008 : Auth: Login OK: [test/<CHAP-Password>] (from client localhost port 0)
Sun Nov 23 14:16:03 2008 : Debug: Processing the post-auth section of radiusd.conf
Sun Nov 23 14:16:03 2008 : Debug: modcall: entering group post-auth for request 51
Sun Nov 23 14:16:03 2008 : Debug: modsingle[post-auth]: calling reply_log (rlm_detail) for request 51
Sun Nov 23 14:16:03 2008 : Debug: radius_xlat: '/var/log/radacct/127.0.0.1/reply-detail-20081123'
Sun Nov 23 14:16:03 2008 : Debug: rlm_detail: /var/log/radacct/%{Client-IP-Address}/reply-detail-%Y%m%d expands to /var/log/radacct/127.0.0.1/reply-detail-2
Sun Nov 23 14:16:03 2008 : Debug: modsingle[post-auth]: returned from reply_log (rlm_detail) for request 51
Sun Nov 23 14:16:03 2008 : Debug: modcall[post-auth]: module "reply_log" returns ok for request 51
Sun Nov 23 14:16:03 2008 : Debug: modcall: leaving group post-auth (returns ok) for request 51
Sending Access-Accept of id 43 to 127.0.0.1 port 62974
Acct-Interim-Interval = 60
Session-Timeout = 639837
Exppp-Traffic-Limit = 4294000000
Framed-IP-Address = 192.168.100.113
Framed-IP-Netmask = 0.0.0.0
Exppp-LocalTraffic-Limit = 4288675840


Проблема тем острее, чем больше юзеров в онлайне.
Помогите, куда дальше смотреть?


Abills 0.4 от сентября 2008г.
ExPPP
FreeBSD 6.3

lasik
Сообщения: 983
Зарегистрирован: Чт янв 10, 2008 5:20 pm
Откуда: Россия, Москва

Сообщение lasik »

вопрос, какие ip ты даешь зверям на ПК, и какие ip ты даешь из пула

rizer
Сообщения: 14
Зарегистрирован: Вт фев 26, 2008 8:55 pm

Сообщение rizer »

По DHCP они получают 33.0/24

А по пулу абилса при VPN соединении 100.0/24{1-200}

lasik
Сообщения: 983
Зарегистрирован: Чт янв 10, 2008 5:20 pm
Откуда: Россия, Москва

Сообщение lasik »

а dhcp кто выдает ?
не сервер ли с абиллсом ?

rizer
Сообщения: 14
Зарегистрирован: Вт фев 26, 2008 8:55 pm

Сообщение rizer »

Сервер физически один.
DHCP выдаёт demon dhcpd.

А что, здесь зарыта какая-то проблема?


P.S. я уже так замучался с этим серваком(времени не хвататет), что подумываю, обратиться к за комм. поддержкой.

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

А что, здесь зарыта какая-то проблема?
DHCP ни при чем. Проблема в некорректной организации совместного доступа к пулу свободных адресов, и может так случиться, что две одновременные попытки авторизации получат один и тот же IP. Возможное решение проблемы:

1) Выполнить действия, указанные в теме Корректный подсчет Ipn трафика для юзеров с динам. адресами. Хоть оно изначально не предназначалось для выдачи IP адресов, подошло и под него тютелька в тютельку. Красивая вещь code reuse! :)

2) В Abills/mysql/Auth.pm добавить функцию get_ip_safely():
sub get_ip_safely {
my $self = shift;
$self->query($db, 'SET AUTOCOMMIT=0', 'do');
$self->query($db, 'LOCK TABLES ippools READ, nas_ippools READ, nas_ippools np READ, dv_calls c READ, dirty_ip WRITE', 'do');
my $ip = $self->get_ip(@_);
$self->query($db, "REPLACE INTO dirty_ip SET framed_ip_address='$ip', uid='$self->{UID}';", 'do')
if ($ip > 0);
$self->query($db, 'COMMIT', 'do');
$self->query($db, 'UNLOCK TABLES;', 'do');


return $ip;
}
Примечание:SET AUTOCOMMIT=0 и COMMIT полезно если вы как и я используете Innodb. В остальных случаях возможно не нужно.

3) Внутри функции dv_auth() заменить оба вызова get_ip на get_ip_safely.

Вобщем-то вот и все. Конфиг radius остается без изменений. Код годен для работы с Abills-0.4 примерно за 12-е сентября.


В будущем, если автор до тех пор не исправит, у вас будут проблемы при попытке использовать множественные пулы адресов, привязанных к одному NAS. Это совершенно другая болезнь, но тоже не без лекарства ;)

rizer
Сообщения: 14
Зарегистрирован: Вт фев 26, 2008 8:55 pm

Сообщение rizer »

Спасибо за ответ.

Если я правильно понимаю у меня проблема немного в другом.

У меня не происходит одновременно два подключения на один IP,
а просто выдаётся любой IP из пула 1-200, независимо занят он или нет.
А этот IP может быть занят уже час или два другим подключением.

Т.е. я пытаюсь понять где хранится и как осуществляется проверка пула занятых IP.

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Т.е. я пытаюсь понять где хранится и как осуществляется проверка пула занятых IP.
Занятые IP здесь: / Monitoring/ Dialup / VPN/
Сидят в таблице dv_calls.
При выделении берется пул доступных НАС-у адресов, вычитаются занятые, и из остатка выбирается один адрес случайно. Причем делается это на редкость наивно, в расчете на то, что в любой момент времени обращаться будет только 1 радиус клиент. Поверьте, при таком раскладе проблема конфликта адресов обязательно проявит себя максимум через 2-3 дня с вашим 200-адресным пулом (интересно как он у вас получился в одном пуле? 200 насколько я знаю не степень двойки, а множественные пулы например 3 подсети 128+64+8=200, в непропатченном Абиллсе не работают), 50-100 юзерах в онлайне и их более-менее активных входах/выходах. Судя по симптомам у вас оно, я уж с ней наеб^H^Hболелся.

rizer
Сообщения: 14
Зарегистрирован: Вт фев 26, 2008 8:55 pm

Сообщение rizer »

Посмотрел таблицу dv_calls
нашёл поле framed_ip_address 3232261240.
Это у пользователя c IP 192.168.100.120
Честно говоря формат записи не понял.

По поводу пула:
Я в НАСе абилса просто задал начальный адрес 100.1, диапазон 200 адресов.
Так и работает, выдаются IP в диапазоне от 1 до 200.
И присвоил этот диапазон нескольким тарифным планам.

Онлайн в часы пик у меня как раз 80-90, но у меня именно не проверяется вообще наличие свободных IP, т.е. при пуле 200, и онлайне 100, каждый второй заход неудачный из-за того, что такой адрес уже существует.
Такие ситуации, что авторизуются одновременно два клиента вроде тоже возникали, НО это единичные случаи, а тут каждые несколько минут ошибка о невозможности выдать маршрут ......

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Посмотрел таблицу dv_calls
нашёл поле framed_ip_address 3232261240.
Это у пользователя c IP 192.168.100.120
Честно говоря формат записи не понял.
Это адрес в сыром виде, в виде 32-битного числа. Попробуйте SELECT INET_NTOA(framed_ip_address)
По поводу пула:
Я в НАСе абилса просто задал начальный адрес 100.1, диапазон 200 адресов.
Ах да, забыл, что в абиллсе не подсеть задается... Тогда все верно :)
Онлайн в часы пик у меня как раз 80-90, но у меня именно не проверяется вообще наличие свободных IP, т.е. при пуле 200, и онлайне 100, каждый второй заход неудачный из-за того, что такой адрес уже существует.
Такие ситуации, что авторизуются одновременно два клиента вроде тоже возникали, НО это единичные случаи, а тут каждые несколько минут ошибка о невозможности выдать маршрут ......
Да, у вас что-то другое. Подождем может кто-то знает в чем дело.

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

а это что за хрень?
Framed-IP-Netmask = 0.0.0.0

rizer
Сообщения: 14
Зарегистрирован: Вт фев 26, 2008 8:55 pm

Сообщение rizer »

ran писал(а):а это что за хрень?
Framed-IP-Netmask = 0.0.0.0
А какой должен быть 255.255.255.0 ?
И кем и откуда он передаётся?

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

А какой должен быть 255.255.255.0 ?
ну а какая маска может быть на туннелях точка-точка? кроме как /32
И кем и откуда он передаётся?
модулем авторизации назначается... на основании типа NAS, если не установлено принудительно в радиуспараметрах NAS ил ТП. У тебя тип NAS то правильный?

rizer
Сообщения: 14
Зарегистрирован: Вт фев 26, 2008 8:55 pm

Сообщение rizer »

ran писал(а):а это что за хрень?
Framed-IP-Netmask = 0.0.0.0
С маской разобрался, такая маска выдается только если у абонента стоит в графе "Одновременно:" больше 1.

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

С маской разобрался, такая маска выдается только если у абонента стоит в графе "Одновременно:" больше 1.
да ну? и на туннельный ифейс такая вешается? и оно при этом работает??? :shock:

Ответить