Jump to content
Калькуляторы

up-limiter не может быть tbf. должен быть police

спасибо , исправил, но не режет.

 

 

accel-ppp# show sessions
ifname | username |    calling-sid    |      ip      | rate-limit  | type  | comp | state  |  uptime  
--------+----------+-------------------+--------------+-------------+-------+------+--------+----------
ppp0   | roys6    | 34:15:9e:1c:64:06 | 172.30.100.1 | 21000/21000 | pppoe |      | active | 00:02:02 

 

 

root@pppoe3a:~# tc qdisc
qdisc mq 0: dev eth1 root 
qdisc mq 0: dev eth3 root 
qdisc mq 0: dev eth4 root 
qdisc mq 0: dev eth5 root 
qdisc tbf 1: dev ppp0 root refcnt 2 rate 21000Kbit burst 262500b lat 50.0ms 
qdisc ingress ffff: dev ppp0 parent ffff:fff1 ---------------- 

 

P.S . все режет !! Спасибо)

Edited by roysbike

Share this post


Link to post
Share on other sites

accel передает NAS-Port-Type = Virtual, а для PPPoE вроде должно быть Ethernet ,

PPP вроде как должно быть, не?

Share this post


Link to post
Share on other sites

accel передает NAS-Port-Type = Virtual, а для PPPoE вроде должно быть Ethernet ,

PPP вроде как должно быть, не?

У меня в MPD при подключении PPPoE NAS-Port-Type=Ethernet, а при подключении L2TP/PPTP NAS-Port-Type=Virtual . Может и не верно, вот и хочу спросить у Xeb.

Share this post


Link to post
Share on other sites

roysbike,

К сожалению, я уже точно не помню - давно это было :).

Где-то в аргументах скрипту ip-change (так же, как ip-up, ip-down и тд) приходит имя интерфейса.

Потом нужно разбирать файл /var/run/radattr.$IFACE - там будет список всех этих ваших атрибутов. Можно сделать grep My-Custom-Redirect-Attribute /var/run/radattr.$IFACE и потом cut/awk.

Но вообще вот именно так

/bin/echo "My-Custom-Redirect-Attribute+=\"172.30.100.1\""  | /usr/bin/radclient -x 172.29.0.12:3799 coa testing123

делать нельзя, т.к. в CoA конкретно должен быть указан пользователь (либо acct-session-id) и nas ip address.

Сделал , coa отпрваляется без ошибок, атрибут добавил в словарь . но в /var/run/radattr.$IFACE видно только Framed-IP-Address.

 

echo "ip-change=1,Framed-IP-Address=172.30.0.200" | radclient -d /usr/local/share/accel-ppp/radius/ -x 10.10.0.2:3799 coa testing123

Как я понял , должен появится атрубут ip-change=1 в /var/run/radattr.$IFACE ?

Да, должен появиться.

Если не появился - либо его нет где-то в словаре, либо еще какая бяка. Смотрите лог accel-ppp (включите debug RADIUS-а) - приходит ли что-нибудь.

Share this post


Link to post
Share on other sites

roysbike,

К сожалению, я уже точно не помню - давно это было :).

Где-то в аргументах скрипту ip-change (так же, как ip-up, ip-down и тд) приходит имя интерфейса.

Потом нужно разбирать файл /var/run/radattr.$IFACE - там будет список всех этих ваших атрибутов. Можно сделать grep My-Custom-Redirect-Attribute /var/run/radattr.$IFACE и потом cut/awk.

Но вообще вот именно так

/bin/echo "My-Custom-Redirect-Attribute+=\"172.30.100.1\""  | /usr/bin/radclient -x 172.29.0.12:3799 coa testing123

делать нельзя, т.к. в CoA конкретно должен быть указан пользователь (либо acct-session-id) и nas ip address.

Сделал , coa отпрваляется без ошибок, атрибут добавил в словарь . но в /var/run/radattr.$IFACE видно только Framed-IP-Address.

 

