Jump to content
Калькуляторы

accel-ppp ipoe, radius

Здравствуйте.
При развёртывании небольших сетей всегда использовал самописные скрипты, генерящие нужные конфиги для софт браса.
При этом постоянно на разных форумах натыкался на советы использовать accel-ppp, radius. Сейчас дошли руки разобраться в этих вопросах.
С функционалом accel-ppp вроде всё ясно. Неясно как он взаимодействует с radius и с биллингом. Да и вообще неясно что делает radius в этой схеме.
В гугле тысячи ссылок на манулы по настройке, но нигде нет схемы, которая бы описывала как оно друг с другом взаимодействует (может я как-то не так гуглю...).
Те кто разбирается в этом вопросе, опишите, пожалуйста, схему взаимодействия accel-ppp, radius и биллинга для реализации accel-ppp ipoe + QinQ + ip unnumbered.
 

Edited by 1boris

Share this post


Link to post
Share on other sites

ipoe+qinq+ip unnumbered+старт сессии по дхцп дисковер конфиг примерно такой

[ipoe]
verbose=1
vendor=DHCP
password=csid
check-mac-change=1
ifcfg=1
ip-unnumbered=1
gw-ip-address=172.31.255.254/12
interface=re:^vlan\.2[0-9]+\.2[0-2][0-9][0-9]$,username=lua:get_hostname,mode=L2,shared=0,start=dhcpv4,mtu=1500,proxy-arp=1
vlan-mon=re:^vlan\.2[0-9]+,2001-2888
vlan-name=%I.%N
attr-dhcp-client-ip=DHCP-Your-IP-Address
attr-dhcp-router-ip=DHCP-Router-Address
attr-dhcp-mask=DHCP-Subnet-Mask
attr-l4-redirect=L4-Redirect
attr-l4-redirect-ipset=L4-Redirect-ipset


[radius]
verbose=1
interim-verbose=1
dictionary=/usr/share/accel-ppp/radius/dictionary
nas-identifier=ololo
bind=X.X.X.X
dae-server=X.X.X.X:2002,secret
nas-ip-address=X.X.X.X
server=Y.Y.Y.Y,passwd,auth-port=1812,acct-port=1813,req-limit=100,fail-timeout=0,max-fail=10,weight=1
acct-timeout=120
acct-interim-interval=300
acct-interim-jitter=60
timeout=3
max-try=3

В системе подняты только s-vlans с мту 1504, c-vlans асель клепает сам. При прилёте dhcp discover если сессии нет, формируется запрос в радиус, если accept - поднимается сессия, айпишники/шлюзы я отдаю параметрами в ответе радиуса. Ну еще и coa/dm для останова сессий/изменения скоростей. Как бы всё.

 

В 11.10.2022 в 14:24, 1boris сказал:

(может я как-то не так гуглю...).

Может, вот полный манул, по которому собирал лабу

https://accel-ppp.readthedocs.io/en/latest/

Share this post


Link to post
Share on other sites

@pppoetest Спасибо за конфигурацию и ссылку на мануал, помогли.
Разобраться в радиусе помог этот мануал https://networkradius.com/doc/current/introduction/RADIUS.html

Вроде разобрался, но есть некоторые нюансы:
1)При start=dhcpv4 сессия поднимается только в том случае, если клиент отправляет dhcp discover. Если по какой-то причине accel-ppp перезапустится, то пока клиент не запросит продления аренды или не пошлёт заново discover, сессия не восстановится. И ещё один минус - клиент не может прописать статический ip-адрес.
2)При start=up сессия поднимается только если указать статический ip-адрес, при этом accel-ppp не выдаёт ip-адреса.

Возможна ли конфигурация, при которой клиент сможет на выбор использовать dhcp или прописывать статику?
Пока разобрался не во всех настройках, возможно что-то есть, что решает это проблему.
Так же есть мысль настроить accel-ppp в роли relay, но неясно будет ли он релееить при start=up.

Edited by 1boris

Share this post


Link to post
Share on other sites

В 13.10.2022 в 19:44, 1boris сказал:

Если по какой-то причине accel-ppp перезапустится, то пока клиент не запросит продления аренды или не пошлёт заново discover, сессия не восстановится.

Это решается временем лизы 3-5 минут. Да и как часто у вас крешится/ребутается брас?

В 13.10.2022 в 19:44, 1boris сказал:

И ещё один минус - клиент не может прописать статический ip-адрес.

Для меня это плюс.

 

В 13.10.2022 в 19:44, 1boris сказал:

Возможна ли конфигурация, при которой клиент сможет на выбор использовать dhcp или прописывать статику?

Собирайте стенд и пробуйте ))

 

Share this post


Link to post
Share on other sites

Для того, чтобы использовать accel-ppp одновременно для dhcp и статики, нужно прописать start=up,start=dhcp.

В таком случае решается проблема, про которую я писал выше:

