POPTOP,RADUIS-атрибуты и SHAPER

Технические вопросы по UTM 5.0
A!eX-gRey
Сообщения: 82
Зарегистрирован: Вт май 17, 2005 18:52

POPTOP,RADUIS-атрибуты и SHAPER

Сообщение A!eX-gRey »

Настройка NAS (VPN/PPTP) с RADIUS авторизацией и
ограничение полосы пропускания через 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
############################
Конфигурация POPTOP
содержание /etc/pptpd.conf

Код: Выделить всё

#путь до файла с настройками для pppd
option /etc/ppp/options.pptpd
noipparam
logwtmp
localip IP_АДРЕС_PPP_СЕРВЕРНОЙ_СТОРОНЫ
запускаем pptpd
#/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
Добавляем в /etc/radiusclient-ng/radiusclient.conf строку типа:

Код: Выделить всё

IP_ВАШЕГО_RADIUS_СЕРВЕРА	СЕКРЕТНОЕ_СЛОВО
Добавляем RADIUS-словари Microsoft
создаём фаил /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
добавляем в конец файла /etc/radiusclient-ng/dictionary строки

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
если получим отрицательный ответ смотрим логи, читаем F.A.Q.
радуемся строчке "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
*у меня такой способ не сработал.. этот скрипт добавлял в /etc/ppp/ip-up
ничего сложного..
при желании можно приделать и автоматически включать 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:
Не помню.. но где-то находил решение..

andrey_p
Сообщения: 17
Зарегистрирован: Пн май 30, 2005 15:19
Откуда: Мирный, Якутия

Сообщение andrey_p »

Vendor:0;Attr:230;Val:{Скорость UpStream в Кбитах/с} тип String
Vendor:0;Attr:230;Val:{Скрость DownStream в Кбитах/с} тип String
Есть ли возможность Val более 999 поставить? у меня не выходит linux 2.6.21-1

A!eX-gRey
Сообщения: 82
Зарегистрирован: Вт май 17, 2005 18:52

Сообщение A!eX-gRey »

andrey_p писал(а):
Vendor:0;Attr:230;Val:{Скорость UpStream в Кбитах/с} тип String
Vendor:0;Attr:230;Val:{Скрость DownStream в Кбитах/с} тип String
Есть ли возможность Val более 999 поставить? у меня не выходит linux 2.6.21-1
можно в /etc/ppp/ip-up ввести коэфициенты
например добавить строчки
UPSPEED=$[$UPSPEED*4]
DOWNSPEED=$[$DOWNSPEED*4]

и теперь в 4 раза больше чем выставил в атрибутах

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

case в баше тоже никто пока не отменил. ;) Раз уж радиус Нетапа не умеет делать парметры больше 999, надо их подставлять в скрипте. Вот так, например (привожу свой скрипт):

Код: Выделить всё

if [ "$DOWNSPEED" != "0" ] ;

           then
           case $DOWNSPEED in
            824) DOWNSPEED=`expr $DOWNSPEED + 200`;;
            860) DOWNSPEED=`expr $DOWNSPEED + 1700`;;
            836) DOWNSPEED=`expr $DOWNSPEED + 700`;;
            812) DOWNSPEED=`expr $DOWNSPEED + 2900`;;
            900) DOWNSPEED=`expr $DOWNSPEED + 9100`;;
            *) k=1;;
            esac
От где-то так. k=1 - это я так, для понту. :lol: Это скорости моих безлимитов, естественно.

avegad
Сообщения: 54
Зарегистрирован: Чт сен 20, 2007 08:39

Сообщение avegad »

Код: Выделить всё

##### 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
а подскажите что еще нужно сюда добавить что бы исходящий канал абонента можно было увеличить на определенную подсеть.

т.е в инет одна скорость, а на гейм-сервера локальные другая

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

Возможно, вот так:
/sbin/tc filter add dev $1 parent ffff: protocol ip prio 40 u32 match ip dst ip_игрового_сервака police rate "МОЯ_СКОРОСТЬ"kbit burst 12k

Не уверен, что будет работать, но проверьте. входящая очередь - штука капризная. Классы, например, в ней делать нельзя.

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

Кстати. Где-то встретил вот такую рекомендацию установки бёрста:
burst=`echo $UPSPEED/100+2 | bc 2>/dev/null`

avegad
Сообщения: 54
Зарегистрирован: Чт сен 20, 2007 08:39

Сообщение avegad »