echo "ip-change=1,Framed-IP-Address=172.30.0.200" | radclient -d /usr/local/share/accel-ppp/radius/ -x 10.10.0.2:3799 coa testing123

Как я понял , должен появится атрубут ip-change=1 в /var/run/radattr.$IFACE ?

Да, должен появиться.

Если не появился - либо его нет где-то в словаре, либо еще какая бяка. Смотрите лог accel-ppp (включите debug RADIUS-а) - приходит ли что-нибудь.

Все таки не допонял. А что в конифге accel-ppp указывать, как он схавает атрибут.

 

[pppd-compat]
#ip-pre-up=/etc/ppp/ip-pre-up
ip-up=/etc/ppp/ip-up
ip-down=/etc/ppp/ip-down
ip-change=/etc/ppp/ip-change
radattr-prefix=/var/run/radattr
verbose=1

дописать чтоли строчку про атрибут?

 

отправляю так

 

echo "Framed-IP-Address=172.30.100.1,PPPD-Redirect-Attribute=1" | radclient -x 172.29.0.12:3799 coa testing123

 

в словаре добавил

ATTRIBUTE PPPD-Redirect-Attribute 9999 integer

Edited by roysbike

Share this post


Link to post
Share on other sites

Можно ли заюзать ATTRIBUTE L4-Redirect 242 integer для PPPoE?

Share this post


Link to post
Share on other sites

Работает ли аксел в режиме IPOE l3 DHCP по схеме:

пользователь-> коммутатор -> маршрутизатор-релей -> аксел

или

пользователь-> коммутатор -> маршрутизатор-релей -> аксел(релей) -> dhcp сервер

Share this post


Link to post
Share on other sites

в словаре добавил

ATTRIBUTE PPPD-Redirect-Attribute 9999 integer

По идее, должно быть достаточно. Естественно, это должно быть добавлено в словарь с двух сторон.

Включите дебаг и смотрите в лог, accel должен писать, что ему приходит. Если пришёл атрибут, которого нет в словаре - об этом сообщается отдельно. Если нет ни одного, ни другого - значит, атрибут не приходит.

Работает ли аксел в режиме IPOE l3 DHCP по схеме:

пользователь-> коммутатор -> маршрутизатор-релей -> аксел

или

пользователь-> коммутатор -> маршрутизатор-релей -> аксел(релей) -> dhcp сервер

Как попросите, так и работает.

Share this post


Link to post
Share on other sites

Как попросите, так и работает.

Ну может не правильно прошу но аксел dhcp релаю отвечает на 68 порт

192.168.3.1 аксел

192.168.5.1 релай

 

18:51:26.093548 IP 192.168.5.1.67 > 192.168.3.1.67: BOOTP/DHCP, Request from d4:ca:6d:e3:43:e9, length 300
18:51:26.139893 IP 192.168.3.1.67 > 192.168.5.1.68: BOOTP/DHCP, Reply, length 268
18:51:26.145131 IP 192.168.5.1 > 192.168.3.1: ICMP 192.168.5.1 udp port 68 unreachable, length 304

 

Начал смотреть по коду, есть функция dhcpv4_send_udp

для эксперимента изменил

//addr.sin_port = htons(DHCP_CLIENT_PORT);

addr.sin_port = htons(DHCP_SERV_PORT);

 

Клиент аренду получил. В качестве дшсп сервера аксел ему назначил адрес роутера... что тоже не правильно... опять в код ... теперь получает адрес аксела в кчестве дшсп. Теперь не продляет лизу по юникасту.... Аксел вижу что шлёт ответ на продление, как я понял на ip+мак пользователя(надо проверить)

решил остановится и спросить. )) На форуме самая популярная схема влан на пользователя. По этой схеме вообще нет информации. Может она не работает или я не тем путём пошёл.

 

