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