Страница 1 из 1
Проблема с назначением ip-адресов клиентам pppoe
Добавлено: Чт янв 31, 2008 11:27 pm
Greg007
Установил freeradius 1.1.5 + Abills.
Все работает, подключения через pppoe проходят, но клиентам выдаются адреса вида 10.67.15.x, хотя в Abills я настроил NAS и назначил пул адресов 172.30.1.x. Так же пробовал назначать пользователю статический ip-адрес.
Когда запускаю radiusd -X, то вижу следующее:
rad_check_password: Auth-Type = Accept, accepting the user
Exec-Program output: Acct-Interim-Interval = 60, Session-Timeout = 2472324, Octets-Direction = 1, Framed-IP-Address = 172.30.1.60, Session-Octets-Limit = 2147483648, Framed-IP-Netmask = 255.255.255.0,
Exec-Program-Wait: plaintext: Acct-Interim-Interval = 60, Session-Timeout = 2472324, Octets-Direction = 1, Framed-IP-Address = 172.30.1.60, Session-Octets-Limit = 2147483648, Framed-IP-Netmask = 255.255.255.0,
Exec-Program: returned: 0
Sending Access-Accept of id 197 to 127.0.0.1 port 1479
Finished request 0
Going to the next request
--- Walking the entire request list ---
Waking up in 6 seconds...
rad_recv: Accounting-Request packet from host 127.0.0.1:1479, id=198, length=96
Acct-Session-Id = "47A2565C4E4000"
User-Name = "greg"
Acct-Status-Type = Start
Service-Type = Framed-User
Framed-Protocol = PPP
Acct-Authentic = RADIUS
NAS-Port-Type = Virtual
Framed-IP-Address = 10.67.15.4
NAS-IP-Address = 127.0.1.1
NAS-Port = 0
Acct-Delay-Time = 0
То есть вроде как Abills и отвечает Framed-IP-Address = 172.30.1.60, но следом видно что радиус назначает какой-то свой ip.
Видимо надо что-то с радиусом, но что именно?
Добавлено: Пт фев 01, 2008 12:06 am
Greg007
Проблема ушла, после того, как добавил в файл raddb/dictionary:
# Ограничение траффика сессии
ATTRIBUTE Session-Octets-Limit 227 integer
# What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out)
ATTRIBUTE Octets-Direction 228 integer
# Ограничение скорости соединения
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer
ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer
ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer
Добавлено: Вт фев 05, 2008 9:22 am
rx-8-
Была таже проблема. Все было настроено по инструкции. Проблема оказалась в другом. При написании тарифа я поставил лимит трафика на месяц 800 мб., т.е. в соотв. поле прописал число 800. При этом был такой лог radiusd -X:
Exec-Program output: Session-Timeout = 2115584, Acct-Interim-Interval = 60, Octets-Direction = 0, Framed-IP-Address = 192.168.5.203, Session-Octets-Limit = 838834963.999621, Framed-IP-Netmask = 0.0.0.0,
Exec-Program-Wait: plaintext: Session-Timeout = 2115584, Acct-Interim-Interval = 60, Octets-Direction = 0, Framed-IP-Address = 192.168.5.203, Session-Octets-Limit = 838834963.999621, Framed-IP-Netmask = 0.0.0.0,
Exec-Program: returned: 0
т.е. параметр Session-Octets-Limit принимал дробное значение, незнаю почему . Видимо поэтому pppd не принимал это и все остальные значения.
Короче, пришлось поправить исходники:
файл Abills/mysql/Auth.pm стр. 497
Код: Выделить всё
$RAD_PAIRS->{'Session-Octets-Limit'} = $EX_PARAMS->{traf_limit} * $CONF->{KBYTE_SIZE} * $CONF->{KBYTE_SIZE});
заменил на
Код: Выделить всё
$RAD_PAIRS->{'Session-Octets-Limit'} = sprintf("%d", abs($EX_PARAMS->{traf_limit}) * $CONF->{KBYTE_SIZE} * $CONF->{KBYTE_SIZE});
Добавлено: Вт фев 05, 2008 11:23 am
chtito
В current тоже есть эта бажная строчка. Автору на заметку.
P.S.: спасибо (на будущее, сам пока не дошел до юзанья, все собираюсь

)
Добавлено: Ср фев 06, 2008 8:16 am
rx-8-
Да, баг, скорее, не в этой строке, а в другом месте. Я предложил временное решение, которое меня пока устраивает. Тут надо докопаться почему выдается дробное значение лимита (и даже отрицательное), когда везде прописываются целые (в моем случае). Но это уже к разработчику.
Добавлено: Ср фев 13, 2008 6:36 pm
~AsmodeuS~
поправил
Добавлено: Ср фев 20, 2008 3:08 pm
Tiger
Настроил помегобайтную оплату и опять началась чехарда с выдачей адресов из пула.
Может ли радиус переваривать подобное :
т.е. отрицательное значение?
Вот полный лог:
Код: Выделить всё
rad_recv: Access-Request packet from host 127.0.0.1:32771, id=209, length=101
Service-Type = Framed-User
Framed-Protocol = PPP
User-Name = "mb"
CHAP-Challenge = 0x088977a5ff63cd4a8d128a433bc3548e36
CHAP-Password = 0x3c8b331b8743ba0dc2c82e1b427cee0ade
Calling-Station-Id = "10.18.128.222"
NAS-IP-Address = 10.18.128.233
NAS-Port = 0
Processing the authorize section of radiusd.conf
modcall: entering group authorize for request 0
Exec-Program output: Auth-Type := Accept
Exec-Program-Wait: value-pairs: Auth-Type := Accept
Exec-Program: returned: 0
modcall[authorize]: module "pre_auth" returns ok for request 0
modcall[authorize]: module "preprocess" returns ok for request 0
rlm_realm: No '@' in User-Name = "mb", looking up realm NULL
rlm_realm: No such realm "NULL"
modcall[authorize]: module "suffix" returns noop for request 0
users: Matched entry DEFAULT at line 216
modcall[authorize]: module "files" returns ok for request 0
modcall: leaving group authorize (returns ok) for request 0
rad_check_password: Found Auth-Type Accept
rad_check_password: Auth-Type = Accept, accepting the user
Exec-Program output: Acct-Interim-Interval = 60, Session-Timeout = 25054, PPPD-U
pstream-Speed-Limit = 128, Octets-Direction = 0, Framed-IP-Address = 172.0.0.8,
Session-Octets-Limit = -2147483648, Framed-IP-Netmask = 255.255.255.255, PPPD-Do
wnstream-Speed-Limit = 128,
Exec-Program-Wait: plaintext: Acct-Interim-Interval = 60, Session-Timeout = 2505
4, PPPD-Upstream-Speed-Limit = 128, Octets-Direction = 0, Framed-IP-Address = 17
2.0.0.8, Session-Octets-Limit = -2147483648, Framed-IP-Netmask = 255.255.255.255
, PPPD-Downstream-Speed-Limit = 128,
Exec-Program: returned: 0
Sending Access-Accept of id 209 to 127.0.0.1 port 32771
Finished request 0
Going to the next request
--- Walking the entire request list ---
Waking up in 6 seconds...
rad_recv: Accounting-Request packet from host 127.0.0.1:32771, id=210, length=10
9
Acct-Session-Id = "47BC4103117600"
User-Name = "mb"
Acct-Status-Type = Start
Service-Type = Framed-User
Framed-Protocol = PPP
Calling-Station-Id = "10.18.128.222"
Acct-Authentic = RADIUS
NAS-Port-Type = Async
Framed-IP-Address = 192.168.1.1
NAS-IP-Address = 10.18.128.233
NAS-Port = 0
Acct-Delay-Time = 0
Processing the preacct section of radiusd.conf
modcall: entering group preacct for request 1
modcall[preacct]: module "preprocess" returns noop for request 1
rlm_acct_unique: Hashing 'NAS-Port = 0,Client-IP-Address = 127.0.0.1,NAS-IP-Addr
ess = 10.18.128.233,Acct-Session-Id = "47BC4103117600",User-Name = "mb"'
rlm_acct_unique: Acct-Unique-Session-ID = "6919d6fbe26a899b".
modcall[preacct]: module "acct_unique" returns ok for request 1
rlm_realm: No '@' in User-Name = "mb", looking up realm NULL
rlm_realm: No such realm "NULL"
modcall[preacct]: module "suffix" returns noop for request 1
acct_users: Matched entry DEFAULT at line 17
modcall[preacct]: module "files" returns ok for request 1
modcall: leaving group preacct (returns ok) for request 1
Processing the accounting section of radiusd.conf
modcall: entering group accounting for request 1
radius_xlat: '/var/log/freeradius/radacct/127.0.0.1/detail-20080220'
rlm_detail: /var/log/freeradius/radacct/%{Client-IP-Address}/detail-%Y%m%d expan
ds to /var/log/freeradius/radacct/127.0.0.1/detail-20080220
modcall[accounting]: module "detail" returns ok for request 1
modcall[accounting]: module "unix" returns ok for request 1
radius_xlat: '/var/log/freeradius/radutmp'
radius_xlat: 'mb'
modcall[accounting]: module "radutmp" returns ok for request 1
modcall: leaving group accounting (returns ok) for request 1
Exec-Program output:
Exec-Program: returned: 0
Sending Accounting-Response of id 210 to 127.0.0.1 port 32771
Finished request 1
Going to the next request
Раньше делал фокус, описанный
тут
Проблема у тех пользователей, которым назначены ограничения по траффику.
Добавлено: Ср фев 20, 2008 3:55 pm
Tiger
Решил проблему, может не совсем верно но так:
Заменить
Код: Выделить всё
$RAD_PAIRS->{'Session-Octets-Limit'} = $EX_PARAMS->{traf_limit} * $CONF->{KBYTE_SIZE} * $CONF->{KBYTE_SIZE};
Не на это
Код: Выделить всё
$RAD_PAIRS->{'Session-Octets-Limit'} = sprintf("%d", abs($EX_PARAMS->{traf_limit}) * $CONF->{KBYTE_SIZE} * $CONF->{KBYTE_SIZE});
А на это
Код: Выделить всё
$RAD_PAIRS->{'Session-Octets-Limit'} = sprintf("%10.0F", abs($EX_PARAMS->{traf_limit} * $CONF->{KBYTE_SIZE} * $CONF->{KBYTE_SIZE}));
Если кто может, подскажите где правильный ответ. %d или %10.0F
Но с моим вариантом уже не гонит минус и дробное.
И відает айпи из пула а не ненавистній 192.168.1.1