verbose=5
lua-file=/etc/accel-ppp.lua
username=lua:username
password=username1
lease-time=600
max-lease-time=3600
unit-cache=10
shared=1
ifcfg=0
mode=L3
start=dhcpv4
interface=eth3,mode=L3,range=192.168.5.0/24,src=192.168.3.1

 

по L2 завелось без проблем.

Share this post


Link to post
Share on other sites

в словаре добавил

ATTRIBUTE PPPD-Redirect-Attribute 9999 integer

По идее, должно быть достаточно. Естественно, это должно быть добавлено в словарь с двух сторон.

Включите дебаг и смотрите в лог, accel должен писать, что ему приходит. Если пришёл атрибут, которого нет в словаре - об этом сообщается отдельно. Если нет ни одного, ни другого - значит, атрибут не приходит.

а в самом конфиге accel-ppp.conf , что указывать, так и оставить?

Нужно ли в конфиге указать атрибут?

 

[pppd-compat]
#ip-pre-up=/etc/ppp/ip-pre-up
ip-up=/etc/ppp/ip-up
ip-down=/etc/ppp/ip-down
ip-change=/etc/ppp/ip-change
radattr-prefix=/var/run/radattr
verbose=1

Edited by roysbike

Share this post


Link to post
Share on other sites

[pppd-compat]
#ip-pre-up=/etc/ppp/ip-pre-up
ip-up=/etc/ppp/ip-up
ip-down=/etc/ppp/ip-down
ip-change=/etc/ppp/ip-change
radattr-prefix=/var/run/radattr
verbose=1

Нет, не нужно.

Повторяю третий раз для тех, кто в танке: проверьте, приходит ли такой атрибут вообще.

Share this post


Link to post
Share on other sites

тестирую L3 режим ipoe

столкнулся с тем что клиенту в качестве siaddr выдаётся адрес основного шлюза(релея), хотя адресом дшсп сервера должен стать аксел.

В итоге лиза не продляется по юникасту, и начинает запрашивать продление по мультикаст.

в ipoe.c

static void __ipoe_session_start(struct ipoe_session *ses)

if (!ses->siaddr && ses->router != ses->yiaddr)
ses->siaddr = ses->router;

if (!ses->siaddr)
find_gw_addr(ses);

if (!ses->siaddr)
ses->siaddr = ses->serv->opt_src;

if (!ses->siaddr && ses->serv->dhcpv4_relay)
ses->siaddr = ses->serv->dhcpv4_relay->giaddr;

 

Такой порядок справедлив для L2 но не для l3.

ввести параметр в конфиге siaddr аналогично src, или src подставлять в первую очередь я не думаю, что это будет не правильно.

Поправте если ошибаюсь.

не совсем понял в чём проблема, опиши конкретно кому какие адреса выдаются

Share this post


Link to post
Share on other sites

roysbike, надо указать в конфиге

[radius]

verbose=1

 

[log]

level=4

 

и посмотреть что в логе

Share this post


Link to post
Share on other sites

verbose=5
lua-file=/etc/accel-ppp.lua
username=lua:username
password=username1
lease-time=600
max-lease-time=3600
unit-cache=10
shared=1
ifcfg=0
mode=L3
start=dhcpv4
interface=eth3,mode=L3,range=192.168.5.0/24,src=192.168.3.1

 

по L2 завелось без проблем.

вообще-то, mode=L3 - для старта сессии по не классифицированному пакету

для дхцп - только L2, к нему L3 как-то мало применим

я вообще не понимаю зачем там ещё нужен где-то промежуточный релей ?

 

пользователь-> коммутатор -> маршрутизатор-релей -> аксел
насчёт маршрутизатора-релея не понял, как он собирается L2 маршрутизировать ?

Share this post


Link to post
Share on other sites
ATTRIBUTE PPPD-Redirect-Attribute 9999 integer
атрибута с номер 9999 быть не может, 1-255

Share this post


Link to post
Share on other sites

У меня в MPD

А с каких пор MPD стал стандартом? :)

Share this post


Link to post
Share on other sites