В 13.10.2022 в 16:44, 1boris сказал:

Если по какой-то причине accel-ppp перезапустится, то пока клиент не запросит продления аренды или не пошлёт заново discover, сессия не восстановится.

После перезапуска accel-ppp сессия восстановится по неклассифицированному пакету.

При смешанной авторизации возникает необходимость делать проверку не только по названию интерфейса, но ещё и по ip-адресу, который пытается авторизоваться.
При попытке авторизоваться с чужим ip-адресом accel-ppp начинает бесконечно плодить сессии.
Решил эту проблему добавлением ip-адреса абонента в username. Получилось username=vlan100.7-10.100.7.2 в случае если статика, или username=vlan100.7-0.0.0.0 в случае если dhcp.

function username(pkt)
	local ifname = pkt:ifname()
	local ip = pkt:ipaddr()
	if (ip == nil or ip == "") then
		ip = '0.0.0.0'
	end
	local username = ifname..'-'..ip
	return username
end

А чтобы в БД в таблицах radcheck и radreply не плодить записи, можно использовать представления (view).

Может быть есть ещё способы реализации?

Edited by 1boris

Share this post


Link to post
Share on other sites

Те кто разбирается в радиусе, подскажите, пожалуйста, возможно ли в таблице radcheck сделать подобную проверку?
ЕСЛИ (Framed-IP-Address не прилетел на радиус ИЛИ Framed-IP-Address == '' ИЛИ Framed-IP-Address == Value) ТОГДА радиус отдаёт accept
Как я понял каждая новая запись в radcheck работает как И между условиями.
Можно попробовать регулярное выражение (''|Value), но тогда как в этом регулярном выражение проверить, что Framed-IP-Address не прилетел на радиус?
Framed-IP-Address прилетает в том случае, если у клиента прописан статический ip-адрес.

Share this post


Link to post
Share on other sites

ИМХО если ест ькакой-то биллинг то он и должен заниматься выделением адресов через радиус. Будь это динамика или статика.

Share this post


Link to post
Share on other sites

@pppoetest Подскажите, пожалуйста, в схеме vlan per user пробовали ли выдавать на один порт несколько ip-адресов?
В документации ничего об этом не говорится.
attr-dhcp-client-ip подразумевает передачу только одного ip-адреса.
Как заставить radius отдавать ip-адрес, который ещё не занят, мыслей нет.
Только если relay делать и ставить другой dhcp сервер.

Изучаю accel ради того, чтобы понять какие он даёт плюсы в схеме ipoe + vlan per user + ip unnumbered.
Не могу понять какой смысл в авторизации и в сессиях для ipoe.

Edited by 1boris

Share this post


Link to post
Share on other sites

В 17.10.2022 в 14:45, 1boris сказал:

@pppoetest Подскажите, пожалуйста, в схеме vlan per user пробовали ли выдавать на один порт несколько ip-адресов?

В документации ничего об этом не говорится.

Конечно можно, например по маку или что, кмк, лучше не стоит по опции 012. Вообще всем этим лучше всего рулить в радиусе.

 

В 17.10.2022 в 14:45, 1boris сказал:

Изучаю accel ради того, чтобы понять какие он даёт плюсы в схеме ipoe + vlan per user + ip unnumbered.

Дешевизна браса, место всяких аср100* или мх204, простейший тазик и вместо кучки костылей и скриптов - аксель фактически искаропки умеющий всё тоже самое.

 

В 17.10.2022 в 14:45, 1boris сказал:

Не могу понять какой смысл в авторизации и в сессиях для ipoe.

Это тяжёлое наследие ppp, и различного рода спецслужбы очень рады радиусу и логам сессий.

Share this post


Link to post
Share on other sites

В 17.10.2022 в 14:43, pppoetest сказал:

Конечно можно, например по маку или что, кмк, лучше не стоит по опции 012. Вообще всем этим лучше всего рулить в радиусе.

 

Имел ввиду вообще без привязки к устройствам. Абонент подключает первое устройство - получает первый IP-адрес, второе устройство - получает второй IP-адрес и т.д.
 

 

В 15.10.2022 в 22:15, pppoetest сказал:

Я логику авторизации вынес в перл модуль.

Спасибо за подсказку.
К сожалению ни Perl, ни Python не знаю.
Возможно это извращение, но сделал то же самое на PHP (для тестов точно пойдёт).
Может кому-то пригодится, оставлю инструкцию.

Для авторизации в /etc/raddb/sites-enabled/default необходимо добавить:

authorize {
    update control { 
        Auth-Type := `/usr/bin/php -f /etc/raddb/auth.php '%{User-Name}' '%{User-Password}'`
    }
    ...
}


Скрипт auth.php будет иметь следующее содержимое:

<?php
    $user = $argv[1];
    $password = $argv[2];
    if ($user == "vlan100.5")
        echo 'Accept';
    else
        echo 'Reject';
?>


