Morty Posted October 11, 2022 (edited) Здравствуйте. При развёртывании небольших сетей всегда использовал самописные скрипты, генерящие нужные конфиги для софт браса. При этом постоянно на разных форумах натыкался на советы использовать accel-ppp, radius. Сейчас дошли руки разобраться в этих вопросах. С функционалом accel-ppp вроде всё ясно. Неясно как он взаимодействует с radius и с биллингом. Да и вообще неясно что делает radius в этой схеме. В гугле тысячи ссылок на манулы по настройке, но нигде нет схемы, которая бы описывала как оно друг с другом взаимодействует (может я как-то не так гуглю...). Те кто разбирается в этом вопросе, опишите, пожалуйста, схему взаимодействия accel-ppp, radius и биллинга для реализации accel-ppp ipoe + QinQ + ip unnumbered. Edited October 11, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 11, 2022 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/ Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 13, 2022 (edited) @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 October 13, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 13, 2022 В 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 или прописывать статику? Собирайте стенд и пробуйте )) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 14, 2022 (edited) Для того, чтобы использовать 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 October 14, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 14, 2022 Те кто разбирается в радиусе, подскажите, пожалуйста, возможно ли в таблице radcheck сделать подобную проверку? ЕСЛИ (Framed-IP-Address не прилетел на радиус ИЛИ Framed-IP-Address == '' ИЛИ Framed-IP-Address == Value) ТОГДА радиус отдаёт accept Как я понял каждая новая запись в radcheck работает как И между условиями. Можно попробовать регулярное выражение (''|Value), но тогда как в этом регулярном выражение проверить, что Framed-IP-Address не прилетел на радиус? Framed-IP-Address прилетает в том случае, если у клиента прописан статический ip-адрес. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 15, 2022 Я логику авторизации вынес в перл модуль. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Sacrament Posted October 16, 2022 ИМХО если ест ькакой-то биллинг то он и должен заниматься выделением адресов через радиус. Будь это динамика или статика. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 17, 2022 (edited) @pppoetest Подскажите, пожалуйста, в схеме vlan per user пробовали ли выдавать на один порт несколько ip-адресов? В документации ничего об этом не говорится. attr-dhcp-client-ip подразумевает передачу только одного ip-адреса. Как заставить radius отдавать ip-адрес, который ещё не занят, мыслей нет. Только если relay делать и ставить другой dhcp сервер. Изучаю accel ради того, чтобы понять какие он даёт плюсы в схеме ipoe + vlan per user + ip unnumbered. Не могу понять какой смысл в авторизации и в сессиях для ipoe. Edited October 17, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 17, 2022 В 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, и различного рода спецслужбы очень рады радиусу и логам сессий. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 17, 2022 (edited) В 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 October 17, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 18, 2022 В 18.10.2022 в 02:48, 1boris сказал: Имел ввиду вообще без привязки к устройствам. Можно и без, но логика выдачи в любом будет, или твоя или радиуса биллинга Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted October 20, 2022 On 10/17/2022 at 1:45 PM, 1boris said: Не могу понять какой смысл в авторизации и в сессиях для ipoe. Денежки считать? Регулировать скорость согласно тарифа? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted October 20, 2022 В 20.10.2022 в 14:39, ShyLion сказал: Денежки считать? Регулировать скорость согласно тарифа? Всего 3 буквы ААА, аж закружилась голова :) все ведь описато, какая А за что отвечает... 1-я А -аутентикация (кто пришел ?) 2-я А авторизация - (если кто пришел через 1А - то куда ему и зачем можно, и сколько). 3-я А - это просто аккаутнинг-учет, (когда пришел через 1А, сколько взял) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShyLion Posted October 20, 2022 @YuryD Да я какбы вкурсе Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted October 20, 2022 В 20.10.2022 в 16:41, ShyLion сказал: @YuryD Да я какбы вкурсе Я как-бы про Вас не сомневаюсь. Это для будущих 1борис, может гугл отиндексирует :) Хотя бы про aaa... Просто утомило коней и рябчиков, с мухами и каклетами разделять. А то все котят, брас и прочее в одной тарелке. Про радиус-такакс не знают даже.... Упираются в у меня брас купленный, и биллинг (а что это такое и не знают) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 21, 2022 (edited) В 20.10.2022 в 14:48, YuryD сказал: Я как-бы про Вас не сомневаюсь. Это для будущих 1борис, может гугл отиндексирует :) Хотя бы про aaa... Просто утомило коней и рябчиков, с мухами и каклетами разделять. А то все котят, брас и прочее в одной тарелке. Про радиус-такакс не знают даже.... Упираются в у меня брас купленный, и биллинг (а что это такое и не знают) Большое спасибо за дополнение темы. Но всё же перечитайте мой пост, я писал о том, что только начал изучать данный вопрос. Естественно, что я "про радиус не знаю даже". Мой вопрос был про конкретно данную схему, где у каждого абонента свой порт, и каждый абонент находится в своём влане. В моей сети эта схема отлично работает без accel и radius. На брасе написан скрипт, который рулит интерфейсами, маршрутами, dhcp, ipset и ipt-ratelimit. Моей целью было понять что такое accel и radius. И есть ли какие-то весомые аргументы использовать эту связку вместо самописных скриптов. Спасибо pppoetest за помощь, помог разобраться. Edited October 21, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 21, 2022 В 21.10.2022 в 13:01, 1boris сказал: И есть ли какие-то весомые аргументы использовать эту связку вместо самописных скриптов. Стандартизация, шаблонизация, простота горизонтального расширения, есть штатная возможность регулировать сессии м/у несколькими брасами, и т.д. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 24, 2022 (edited) Ошибся ) Edited October 24, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 24, 2022 (edited) В 17.10.2022 в 14:43, pppoetest сказал: Конечно можно, например по маку или что, кмк, лучше не стоит по опции 012. Вообще всем этим лучше всего рулить в радиусе. Есть схема: "Управляемый порт -> абонентская мыльница -> два абонентских устройства" Авторизация по MAC-адресам. Происходит следующее: 1)Первое устройство получает ip-адрес. 2)Второе устройство пытается получить ip-адрес Как только прилетает dhcp discover от второго устройства, первая сессия рвётся, а в логах: "debug: vlan3000.105: terminate", и пропадает интерфейс vlan3000.105. И пока я не перезапущу accel, интерфейс vlan3000.105 больше не создаётся. Если настроить старт сессии только по неклассифицированному пакету, то всё работает. Так должно быть или я что-то не так делаю? Edited October 25, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted October 24, 2022 (edited) Пробовал с relay. Первое устройство получает ip 10.0.0.2, сессия поднимается. Второе устройство шлёт discover, а accel шлёт "request for 10.0.0.2" на dhcp сервер. Получается, что при shared=0 нельзя поднимать две dhcp сессии с одного порта, так как accel думает, что клиент запрашивает продление аренды. Но при этом можно поднимать одну сессию по dhcp и сколько угодно сессий по неклассифицированному пакету. Может есть способ, но я что-то не так делаю? Всё работает, если использовать shared=1. Но тогда нельзя сменить устройство, пока сессия не завершится. Да и плодится целая куча ipoe интерфейсов. Edited October 25, 2022 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...