ограничение полосы пропускания через RADIUS атрибуты на FedoreCore7 Linux
Отступление
Думаю данная статья подойдет для любой ос на корой будет возможность собрать или установить ниже перечисленные пакеты.
Подразумеваться что RADUIS настроен и добавлен пользователь test и пароль test,
а также что человек имеет представление и понимает что делает.
Данная статья написанная на личном опыте.
Не ругайте за грамотность, поскольку безграмотен и невнимателен
Установка пакетов
необходимые пакеты:
ppp-2.4.4-2
pptpd-1.3.4-1.fc7.1
radiusclient-ng-0.5.6-2.fc7
radiusclient-ng-utils-0.5.6-2.fc7
если собираетесь использовать mppe:
kernel_ppp_mppe-1.0.2-3dkms
(у меня пока что не получилось настроить на одновременную работу CHAP и MS-CHAPv1,v2)
(не считаю важным использовать mppe в локальных сетях для выхода,
по скольку сильнее грузит систему)
устанавливаем с помощью yum:
#yum install ppp pptpd radiusclient-ng radiusclient-ng-utils
Предварительная настройка
в /etc/sysctl.conf находим net.ipv4.ip_forward = 0
выставляем значение 1
Настройка NAS с локальной авторизации.
конфигурация pppd
Код: Выделить всё
/etc/ppp/options.pptpd
##### config ###############
local
name pptpd
#Настраиваем тип авторизации
refuse-pap
require-chap
require-mschap
refuse-mschap-v2
refuse-mppe
#Ваши DNS, второй можно не писать
ms-dns IP_ВАШЕГО_DNS_СЕРВЕРА
ms-dns IP_ВАШЕГО_DNS_СЕРВЕРА_2
#Если необходимо включаем поддержку proxyarp
#proxyarp
logfile /var/log/pppd.log
lock
#отключаем компрессию
nobsdcomp
novj
novjccomp
#Отключаем протоколы которые не хотим поддерживать
noipv6
noipx
#Выставляем размер пакета по умолчанию
mtu 1462
mru 1462
nologfd
lcp-echo-failure 30
lcp-echo-interval 5
#Для тестов комментируем поддержку RADIUS
#plugin radius.so
#plugin radattr.so
############################
содержание /etc/pptpd.conf
Код: Выделить всё
#путь до файла с настройками для pppd
option /etc/ppp/options.pptpd
noipparam
logwtmp
localip IP_АДРЕС_PPP_СЕРВЕРНОЙ_СТОРОНЫ
#/etc/init.d/pptpd start
Проверка работоспособности
добавляем в /etc/ppp/chap-secrets строку
test * test 10.20.20.1
#echo "test * test 10.20.20.1" >> /etc/ppp/chap-secrets
Пробуем подключиться с логином и паролем: test и test соответственно
** при создании подключения в Windows надо, в свойства->Безопасность, снять галочку «Требовать шифрование иначе отключиться».
Должно подключиться адрес должен выдаться 10.20.20.1
если нет смотрим логи, сверяем конфиги, думаем... или используем google
Настройка RADIUS авторизации.
создаем симлинк
#ln -s /etc/radiusclient-ng /etc/radiusclient
/etc/radiusclient-ng/radiusclient.conf оставил по умолчанию поменял только authserver и acctserver
Содержимое /etc/radiusclient-ng/radiusclient.conf
Код: Выделить всё
auth_order radius
login_tries 4
login_timeout 60
nologin /etc/nologin
issue /etc/radiusclient-ng/issue
authserver IP_ВАШЕГО_RADIUS_СЕРВЕРА:1812
acctserver IP_ВАШЕГО_RADIUS_СЕРВЕРА:1813
servers /etc/radiusclient-ng/servers
dictionary /etc/radiusclient-ng/dictionary
login_radius /usr/sbin/login.radius
seqfile /var/run/radius.seq
mapfile /etc/radiusclient-ng/port-id-map
default_realm
radius_timeout 10
radius_retries 3
login_local /bin/login
Код: Выделить всё
IP_ВАШЕГО_RADIUS_СЕРВЕРА СЕКРЕТНОЕ_СЛОВО
создаём фаил /etc/radiusclient/dictionary.merit с содержанием:
Код: Выделить всё
#
# Experimental extensions, configuration only (for check-items)
# Names/numbers as per the MERIT extensions (if possible).
#
ATTRIBUTE NAS-Identifier 32 string
ATTRIBUTE Proxy-State 33 string
ATTRIBUTE Login-LAT-Service 34 string
ATTRIBUTE Login-LAT-Node 35 string
ATTRIBUTE Login-LAT-Group 36 string
ATTRIBUTE Framed-AppleTalk-Link 37 integer
ATTRIBUTE Framed-AppleTalk-Network 38 integer
ATTRIBUTE Framed-AppleTalk-Zone 39 string
ATTRIBUTE Acct-Input-Packets 47 integer
ATTRIBUTE Acct-Output-Packets 48 integer
# 8 is a MERIT extension.
VALUE Service-Type Authenticate-Only 8
и /etc/radiusclient/dictionary.ms с содержанием:
Код: Выделить всё
# Microsoft's VSA's, from RFC 2548
#
# $Id: dictionary.microsoft,v 1.1 2002/03/06 13:23:09 dfs Exp $
#
VENDOR Microsoft 311 Microsoft
ATTRIBUTE MS-CHAP-Response 1 string Microsoft
ATTRIBUTE MS-CHAP-Error 2 string Microsoft
ATTRIBUTE MS-CHAP-CPW-1 3 string Microsoft
ATTRIBUTE MS-CHAP-CPW-2 4 string Microsoft
ATTRIBUTE MS-CHAP-LM-Enc-PW 5 string Microsoft
ATTRIBUTE MS-CHAP-NT-Enc-PW 6 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Policy 7 string Microsoft
# This is referred to as both singular and plural in the RFC.
# Plural seems to make more sense.
ATTRIBUTE MS-MPPE-Encryption-Type 8 string Microsoft
ATTRIBUTE MS-MPPE-Encryption-Types 8 string Microsoft
ATTRIBUTE MS-RAS-Vendor 9 integer Microsoft
ATTRIBUTE MS-CHAP-Domain 10 string Microsoft
ATTRIBUTE MS-CHAP-Challenge 11 string Microsoft
ATTRIBUTE MS-CHAP-MPPE-Keys 12 string Microsoft
ATTRIBUTE MS-BAP-Usage 13 integer Microsoft
ATTRIBUTE MS-Link-Utilization-Threshold 14 integer Microsoft
ATTRIBUTE MS-Link-Drop-Time-Limit 15 integer Microsoft
ATTRIBUTE MS-MPPE-Send-Key 16 string Microsoft
ATTRIBUTE MS-MPPE-Recv-Key 17 string Microsoft
ATTRIBUTE MS-RAS-Version 18 string Microsoft
ATTRIBUTE MS-Old-ARAP-Password 19 string Microsoft
ATTRIBUTE MS-New-ARAP-Password 20 string Microsoft
ATTRIBUTE MS-ARAP-PW-Change-Reason 21 integer Microsoft
ATTRIBUTE MS-Filter 22 string Microsoft
ATTRIBUTE MS-Acct-Auth-Type 23 integer Microsoft
ATTRIBUTE MS-Acct-EAP-Type 24 integer Microsoft
ATTRIBUTE MS-CHAP2-Response 25 string Microsoft
ATTRIBUTE MS-CHAP2-Success 26 string Microsoft
ATTRIBUTE MS-CHAP2-CPW 27 string Microsoft
ATTRIBUTE MS-Primary-DNS-Server 28 ipaddr Microsoft
ATTRIBUTE MS-Secondary-DNS-Server 29 ipaddr Microsoft
ATTRIBUTE MS-Primary-NBNS-Server 30 ipaddr Microsoft
ATTRIBUTE MS-Secondary-NBNS-Server 31 ipaddr Microsoft
#ATTRIBUTE MS-ARAP-Challenge 33 string Microsoft
#
# Integer Translations
#
# MS-BAP-Usage Values
VALUE MS-BAP-Usage Not-Allowed 0
VALUE MS-BAP-Usage Allowed 1
VALUE MS-BAP-Usage Required 2
# MS-ARAP-Password-Change-Reason Values
VALUE MS-ARAP-PW-Change-Reason Just-Change-Password 1
VALUE MS-ARAP-PW-Change-Reason Expired-Password 2
VALUE MS-ARAP-PW-Change-Reason Admin-Requires-Password-Change 3
VALUE MS-ARAP-PW-Change-Reason Password-Too-Short 4
# MS-Acct-Auth-Type Values
VALUE MS-Acct-Auth-Type PAP 1
VALUE MS-Acct-Auth-Type CHAP 2
VALUE MS-Acct-Auth-Type MS-CHAP-1 3
VALUE MS-Acct-Auth-Type MS-CHAP-2 4
VALUE MS-Acct-Auth-Type EAP 5
# MS-Acct-EAP-Type Values
VALUE MS-Acct-EAP-Type MD5 4
VALUE MS-Acct-EAP-Type OTP 5
VALUE MS-Acct-EAP-Type Generic-Token-Card 6
VALUE MS-Acct-EAP-Type TLS 13
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.ms
за более подробной информацией обращаемся
http://www.members.optushome.com.au/~ws ... 8.htm#dict
В блилленге должен быть создан пользователь для RADIUS авторизации test/test
если нет, то создаём.
проверка работы RADIUS авторизации
#radlogin
вводим логин/пароль: test/test
видим следующее содержимое
Код: Выделить всё
RADIUS: Authentication OK
This is the dummy login.radius script. If you want that this script
does something useful you'll have to replace it.
The following RADIUS environment variables are set:
RADIUS_FRAMED_IP_ADDRESS=IP_ИЗ_БИЛЛИНГА
RADIUS_FRAMED_IP_NETMASK=255.255.255.255
RADIUS_FRAMED_PROTOCOL=PPP
RADIUS_FRAMED_ROUTING=None
RADIUS_NONENAME=60
RADIUS_SERVICE_TYPE=Framed-User
RADIUS_SESSION_TIMEOUT=864000
RADIUS_USER_NAME=test
радуемся строчке "RADIUS: Authentication OK"
разкомментируем в /etc/ppp/options.pptpd строки:
Код: Выделить всё
plugin radius.so
plugin radattr.so
Настройка шейпера.
При создании подключения генерируется временны фаил /var/run/radattr.pppXX,
где pppXX соответствует интерфейсам ppp
в нем хранятся RADIUS атрибуты. фаил существует пока интерфейс поднят.
добавляем в RADIUS словарь /etc/radiusclient-ng/dictionary дополнительные атрибуты:
Код: Выделить всё
ATTRIBUTE PPPD-Upstream-Speed-Limit 230 string
ATTRIBUTE PPPD-Downstream-Speed-Limit 231 string
в биллинге добавляю RADIUS атрибуты:
Vendor:0;Attr:230;Val:{Скорость UpStream в Кбитах/с} тип String
Vendor:0;Attr:230;Val:{Скрость DownStream в Кбитах/с} тип String
либо для NAS, либо в услуге
можно проверить:
подключиться и выполнить cat /var/run/radattr.pppXX (pppXX имя интерфейса по которому подключились)
ищем строки:
PPPD-Upstream-Speed-Limit
PPPD-Downstream-Speed-Limit
или
#radlogin
логин/пароль и ищем строки:
RADIUS_PPPD_DOWNSTREAM_SPEED_LIMIT=ВАШЕ_ЗНАЧЕНИЕ
RADIUS_PPPD_UPSTREAM_SPEED_LIMIT=ВАШЕ_ЗНАЧЕНИЕ
если если нет проверяйте биллинг. Для проверки добавил эти атрибуты пулу, убедившись что всё работает стал искать как правильно добавить их услугам
собственно сам шейпер
предлагают создать фаил /etc/ppp/ip-up.local c содержанием:
Код: Выделить всё
if [ -f /var/run/radattr.$1 ]
then
DOWNSPEED=`/bin/awk '/PPPD-Downstream-Speed-Limit/ {print $2}' /var/run/radattr.$1`
UPSPEED=`/bin/awk '/PPPD-Upstream-Speed-Limit/ {print $2}' /var/run/radattr.$1`
FILTERS=`/bin/awk '/Filter-Id/ {print $2}' /var/run/radattr.$1`
/sbin/tc qdisc del dev $1 root > /dev/null
/sbin/tc qdisc del dev $1 ingress > /dev/null
##### speed server->client
if [ "$UPSPEED" != "0" ] ;
then
/sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 1
/sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit burst 4k
/sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit burst 4k prio 1
/sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit burst 4k prio 2
/sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1500
/sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1500
/sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
/sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
/sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
fi
##### speed client->server
if [ "$DOWNSPEED" != "0" ] ;
then
/sbin/tc qdisc add dev $1 handle ffff: ingress
/sbin/tc filter add dev $1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DOWNSPEED}kbit burst 12k drop flowid :1
fi
fi
ничего сложного..
при желании можно приделать и автоматически включать NAT и FORWARD.. я думаю всё что сможешь в BASH все можно.. можно и атрибуты другие задавать та что в ваших руках не ограниченный функционал.
пока не нашёл как сделать так что бы RADIUS обрывал ppp-сесию, но думаю это возможно.. на хужой конец буду связываться с разработчикм radiusclirnt-ng(елси я не ошибся, то он руссий проблем думаю не будет)
Всем Спасибо.. не пинайте сильно это мой первый мануал.
F.A.Q.
F.A.Q. основан на моих ошибках и несколько воссозданных ситуаций.
нет 100% уверенности что проблемы решаются так как написано, это просто мой опыт
если F.A.Q. будет поправляться и пополняться буду рад.
Q:
Соединиться не удалось в логах строки:
rc_read_config: can't open /etc/radiusclient/radiusclient.conf: No such file or directory
RADIUS: Can't read config file /etc/radiusclient/radiusclient.conf
A:
Возможно не стоит radiusclient-ng.
Если стоит radiusclient-ng, то создать симлинк
#ln -s /etc/radiusclient-ng /etc/radiusclient
Q:
Соединиться не удалось в логах строки:
rc_avpair_new: unknown attribute 11
rc_avpair_new: unknown attribute 25
A:
Нет словаря microsoft в radiusclient
Как Установить описано в пункте "Настройка RADIUS авторизации".
или http://www.members.optushome.com.au/~ws ... 8.htm#dict
Q:
Соединение есть, но в логах есть строки
CTRL: EOF or bad error reading ctrl packet length.
CTRL: couldn't read packet header (exit)
CTRL: CTRL read failed
A:
Некорректны выставлены MTU/MRU для ваших настроек решение проблемы
изменить или дописать в /etc/ppp/options.pptp строки:
mtu 1462
mru 1462
удалил
nomp
Q:
Cannot determine ethernet address for proxy ARP
A:
pppd не нашел интерфейс с адресацией выданной клиенту. возникает когда включен proxyarp
либо выключить proxyarp
если все же proxyarp нужен, то проверить чтобы адреса выдаваемые клиенту выдавались и подсети одного из интерфейсов.
добавить bcrelay eth0 в /etc/pptpd.conf перезапустить pptpd
Q:
при подключении не создался фаил /var/run/radattr.pppXX
A:
вероятней всего не подгрузилась ббиблиотека radattr.so
проверить её наличие в системе
проверить не закомментирована ли строка radattr.so в /etc/ppp/options.pptpd
проверить логи "RADATTR plugin initialized." надпись сообщает что все хорошо
Q:
Соединение устанавливаться все работает.. но в логах строка
CTRL: Ignored a SET LINK INFO packet with real ACCMs!
A:
Не помню.. но где-то находил решение..