Настройка VPN сервера FreeBSD MPD
Материал из BiTel WiKi
Admin (Обсуждение | вклад) (→MPD 5.x) |
Amir (Обсуждение | вклад) м (Правки Oftipo (обсуждение) откачены к версии Admin) |
||
(7 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
== MPD 5.x == | == MPD 5.x == | ||
- | + | Есть нюансы по сбросу пользователя по SNMP, решение от 4ки не работает. | |
* http://www.bgbilling.ru/forum/viewtopic.php?t=737 | * http://www.bgbilling.ru/forum/viewtopic.php?t=737 | ||
* http://www.bgbilling.ru/forum/viewtopic.php?p=11738 | * http://www.bgbilling.ru/forum/viewtopic.php?p=11738 | ||
+ | |||
+ | === Вариант 1 - патч MPD === | ||
+ | |||
+ | Рабочая конфигурация MPD5 [[Медиа:Mpd5_config.zip]] + патч, позволяющий производить сброс пользователей MPD без авторизации: [[Медиа:Mpd5_patch.zip]] | ||
+ | В минимальной конфигурации killuser, closeiface, upiface, downiface, whong не нужны. В скрипте mpd.conf можно отключить вызов upiface и downiface. | ||
+ | |||
+ | === Вариант 2 - скрипт сброса passtest.sh, работающий с авторизацией по Web === | ||
+ | |||
+ | <source lang="bash"> | ||
+ | #!/bin/sh | ||
+ | |||
+ | if [ -z "$*" ]; then | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | mpd_user=login | ||
+ | mpd_pass=passw | ||
+ | |||
+ | if [ $1 = '-s' ]; then | ||
+ | if [ -n "$4" ]; then | ||
+ | URI="http://127.0.0.1:8080/bincmd?link%20L_pptp-$4&close" | ||
+ | HTTP_AUTH="basic:*:$mpd_user:$mpd_pass" fetch $URI | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | if [ $1 = '-g' ]; then | ||
+ | echo $2 | ||
+ | echo 'string' | ||
+ | echo "-" | ||
+ | fi | ||
+ | </source> | ||
+ | |||
+ | На get запросы (чтение SNMP ветки) возвращается просто -. get запросы использовались в старом режиме работы BGRadiusDialup checker для проверки активности соединения, в режиме update они не используются. Однако данная секция скрипта работает, т.к. перед установкой значения Net-Snmp производит чтение предыдущего значения. Видимо, чтобы не выполнять установку, если значение такое же, как было. | ||
+ | |||
+ | Пользователь, от которого производится сброс, должен быть указан в mpd.conf, как-то так: | ||
+ | |||
+ | <source lang="bash"> | ||
+ | startup: | ||
+ | # configure mpd users | ||
+ | set user login passw admin | ||
+ | # configure the web server | ||
+ | set web self 127.0.01 8080 | ||
+ | set web auth | ||
+ | set web open | ||
+ | </source> | ||
+ | |||
+ | Обратите внимание на префикс "L_pptp-", который добавляется к Nas-Port для получения номера линка. Данный префикс указывается в mpd.conf следующим образом: | ||
+ | |||
+ | <source lang="bash"> | ||
+ | startup: | ||
+ | create link template L_pptp pptp | ||
+ | </source> | ||
+ | |||
+ | И в конфигурации Net-Snmp snmp.conf: | ||
+ | |||
+ | <source lang="bash"> | ||
+ | com2sec billing X.X.X.X secret | ||
+ | group groupbill v2c billing | ||
+ | |||
+ | view all included .1.3.6.1.4.1.2021.255 ff.f0 | ||
+ | #context sec.model sec.level prefix read write notify | ||
+ | access groupbill "" v2c noauth prefix all all none | ||
+ | |||
+ | pass .1.3.6.1.4.1.2021.255 /bin/sh /usr/local/libexec/mpd/passtest.sh | ||
+ | </source> | ||
+ | |||
+ | Перенаправление SNMP запросов к ветке .1.3.6.1.4.1.2021.255 на скрипт passtest.sh. Коммюнити secret должен быть указан в конфигурации NAS. Вместо X.X.X.X - IP адрес, с которого приходят SNMP запросы на дисконнект от радиуса. Для сброса пользователя биллинг шлет запросы вида -s .1.3.6.1.4.1.2021.255.1 integer 72, где 72 - Nas-Port соединения. Net-Snmp передает запрос в виде 4х параметров скрипту passtest.sh. | ||
+ | |||
+ | Большое спасибо [[Участник:Boco|boco]] за помощь в разработке решения. | ||
== MPD 4.x == | == MPD 4.x == |
Текущая версия на 12:47, 28 марта 2013
Содержание |
MPD 5.x
Есть нюансы по сбросу пользователя по SNMP, решение от 4ки не работает.
- http://www.bgbilling.ru/forum/viewtopic.php?t=737
- http://www.bgbilling.ru/forum/viewtopic.php?p=11738
Вариант 1 - патч MPD
Рабочая конфигурация MPD5 Медиа:Mpd5_config.zip + патч, позволяющий производить сброс пользователей MPD без авторизации: Медиа:Mpd5_patch.zip В минимальной конфигурации killuser, closeiface, upiface, downiface, whong не нужны. В скрипте mpd.conf можно отключить вызов upiface и downiface.
Вариант 2 - скрипт сброса passtest.sh, работающий с авторизацией по Web
#!/bin/sh if [ -z "$*" ]; then exit 0 fi mpd_user=login mpd_pass=passw if [ $1 = '-s' ]; then if [ -n "$4" ]; then URI="http://127.0.0.1:8080/bincmd?link%20L_pptp-$4&close" HTTP_AUTH="basic:*:$mpd_user:$mpd_pass" fetch $URI fi fi if [ $1 = '-g' ]; then echo $2 echo 'string' echo "-" fi
На get запросы (чтение SNMP ветки) возвращается просто -. get запросы использовались в старом режиме работы BGRadiusDialup checker для проверки активности соединения, в режиме update они не используются. Однако данная секция скрипта работает, т.к. перед установкой значения Net-Snmp производит чтение предыдущего значения. Видимо, чтобы не выполнять установку, если значение такое же, как было.
Пользователь, от которого производится сброс, должен быть указан в mpd.conf, как-то так:
startup: # configure mpd users set user login passw admin # configure the web server set web self 127.0.01 8080 set web auth set web open
Обратите внимание на префикс "L_pptp-", который добавляется к Nas-Port для получения номера линка. Данный префикс указывается в mpd.conf следующим образом:
startup:
create link template L_pptp pptp
И в конфигурации Net-Snmp snmp.conf:
com2sec billing X.X.X.X secret group groupbill v2c billing view all included .1.3.6.1.4.1.2021.255 ff.f0 #context sec.model sec.level prefix read write notify access groupbill "" v2c noauth prefix all all none pass .1.3.6.1.4.1.2021.255 /bin/sh /usr/local/libexec/mpd/passtest.sh
Перенаправление SNMP запросов к ветке .1.3.6.1.4.1.2021.255 на скрипт passtest.sh. Коммюнити secret должен быть указан в конфигурации NAS. Вместо X.X.X.X - IP адрес, с которого приходят SNMP запросы на дисконнект от радиуса. Для сброса пользователя биллинг шлет запросы вида -s .1.3.6.1.4.1.2021.255.1 integer 72, где 72 - Nas-Port соединения. Net-Snmp передает запрос в виде 4х параметров скрипту passtest.sh.
Большое спасибо boco за помощь в разработке решения.
MPD 4.x
MPD 4.x версии доступен из портов, никакая адаптация для его работы с биллингом не требуется.
Конфигурационные файлы для настройки MPD можно загрузить Медиа:mpd4_files.zip. Все скрипты кроме 001-netflow.sh, 002-mpd.sh рассчитаны на размещение в каталоге /usr/local/libexec/mpd/.
Скрипты запуска MPD и настройки NetFlow 001-netflow.sh, 002-mpd.sh размещаются в /usr/local/etc/rc.d/. В качестве NetFlow агента используется ng_netflow, доступный сразу в FreeBSD 6 и новее.
Для правильного функционирования необходимо убедится что в вашей системе установлен netcat, он используется в скрипте passtest.sh для передачи сигнала о разрыве сессии на сокет управления MPD.
Скрипт вызывается net-snmp демоном, при получении запроса на OID .1.3.6.1.4.1.2021.255. Конфигурация snmpd.conf также доступна на FTP. Замените x.x.x.x secret на IP адрес RADIUS сервера, с которого запросы попадут на snmpd и SNMP communtity, идентичный введенному в конфигурации NASа.
Разрыв по SNMP-не основной механизм прерывания сессий, он используется для срочного сброса клиентов через монитор модуля DialUP, либо через консольное управление. Кроме разрыва по SNMP RADIUS передает атрибут mpd-drop-user в ACCOUNTING RESPONSE пакете.
Для MPD NASов должен быть растроен режим тарификации UPDATE в биллинге, т.е. обсчеты идут по получению UPDATE пакетов. У NASа должен быть установлен вендор MPD, на основании этого RADIUS будет слать drop-атрибут.
MPD позволяет передавать опции скорости канала через RADIUS атрибуты.
Например, можно создать несколько наборов атрибутов в конфигурации модуля.
attrset.1.title=Скорость 64-Арена attrset.1.attributes=mpd-filter=1#1=match dst net 82.200.107.0/27 and src net 192.168.120.0/24;mpd-filter=2#1=match src net 82.200.107.0/27 and dst net 192.168.120.0/24;mpd-limit=in#1=flt1 pass;mpd-limit=in#2=all shape 64000 4000 pass;mpd-limit=out#1=flt2 pass;mpd-limit=out#2=all shape 64000 4000 pass; #для сетки 82.200.107.0/27 и 192.168.120.0/24 без ограничений #для остально интернета первые 4 кб без ограничений, потом скорость ограничивается до 64 кб/с
Либо более простой пример:
attrset.1.title=Канал 64 attrset.1.attributes=mpd-limit=out#1=all shape 60000 pass;mpd-limit=in#1=all rate-limit 10000000 pass attrset.2.title=Канал 128 attrset.2.attributes=mpd-limit=out#1=all shape 128000 pass;mpd-limit=in#1=all rate-limit 10000000 pass attrset.3.title=Канал 256 attrset.3.attributes=mpd-limit=out#1=all shape 256000 pass;mpd-limit=in#1=all rate-limit 10000000 pass attrset.4.title=Канал 512 attrset.4.attributes=mpd-limit=out#1=all shape 512000 pass;mpd-limit=in#1=all rate-limit 10000000 pass