Перейти к содержимому
Калькуляторы

accel-ppp ipoe, radius

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

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@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.

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 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 или прописывать статику?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Для того, чтобы использовать 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).

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

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 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, и различного рода спецслужбы очень рады радиусу и логам сессий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 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,";
    }
?>

 

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

@YuryD 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

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

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

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

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ошибся )

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 


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

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

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

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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


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

Изменено пользователем 1boris

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.