Для того, чтобы в случае успешной авторизации вернуть атрибуты, необходимо в /etc/raddb/users добавить:

DEFAULT Auth-Type = Accept
    Exec-Program-Wait = "/usr/bin/php -f  /etc/raddb/attr.php '%{User-Name}' '%{User-Password}'"


Скрипт attr.php будет иметь следующее содержимое:

<?php
    $user = $argv[1];
    $password = $argv[2];
    if ($user == "vlan100.5") {
        echo "DHCP-Your-IP-Address := 10.0.0.2,";
        echo "DHCP-Router-Address := 10.0.0.1,";
        echo "DHCP-Subnet-Mask := 255.255.255.0,";
    }
?>

 

Edited by 1boris

Share this post


Link to post
Share on other sites

В 18.10.2022 в 02:48, 1boris сказал:

Имел ввиду вообще без привязки к устройствам.

Можно и без, но логика выдачи в любом будет, или твоя или радиуса биллинга

Share this post


Link to post
Share on other sites

On 10/17/2022 at 1:45 PM, 1boris said:

Не могу понять какой смысл в авторизации и в сессиях для ipoe.

 

Денежки считать? Регулировать скорость согласно тарифа?

Share this post


Link to post
Share on other sites

В 20.10.2022 в 14:39, ShyLion сказал:

Денежки считать? Регулировать скорость согласно тарифа?

 Всего 3 буквы ААА, аж закружилась голова :)  все ведь описато, какая А за что отвечает... 1-я А -аутентикация (кто пришел ?) 2-я А  авторизация - (если кто пришел через 1А - то куда ему и зачем можно, и сколько). 3-я А - это просто аккаутнинг-учет, (когда пришел через 1А, сколько взял)

Share this post


Link to post
Share on other sites

В 20.10.2022 в 16:41, ShyLion сказал:

@YuryD 

Да я какбы вкурсе

 Я как-бы про Вас  не сомневаюсь. Это для будущих 1борис, может гугл отиндексирует :) Хотя бы про aaa...

 

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

Share this post


Link to post
Share on other sites

В 20.10.2022 в 14:48, YuryD сказал:

 Я как-бы про Вас  не сомневаюсь. Это для будущих 1борис, может гугл отиндексирует :) Хотя бы про aaa...

 

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

Большое спасибо за дополнение темы.

Но всё же перечитайте мой пост, я писал о том, что только начал изучать данный вопрос. Естественно, что я "про радиус не знаю даже".
Мой вопрос был про конкретно данную схему, где у каждого абонента свой порт, и каждый абонент находится в своём влане.
В моей сети эта схема отлично работает без accel и radius. На брасе написан скрипт, который рулит интерфейсами, маршрутами, dhcp, ipset и ipt-ratelimit.
Моей целью было понять что такое accel и radius. И есть ли какие-то весомые аргументы использовать эту связку вместо самописных скриптов.

Спасибо pppoetest за помощь, помог разобраться.

Edited by 1boris

Share this post


Link to post
Share on other sites

В 21.10.2022 в 13:01, 1boris сказал:

И есть ли какие-то весомые аргументы использовать эту связку вместо самописных скриптов.

 

Стандартизация, шаблонизация, простота горизонтального расширения, есть штатная возможность регулировать сессии м/у несколькими брасами, и т.д.

Share this post


Link to post
Share on other sites

В 17.10.2022 в 14:43, pppoetest сказал:

Конечно можно, например по маку или что, кмк, лучше не стоит по опции 012. Вообще всем этим лучше всего рулить в радиусе.

 


Есть схема:
"Управляемый порт -> абонентская мыльница -> два абонентских устройства"
Авторизация по MAC-адресам.

Происходит следующее:
1)Первое устройство получает ip-адрес.
2)Второе устройство пытается получить ip-адрес
Как только прилетает dhcp discover от второго устройства, первая сессия рвётся, а в логах: "debug: vlan3000.105: terminate", и пропадает интерфейс vlan3000.105.
И пока я не перезапущу accel, интерфейс vlan3000.105 больше не создаётся.

Если настроить старт сессии только по неклассифицированному пакету, то всё работает.
Так должно быть или я что-то не так делаю?

Edited by 1boris

Share this post


Link to post
Share on other sites

Пробовал с relay.
Первое устройство получает ip 10.0.0.2, сессия поднимается.
Второе устройство шлёт discover, а accel шлёт "request for 10.0.0.2" на dhcp сервер.
Получается, что при shared=0 нельзя поднимать две dhcp сессии с одного порта, так как accel думает, что клиент запрашивает продление аренды.
Но при этом можно поднимать одну сессию по dhcp и сколько угодно сессий по неклассифицированному пакету.
Может есть способ, но я что-то не так делаю?


Всё работает, если использовать shared=1.
Но тогда нельзя сменить устройство, пока сессия не завершится.
Да и плодится целая куча ipoe интерфейсов.

Edited by 1boris

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.