SOLDIER писал(а):Возможно, вот так:
/sbin/tc filter add dev $1 parent ffff: protocol ip prio 40 u32 match ip dst ip_игрового_сервака police rate "МОЯ_СКОРОСТЬ"kbit burst 12k

Не уверен, что будет работать, но проверьте. входящая очередь - штука капризная. Классы, например, в ней делать нельзя.

Код: Выделить всё

###DOWN
/sbin/tc qdisc add dev $IF handle ffff: ingress
###LAN
/sbin/tc filter add dev $IF parent ffff: protocol ip prio 50 u32 match ip dst 89.xxx.yyy.zzz/28 police rate ${SPEEDIN}kbit burst 12k drop flowid :1
###INET
/sbin/tc filter add dev $IF parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${SPEED}kbit burst 12k drop flowid :1

$SPEENIN=8500Kbit
$SPEED=128Kbit

не работает :(

принимает только последнее правило т.е скорость что на сервак что в инет равна 128Kbit

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

Тогда, наверное, не работают фильтры в ингресс. Могу предложить тогда маркировать пакеты iptables и через fwmark (или как там?) загонять в фильтр и сливать в класс. Точное правило сейчас лень рожать.

SOLDIER
Сообщения: 649
Зарегистрирован: Чт мар 16, 2006 18:07

Сообщение SOLDIER »

Кстати - посмотрите - чего кажет вот эта команда - tc -s -d -r filter show dev pppN root Ну, ppp выставить нужный естественно.

avegad
Сообщения: 54
Зарегистрирован: Чт сен 20, 2007 08:39

Сообщение avegad »

Код: Выделить всё

 tc -s -d -r filter show dev ppp18 root

filter parent ffff: protocol ip pref 50 u32
filter parent ffff: protocol ip pref 50 u32 fh 800:[80000000]  ht divisor 1
filter parent ffff: protocol ip pref 50 u32 fh 800::800[80000800]  order 2048 key ht 800 bkt 0 flowid :1
police 21f6 action drop rate 128Kbit burst 12Kb mtu 2Kb [000bb800]
  match 00000000/00000000 at 12
 Sent 4140 bytes 42 pkts (dropped 0, overlimits 0)
Правила на LAN не видно.

Cyber
Сообщения: 153
Зарегистрирован: Ср сен 28, 2005 11:36
Откуда: Volgograd

Сообщение Cyber »

Я так понял этот вариант для конфигурации когда одна сетевая в инет, другая в локалку, а если такой вариант наса:
1сетевуха - инет лимитный
2сетевуха - инет безлимитный
3сетевуха - локалка

две подсетки VPN
два ната для них
Выполняю вот такой скрипт:
#!/bin/sh
IP1=172.30.2.70 (сетевая карта 1 прова)
IP2=192.168.0.2 (сетевая карта 2 прова)
G1=172.30.2.69 (шлюз 1 прова)
G2=192.168.0.1 (шлюз 2 прова)
ip route add default via $G1 dev eth0 table T1
ip route add default via $G2 dev eth2 table T2
ip route add default via $G1
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
ip rule add from 172.21.0.0/24 table T2 (сеть для другого ната)
route add -net 172.21.0.0/24 dev eth2 gw 192.168.0.1 (ходить на второй шлюз)
ip route flush cache

в зависимости от тарифа добавляются разные правила

Подскажите как для такой схемы организовать шейпинг для безлимитных сессий.
Спасибо!

Cramac
Сообщения: 454
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

...

Kinne
Сообщения: 1
Зарегистрирован: Пт фев 20, 2009 16:07

Сообщение Kinne »

Hi,

I do have a working RADIUS server, which I already use without any problems for 802.1x users.

With pptpd I have some problems:

Feb 20 13:45:05 vpn3pptpd[5403]: CTRL: Client 72.214.185.105 control connection started
Feb 20 13:45:05 vpn3pptpd[5403]: CTRL: Starting call (launching pppd, opening GRE)
Feb 20 13:45:05 vpn3pppd[5404]: Plugin radius.so loaded.
Feb 20 13:45:05 vpn3pppd[5404]: RADIUS plugin initialized.
Feb 20 13:45:05 vpn3pppd[5404]: Plugin radattr.so loaded.
Feb 20 13:45:05 vpn3pppd[5404]: RADATTR plugin initialized.
Feb 20 13:45:05 vpn3pppd[5404]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Feb 20 13:45:05 vpn3pppd[5404]: pppd 2.4.4 started by root, uid 0
Feb 20 13:45:05 vpn3pppd[5404]: Using interface ppp0
Feb 20 13:45:05 vpn3pppd[5404]: Connect: ppp0 <--> /dev/pts/2
Feb 20 13:45:08 vpn3pptpd[5403]: CTRL: Ignored a SET LINK INFO packet with real ACCMs!
Feb 20 13:45:32 vpn3pptpd[5403]: CTRL: Reaping child PPP[5404]
Feb 20 13:45:38 vpn3pppd[5404]: rc_send_server: no reply from RADIUS server ldap.mydomain.de:1812
Feb 20 13:45:38 vpn3pppd[5404]: Peer User1 failed CHAP authentication
Feb 20 13:45:38 vpn3pppd[5404]: Modem hangup
Feb 20 13:45:38 vpn3pppd[5404]: Connection terminated.
Feb 20 13:45:38 vpn3pppd[5404]: Exit.
Feb 20 13:45:38 vpn3pptpd[5403]: CTRL: Client 72.214.185.105 control connection finished




So, "rc_send_server: no reply from RADIUS server ldap.mydomain.de:1812" is the problem. firewall is open, but there&#180;s no answer. I can ping ldap.mydomain.de without any problems. Btw, ldap.mydomain.de is a Windows 2003 server with IAS.

Also, what does the "CTRL: Ignored a SET LINK INFO packet with real ACCMs! CTRL: Reaping child PPP[5404] " mean?



I googled for some time, but I haven&#180;t found any answer.
Where could be the problem?

XAMeLeOH
Сообщения: 1
Зарегистрирован: Ср июл 22, 2009 07:09

Re: POPTOP,RADUIS-атрибуты и SHAPER

Сообщение XAMeLeOH »

A!eX-gRey писал(а): собственно сам шейпер
предлагают создать фаил /etc/ppp/ip-up.local c содержанием:

Код: Выделить всё

 if &#91; -f /var/run/radattr.$1 &#93;
   then
   DOWNSPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ &#123;print $2&#125;'  /var/run/radattr.$1`
   UPSPEED=`/bin/awk  '/PPPD-Upstream-Speed-Limit/ &#123;print $2&#125;'  /var/run/radattr.$1`
   FILTERS=`/bin/awk  '/Filter-Id/ &#123;print $2&#125;'  /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 &#91; "$UPSPEED" != "0" &#93; ;
   then
     /sbin/tc qdisc add dev $1 root handle 1&#58; htb default 20 r2q 1
     /sbin/tc class add dev $1 parent 1&#58; classid 1&#58;1 htb rate $&#123;UPSPEED&#125;kbit burst 4k
     /sbin/tc class add dev $1 parent 1&#58;1 classid 1&#58;10 htb rate $&#123;UPSPEED&#125;kbit burst 4k prio 1
     /sbin/tc class add dev $1 parent 1&#58;1 classid 1&#58;20 htb rate $&#123;UPSPEED&#125;kbit burst 4k prio 2
     /sbin/tc qdisc add dev $1 parent 1&#58;10 handle 10&#58; sfq perturb 10 quantum 1500
     /sbin/tc qdisc add dev $1 parent 1&#58;20 handle 20&#58; sfq perturb 10 quantum 1500
     /sbin/tc filter add dev $1 parent 1&#58;0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1&#58;10
     /sbin/tc filter add dev $1 parent 1&#58;0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1&#58;10
     /sbin/tc filter add dev $1 parent 1&#58; 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&#58;10
   fi
 ##### speed client->server
   if &#91; "$DOWNSPEED" != "0" &#93; ;
   then
     /sbin/tc qdisc add dev $1 handle ffff&#58; ingress
     /sbin/tc filter add dev $1 parent ffff&#58; protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $&#123;DOWNSPEED&#125;kbit burst 12k drop flowid &#58;1
   fi
 fi
*у меня такой способ не сработал.. этот скрипт добавлял в /etc/ppp/ip-up
ничего сложного..
Не сработал в local потому что в ip-up есть строка:

Код: Выделить всё

exec /etc/ppp/ip-up.local "$*"
Таким образом все полученные аргументы в скрипте local идут как один. Можно в самом начале скрипта сделать запись вида:

Код: Выделить всё

   IFACE=`/bin/echo "$@" | /usr/bin/gawk '&#123;print $1&#125;' /dev/stdin`
И заменить везде $1 на $IFACE

Закрыто