У меня в MPD

А с каких пор MPD стал стандартом? :)

я не утверждал, заметьте) Я спросил, может оно и так не верно, хотел спросить, как верно то?)

 

ATTRIBUTE PPPD-Redirect-Attribute 9999 integer
атрибута с номер 9999 быть не может, 1-255

ВОт где я лоханулся. Все работает! Спасибо !

Share this post


Link to post
Share on other sites

насчёт маршрутизатора-релея не понял, как он собирается L2 маршрутизировать

В том то и дело что не l2,тут вопросов пока не возникло и в этой схеме никаких маршрутизаторов - релеев нет :)

А l3 режим. Схема удобна тем что не надо гнать кучу vlan в ядро сети.

По такой схеме настраивал se600, cisco asr.

просто из документации сделал вывод что аксел тоже может.

Функциональное отличие L2 от L3, заключается в том что в случае L2 входящий пакет будет 
проверяться на совпадение mac адреса установленного при старте сессии, а исходящие пакеты 
будут отправляться прямиком на этот mac адрес, без дополнительных запросов ARP, что обеспечивает защиту от подмены IP/mac адресов. 
В случае L3 исходящий пакет будет маршрутизироваться согласно установленным правилам маршрутизации. 

А реализовать L3 режим со стартом по DHCP не планируете?

Edited by brodayga

Share this post


Link to post
Share on other sites
А реализовать L3 режим со стартом по DHCP не планируете?
изначально планировался, но в ходе реализации возникли определённые вопросы

поясню немного в чём функция и как работает accel: его функция, помимо всего прочего, заключается в предоставлении, либо отказе прохождения клиентского трафика куда-то далее, решается это методом добавления маршрутов до клиентских ип на заданные интерфейсы

в случае L2 эти интефейсы однозначно идентифицируются по приходу дхцп пакетов

в случае L3 релейные запросы будут приходить скорее всего по одному интерфейсу, а клиентский трафик бегать по другим

если клиентский интефейс один, то задачу в принципе можно решить, если несколько, то тупик

Share this post


Link to post
Share on other sites

Xeb хотел попросить добавить если возможно

чуть выше спрашивал

и насчёт этого вопроса: разные номера портов в запросе авторизации и аккаунтинга, проблему решил так

 

static void ipoe_session_start(struct ipoe_session *ses)

{

int r;

char *passwd;

struct ifreq ifr;

struct unit_cache *uc;

 

__sync_add_and_fetch(&stat_starting, 1);

 

if (!ses->ses.username) {

strncpy(ses->ses.ifname, ses->serv->ifname, AP_IFNAME_LEN);

 

ipoe_session_set_username(ses);

 

if (!ses->ses.username) {

ipoe_session_finished(&ses->ses);

return;

}

}

 

ses->ses.unit_idx = ses->serv->ifindex;

 

/*My insert */

if ((ses->ifindex == -1)&& (ses->serv->opt_shared )) {

pthread_mutex_lock(&uc_lock);

if (!list_empty(&uc_list)) {

uc = list_entry(uc_list.next, typeof(*uc), entry);

ses->ifindex = uc->ifindex;

list_del(&uc->entry);

--uc_size;

pthread_mutex_unlock(&uc_lock);

mempool_free(uc);

} else {

pthread_mutex_unlock(&uc_lock);

ses->ifindex = ipoe_nl_create(0, 0, ses->serv->opt_mode == MODE_L2 ? ses->serv->ifname : NULL, ses->hwaddr);

if (ses->ifindex == -1) {

log_ppp_error("ipoe: failed to create interface\n");

ap_session_terminate(&ses->ses, TERM_NAS_ERROR, 1);

return;

}

}

 

memset(&ifr, 0, sizeof(ifr));

ifr.ifr_ifindex = ses->ifindex;

if (ioctl(sock_fd, SIOCGIFNAME, &ifr, sizeof(ifr))) {

log_ppp_error("ipoe: failed to get interface name\n");

ses->ifindex = -1;

ap_session_terminate(&ses->ses, TERM_NAS_ERROR, 1);

return;

}

 

strncpy(ses->ses.ifname, ifr.ifr_name, AP_IFNAME_LEN);

ses->ses.ifindex = ses->ifindex;

ses->ses.unit_idx = ses->ifindex;

ses->ctrl.dont_ifcfg = 0;

}

/*My insert */

 

 

 

 

triton_event_fire(EV_CTRL_STARTING, &ses->ses);

triton_event_fire(EV_CTRL_STARTED, &ses->ses);

 

ap_session_starting(&ses->ses);

 

if (!conf_noauth) {

r = pwdb_check(&ses->ses, ses->ses.username, PPP_PAP, conf_password ? conf_password : ses->ses.username);

if (r == PWDB_NO_IMPL) {

passwd = pwdb_get_passwd(&ses->ses, ses->ses.username);

if (!passwd)

r = PWDB_DENIED;

else {

r = PWDB_SUCCESS;

_free(passwd);

}

}

 

if (r == PWDB_DENIED) {

/*My insert */

if ((ses->ifindex != -1)&& (ses->serv->opt_shared )) {

if (uc_size < conf_unit_cache && ipoe_nl_modify(ses->ifindex, 0, 0, "", NULL)) {

uc = mempool_alloc(uc_pool);

uc->ifindex = ses->ifindex;

pthread_mutex_lock(&uc_lock);

list_add_tail(&uc->entry, &uc_list);

++uc_size;

pthread_mutex_unlock(&uc_lock);

} else

ipoe_nl_delete(ses->ifindex);

ses->ifindex = -1;

}

/*My insert */

 

 

if (conf_ppp_verbose)

log_ppp_warn("authentication failed\n");

if (conf_l4_redirect_on_reject && !ses->dhcpv4_request && ses->ifindex != -1) {

l4_redirect_list_add(ses->yiaddr, ses->ifindex);

ses->ifindex = -1;

}

ap_session_terminate(&ses->ses, TERM_AUTH_ERROR, 0);

return;

}

}

 

 

Но не хочется при каждом обновлении править код. Да и не знаю правильно ли сделал.

Share this post


Link to post
Share on other sites

посмотрю что можно сделать...

 

А l3 режим. Схема удобна тем что не надо гнать кучу vlan в ядро сети.
чтобы не гнать кучу влан, их можно сагригировать в QinQ и включить монитор вланов

Share this post


Link to post
Share on other sites
чтобы не гнать кучу влан, их можно сагригировать в QinQ и включить монитор вланов

Насчёт этого знаю. Не хочется весь L2 гнать в ядро. И сеть построена l3(есть нюансы).

 

в случае L2 эти интефейсы однозначно идентифицируются по приходу дхцп пакетов

в случае L3 релейные запросы будут приходить скорее всего по одному интерфейсу, а клиентский трафик бегать по другим

если клиентский интефейс один, то задачу в принципе можно решить, если несколько, то тупик

у вас реализована схема l2 шаред, когда один родительский интерфейс и ipoeXXX клиентские. Ну и l3 режим шаред старт по не классифицированному пакету тоже есть. И эта проблемма там решена.

Во всех реализациях "железных IPOE" дшсп запросы должны приходить именно на "родительский интерфейс" иначе не работает.

Единственное необходимо разрешать трафик на dhcp релеии(указывая их) либо просто разрешать любой дшсп трафик.

У редбека se600 например, что то аналогичное вашим виртуальным интерфейсам.

Редбек

Edited by brodayga

Share this post


Link to post
Share on other sites

Вопрос к XEB по консольке accel-ppp: Имеется сервер с accel-ppp 1.7.3 есть ли возможность посмотреть подключенные абонентские сессии на конкретном интерфейсе? Т. е. аналог "show sessions" только не всех, а на каком то конкретном интерфейсе.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now